add sphinx documentation
authorAlina Quereilhac <alina.quereilhac@inria.fr>
Thu, 26 Mar 2015 18:49:13 +0000 (19:49 +0100)
committerAlina Quereilhac <alina.quereilhac@inria.fr>
Thu, 26 Mar 2015 18:49:13 +0000 (19:49 +0100)
368 files changed:
doc/sphinx/Makefile [new file with mode: 0644]
doc/sphinx/_build/doctrees/_layout/modules.doctree [new file with mode: 0644]
doc/sphinx/_build/doctrees/_layout/nepi.data.doctree [new file with mode: 0644]
doc/sphinx/_build/doctrees/_layout/nepi.data.processing.ccn.doctree [new file with mode: 0644]
doc/sphinx/_build/doctrees/_layout/nepi.data.processing.doctree [new file with mode: 0644]
doc/sphinx/_build/doctrees/_layout/nepi.data.processing.ping.doctree [new file with mode: 0644]
doc/sphinx/_build/doctrees/_layout/nepi.doctree [new file with mode: 0644]
doc/sphinx/_build/doctrees/_layout/nepi.execution.doctree [new file with mode: 0644]
doc/sphinx/_build/doctrees/_layout/nepi.resources.all.doctree [new file with mode: 0644]
doc/sphinx/_build/doctrees/_layout/nepi.resources.doctree [new file with mode: 0644]
doc/sphinx/_build/doctrees/_layout/nepi.resources.linux.ccn.doctree [new file with mode: 0644]
doc/sphinx/_build/doctrees/_layout/nepi.resources.linux.doctree [new file with mode: 0644]
doc/sphinx/_build/doctrees/_layout/nepi.resources.linux.netns.doctree [new file with mode: 0644]
doc/sphinx/_build/doctrees/_layout/nepi.resources.linux.ns3.ccn.doctree [new file with mode: 0644]
doc/sphinx/_build/doctrees/_layout/nepi.resources.linux.ns3.doctree [new file with mode: 0644]
doc/sphinx/_build/doctrees/_layout/nepi.resources.netns.doctree [new file with mode: 0644]
doc/sphinx/_build/doctrees/_layout/nepi.resources.ns3.classes.doctree [new file with mode: 0644]
doc/sphinx/_build/doctrees/_layout/nepi.resources.ns3.doctree [new file with mode: 0644]
doc/sphinx/_build/doctrees/_layout/nepi.resources.omf.doctree [new file with mode: 0644]
doc/sphinx/_build/doctrees/_layout/nepi.resources.planetlab.doctree [new file with mode: 0644]
doc/sphinx/_build/doctrees/_layout/nepi.resources.planetlab.ns3.doctree [new file with mode: 0644]
doc/sphinx/_build/doctrees/_layout/nepi.resources.planetlab.openvswitch.doctree [new file with mode: 0644]
doc/sphinx/_build/doctrees/_layout/nepi.util.doctree [new file with mode: 0644]
doc/sphinx/_build/doctrees/_layout/nepi.util.parsers.doctree [new file with mode: 0644]
doc/sphinx/_build/doctrees/environment.pickle [new file with mode: 0644]
doc/sphinx/_build/doctrees/index.doctree [new file with mode: 0644]
doc/sphinx/_build/html/.buildinfo [new file with mode: 0644]
doc/sphinx/_build/html/_layout/modules.html [new file with mode: 0644]
doc/sphinx/_build/html/_layout/nepi.data.html [new file with mode: 0644]
doc/sphinx/_build/html/_layout/nepi.data.processing.ccn.html [new file with mode: 0644]
doc/sphinx/_build/html/_layout/nepi.data.processing.html [new file with mode: 0644]
doc/sphinx/_build/html/_layout/nepi.data.processing.ping.html [new file with mode: 0644]
doc/sphinx/_build/html/_layout/nepi.execution.html [new file with mode: 0644]
doc/sphinx/_build/html/_layout/nepi.html [new file with mode: 0644]
doc/sphinx/_build/html/_layout/nepi.resources.all.html [new file with mode: 0644]
doc/sphinx/_build/html/_layout/nepi.resources.html [new file with mode: 0644]
doc/sphinx/_build/html/_layout/nepi.resources.linux.ccn.html [new file with mode: 0644]
doc/sphinx/_build/html/_layout/nepi.resources.linux.html [new file with mode: 0644]
doc/sphinx/_build/html/_layout/nepi.resources.linux.netns.html [new file with mode: 0644]
doc/sphinx/_build/html/_layout/nepi.resources.linux.ns3.ccn.html [new file with mode: 0644]
doc/sphinx/_build/html/_layout/nepi.resources.linux.ns3.html [new file with mode: 0644]
doc/sphinx/_build/html/_layout/nepi.resources.netns.html [new file with mode: 0644]
doc/sphinx/_build/html/_layout/nepi.resources.ns3.classes.html [new file with mode: 0644]
doc/sphinx/_build/html/_layout/nepi.resources.ns3.html [new file with mode: 0644]
doc/sphinx/_build/html/_layout/nepi.resources.omf.html [new file with mode: 0644]
doc/sphinx/_build/html/_layout/nepi.resources.planetlab.html [new file with mode: 0644]
doc/sphinx/_build/html/_layout/nepi.resources.planetlab.ns3.html [new file with mode: 0644]
doc/sphinx/_build/html/_layout/nepi.resources.planetlab.openvswitch.html [new file with mode: 0644]
doc/sphinx/_build/html/_layout/nepi.util.html [new file with mode: 0644]
doc/sphinx/_build/html/_layout/nepi.util.parsers.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/index.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/data/processing/ccn/parser.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/data/processing/ping/parser.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/execution/attribute.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/execution/ec.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/execution/resource.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/execution/runner.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/execution/scheduler.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/execution/trace.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/all/collector.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/application.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/ccn/ccnapplication.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/ccn/ccncat.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/ccn/ccncontent.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/ccn/ccnd.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/ccn/ccnpeek.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/ccn/ccnping.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/ccn/ccnpingserver.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/ccn/ccnpoke.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/ccn/ccnr.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/ccn/fibentry.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/channel.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/debfuncs.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/gretunnel.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/interface.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/mtr.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/netns/netnsclient.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/netns/netnsemulation.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/node.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/nping.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/ns3/ccn/ns3ccncatdceapplication.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/ns3/ccn/ns3ccndceapplication.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/ns3/ccn/ns3ccnddceapplication.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/ns3/ccn/ns3ccnpeekdceapplication.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/ns3/ccn/ns3ccnpokedceapplication.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/ns3/ccn/ns3ccnrdceapplication.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/ns3/ccn/ns3fibentrydceapplication.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/ns3/fdudptunnel.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/ns3/ns3client.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/ns3/ns3dceapplication.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/ns3/ns3pingdceapplication.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/ns3/ns3simulation.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/ns3/tuntapfdlink.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/ping.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/route.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/rpmfuncs.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/tap.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/tcpdump.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/traceroute.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/tun.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/tunnel.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/udptest.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/linux/udptunnel.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/netns/netnsapplication.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/netns/netnsbase.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/netns/netnsclient.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/netns/netnsemulation.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/netns/netnsinterface.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/netns/netnsipv4address.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/netns/netnsnode.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/netns/netnsnodeinterface.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/netns/netnsroute.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/netns/netnsserver.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/netns/netnsswitch.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/netns/netnswrapper.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/netns/netnswrapper_debug.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/aarf_wifi_manager.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/aarfcd_wifi_manager.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/adhoc_wifi_mac.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/aloha_noack_net_device.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/amrr_wifi_manager.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/ap_wifi_mac.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/arf_wifi_manager.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/arp_l3protocol.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/base_station_net_device.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/binary_error_model.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/binary_error_sixlow_model.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/bridge_channel.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/bridge_net_device.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/bulk_send_application.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/burst_error_model.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/cara_wifi_manager.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/constant_acceleration_mobility_model.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/constant_position_mobility_model.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/constant_rate_wifi_manager.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/constant_speed_propagation_delay_model.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/constant_velocity_mobility_model.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/cost231propagation_loss_model.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/csma_channel.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/csma_net_device.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/drop_tail_queue.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/dsrdsr_routing.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/emu_net_device.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/error_channel.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/error_channel_sixlow.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/error_net_device.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/fd_net_device.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/fixed_rss_loss_model.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/friis_propagation_loss_model.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/gauss_markov_mobility_model.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/hierarchical_mobility_model.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/hybrid_buildings_propagation_loss_model.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/icmpv4l4protocol.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/icmpv6l4protocol.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/ideal_wifi_manager.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/ipv4l3protocol.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/itu_r1411los_propagation_loss_model.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/itu_r1411nlos_over_rooftop_propagation_loss_model.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/jakes_propagation_loss_model.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/kun2600mhz_propagation_loss_model.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/list_error_model.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/log_distance_propagation_loss_model.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/loopback_net_device.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/lr_wpan_net_device.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/lte_enb_net_device.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/lte_simple_net_device.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/lte_ue_net_device.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/matrix_propagation_loss_model.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/mesh_point_device.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/mesh_wifi_interface_mac.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/minstrel_wifi_manager.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/multi_model_spectrum_channel.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/nakagami_propagation_loss_model.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/nist_error_rate_model.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/node.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/non_communicating_net_device.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/ocb_wifi_mac.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/oh_buildings_propagation_loss_model.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/okumura_hata_propagation_loss_model.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/on_off_application.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/onoe_wifi_manager.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/packet_sink.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/ping6.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/point_to_point_channel.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/point_to_point_net_device.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/point_to_point_remote_channel.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/radvd.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/random_direction2d_mobility_model.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/random_propagation_delay_model.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/random_propagation_loss_model.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/random_walk2d_mobility_model.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/random_waypoint_mobility_model.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/range_propagation_loss_model.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/rate_error_model.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/receive_list_error_model.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/red_queue.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/rraa_wifi_manager.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/simple_channel.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/simple_net_device.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/single_model_spectrum_channel.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/six_low_pan_net_device.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/sta_wifi_mac.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/steady_state_random_waypoint_mobility_model.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/subscriber_station_net_device.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/tap_bridge.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/tcp_l4protocol.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/three_log_distance_propagation_loss_model.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/two_ray_ground_propagation_loss_model.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/uan_channel.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/udp_client.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/udp_echo_client.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/udp_echo_server.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/udp_l4protocol.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/udp_server.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/udp_trace_client.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/v4ping.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/virtual_net_device.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/waypoint_mobility_model.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/wifi_net_device.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/yans_error_rate_model.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/yans_wifi_channel.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/yans_wifi_phy.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3application.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3arpl3protocol.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3base.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3ccndceapplication.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3channel.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3client.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3dceapplication.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3dcehelper.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3errormodel.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3errorratemodel.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3fdnetdevice.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3icmpv4l4protocol.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3ipv4l3protocol.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3mobilitymodel.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3netdevice.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3node.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3pipechanel.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3propagationdelaymodel.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3propagationlossmodel.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3queue.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3route.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3server.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3simulation.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3wifichannel.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3wifimac.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3wifinetdevice.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3wifiphy.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3wifiremotestationmanager.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3wrapper.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3wrapper_debug.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/ns3/resource_manager_generator.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/omf/application.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/omf/channel.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/omf/interface.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/omf/messages_5_4.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/omf/messages_6.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/omf/node.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/omf/omf5_api.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/omf/omf6_api.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/omf/omf6_parser.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/omf/omf_api_factory.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/omf/omf_client.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/omf/omf_resource.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/omf/wilabt_node.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/planetlab/node.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/planetlab/ns3/fdudptunnel.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/planetlab/ns3/tuntapfdlink.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/planetlab/openvswitch/ovs.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/planetlab/openvswitch/ovsport.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/planetlab/plcapi.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/planetlab/sfa_node.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/planetlab/tap.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/planetlab/tun.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/resources/planetlab/vroute.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/util/environ.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/util/execfuncs.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/util/guid.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/util/logger.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/util/manifoldapi.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/util/netgraph.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/util/parallel.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/util/parsers/xml_parser.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/util/plotter.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/util/rmatcher.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/util/serializer.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/util/sfaapi.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/util/sfarspec_proc.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/util/sshfuncs.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/util/statfuncs.html [new file with mode: 0644]
doc/sphinx/_build/html/_modules/nepi/util/timefuncs.html [new file with mode: 0644]
doc/sphinx/_build/html/_sources/_layout/modules.txt [new file with mode: 0644]
doc/sphinx/_build/html/_sources/_layout/nepi.data.processing.ccn.txt [new file with mode: 0644]
doc/sphinx/_build/html/_sources/_layout/nepi.data.processing.ping.txt [new file with mode: 0644]
doc/sphinx/_build/html/_sources/_layout/nepi.data.processing.txt [new file with mode: 0644]
doc/sphinx/_build/html/_sources/_layout/nepi.data.txt [new file with mode: 0644]
doc/sphinx/_build/html/_sources/_layout/nepi.execution.txt [new file with mode: 0644]
doc/sphinx/_build/html/_sources/_layout/nepi.resources.all.txt [new file with mode: 0644]
doc/sphinx/_build/html/_sources/_layout/nepi.resources.linux.ccn.txt [new file with mode: 0644]
doc/sphinx/_build/html/_sources/_layout/nepi.resources.linux.netns.txt [new file with mode: 0644]
doc/sphinx/_build/html/_sources/_layout/nepi.resources.linux.ns3.ccn.txt [new file with mode: 0644]
doc/sphinx/_build/html/_sources/_layout/nepi.resources.linux.ns3.txt [new file with mode: 0644]
doc/sphinx/_build/html/_sources/_layout/nepi.resources.linux.txt [new file with mode: 0644]
doc/sphinx/_build/html/_sources/_layout/nepi.resources.netns.txt [new file with mode: 0644]
doc/sphinx/_build/html/_sources/_layout/nepi.resources.ns3.classes.txt [new file with mode: 0644]
doc/sphinx/_build/html/_sources/_layout/nepi.resources.ns3.txt [new file with mode: 0644]
doc/sphinx/_build/html/_sources/_layout/nepi.resources.omf.txt [new file with mode: 0644]
doc/sphinx/_build/html/_sources/_layout/nepi.resources.planetlab.ns3.txt [new file with mode: 0644]
doc/sphinx/_build/html/_sources/_layout/nepi.resources.planetlab.openvswitch.txt [new file with mode: 0644]
doc/sphinx/_build/html/_sources/_layout/nepi.resources.planetlab.txt [new file with mode: 0644]
doc/sphinx/_build/html/_sources/_layout/nepi.resources.txt [new file with mode: 0644]
doc/sphinx/_build/html/_sources/_layout/nepi.txt [new file with mode: 0644]
doc/sphinx/_build/html/_sources/_layout/nepi.util.parsers.txt [new file with mode: 0644]
doc/sphinx/_build/html/_sources/_layout/nepi.util.txt [new file with mode: 0644]
doc/sphinx/_build/html/_sources/index.txt [new file with mode: 0644]
doc/sphinx/_build/html/_static/ajax-loader.gif [new file with mode: 0644]
doc/sphinx/_build/html/_static/basic.css [new file with mode: 0644]
doc/sphinx/_build/html/_static/comment-bright.png [new file with mode: 0644]
doc/sphinx/_build/html/_static/comment-close.png [new file with mode: 0644]
doc/sphinx/_build/html/_static/comment.png [new file with mode: 0644]
doc/sphinx/_build/html/_static/contents.png [new file with mode: 0644]
doc/sphinx/_build/html/_static/doctools.js [new file with mode: 0644]
doc/sphinx/_build/html/_static/down-pressed.png [new file with mode: 0644]
doc/sphinx/_build/html/_static/down.png [new file with mode: 0644]
doc/sphinx/_build/html/_static/file.png [new file with mode: 0644]
doc/sphinx/_build/html/_static/jquery.js [new file with mode: 0644]
doc/sphinx/_build/html/_static/minus.png [new file with mode: 0644]
doc/sphinx/_build/html/_static/navigation.png [new file with mode: 0644]
doc/sphinx/_build/html/_static/plus.png [new file with mode: 0644]
doc/sphinx/_build/html/_static/pygments.css [new file with mode: 0644]
doc/sphinx/_build/html/_static/searchtools.js [new file with mode: 0644]
doc/sphinx/_build/html/_static/sphinxdoc.css [new file with mode: 0644]
doc/sphinx/_build/html/_static/underscore.js [new file with mode: 0644]
doc/sphinx/_build/html/_static/up-pressed.png [new file with mode: 0644]
doc/sphinx/_build/html/_static/up.png [new file with mode: 0644]
doc/sphinx/_build/html/_static/websupport.js [new file with mode: 0644]
doc/sphinx/_build/html/genindex.html [new file with mode: 0644]
doc/sphinx/_build/html/index.html [new file with mode: 0644]
doc/sphinx/_build/html/objects.inv [new file with mode: 0644]
doc/sphinx/_build/html/py-modindex.html [new file with mode: 0644]
doc/sphinx/_build/html/search.html [new file with mode: 0644]
doc/sphinx/_build/html/searchindex.js [new file with mode: 0644]
doc/sphinx/_layout/modules.rst [new file with mode: 0644]
doc/sphinx/_layout/nepi.data.processing.ccn.rst [new file with mode: 0644]
doc/sphinx/_layout/nepi.data.processing.ping.rst [new file with mode: 0644]
doc/sphinx/_layout/nepi.data.processing.rst [new file with mode: 0644]
doc/sphinx/_layout/nepi.data.rst [new file with mode: 0644]
doc/sphinx/_layout/nepi.execution.rst [new file with mode: 0644]
doc/sphinx/_layout/nepi.resources.all.rst [new file with mode: 0644]
doc/sphinx/_layout/nepi.resources.linux.ccn.rst [new file with mode: 0644]
doc/sphinx/_layout/nepi.resources.linux.netns.rst [new file with mode: 0644]
doc/sphinx/_layout/nepi.resources.linux.ns3.ccn.rst [new file with mode: 0644]
doc/sphinx/_layout/nepi.resources.linux.ns3.rst [new file with mode: 0644]
doc/sphinx/_layout/nepi.resources.linux.rst [new file with mode: 0644]
doc/sphinx/_layout/nepi.resources.netns.rst [new file with mode: 0644]
doc/sphinx/_layout/nepi.resources.ns3.classes.rst [new file with mode: 0644]
doc/sphinx/_layout/nepi.resources.ns3.rst [new file with mode: 0644]
doc/sphinx/_layout/nepi.resources.omf.rst [new file with mode: 0644]
doc/sphinx/_layout/nepi.resources.planetlab.ns3.rst [new file with mode: 0644]
doc/sphinx/_layout/nepi.resources.planetlab.openvswitch.rst [new file with mode: 0644]
doc/sphinx/_layout/nepi.resources.planetlab.rst [new file with mode: 0644]
doc/sphinx/_layout/nepi.resources.rst [new file with mode: 0644]
doc/sphinx/_layout/nepi.rst [new file with mode: 0644]
doc/sphinx/_layout/nepi.util.parsers.rst [new file with mode: 0644]
doc/sphinx/_layout/nepi.util.rst [new file with mode: 0644]
doc/sphinx/conf.py [new file with mode: 0644]
doc/sphinx/index.rst [new file with mode: 0644]

diff --git a/doc/sphinx/Makefile b/doc/sphinx/Makefile
new file mode 100644 (file)
index 0000000..99929ff
--- /dev/null
@@ -0,0 +1,153 @@
+# Makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line.
+SPHINXOPTS    =
+SPHINXBUILD   = sphinx-build
+PAPER         =
+BUILDDIR      = _build
+
+# Internal variables.
+PAPEROPT_a4     = -D latex_paper_size=a4
+PAPEROPT_letter = -D latex_paper_size=letter
+ALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
+# the i18n builder cannot share the environment and doctrees with the others
+I18NSPHINXOPTS  = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
+
+.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
+
+help:
+       @echo "Please use \`make <target>' where <target> is one of"
+       @echo "  html       to make standalone HTML files"
+       @echo "  dirhtml    to make HTML files named index.html in directories"
+       @echo "  singlehtml to make a single large HTML file"
+       @echo "  pickle     to make pickle files"
+       @echo "  json       to make JSON files"
+       @echo "  htmlhelp   to make HTML files and a HTML help project"
+       @echo "  qthelp     to make HTML files and a qthelp project"
+       @echo "  devhelp    to make HTML files and a Devhelp project"
+       @echo "  epub       to make an epub"
+       @echo "  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
+       @echo "  latexpdf   to make LaTeX files and run them through pdflatex"
+       @echo "  text       to make text files"
+       @echo "  man        to make manual pages"
+       @echo "  texinfo    to make Texinfo files"
+       @echo "  info       to make Texinfo files and run them through makeinfo"
+       @echo "  gettext    to make PO message catalogs"
+       @echo "  changes    to make an overview of all changed/added/deprecated items"
+       @echo "  linkcheck  to check all external links for integrity"
+       @echo "  doctest    to run all doctests embedded in the documentation (if enabled)"
+
+clean:
+       -rm -rf $(BUILDDIR)/*
+
+html:
+       $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
+       @echo
+       @echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
+
+dirhtml:
+       $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
+       @echo
+       @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
+
+singlehtml:
+       $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
+       @echo
+       @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
+
+pickle:
+       $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
+       @echo
+       @echo "Build finished; now you can process the pickle files."
+
+json:
+       $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
+       @echo
+       @echo "Build finished; now you can process the JSON files."
+
+htmlhelp:
+       $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
+       @echo
+       @echo "Build finished; now you can run HTML Help Workshop with the" \
+             ".hhp project file in $(BUILDDIR)/htmlhelp."
+
+qthelp:
+       $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
+       @echo
+       @echo "Build finished; now you can run "qcollectiongenerator" with the" \
+             ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
+       @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Nepi.qhcp"
+       @echo "To view the help file:"
+       @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Nepi.qhc"
+
+devhelp:
+       $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
+       @echo
+       @echo "Build finished."
+       @echo "To view the help file:"
+       @echo "# mkdir -p $$HOME/.local/share/devhelp/Nepi"
+       @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Nepi"
+       @echo "# devhelp"
+
+epub:
+       $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
+       @echo
+       @echo "Build finished. The epub file is in $(BUILDDIR)/epub."
+
+latex:
+       $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+       @echo
+       @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
+       @echo "Run \`make' in that directory to run these through (pdf)latex" \
+             "(use \`make latexpdf' here to do that automatically)."
+
+latexpdf:
+       $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+       @echo "Running LaTeX files through pdflatex..."
+       $(MAKE) -C $(BUILDDIR)/latex all-pdf
+       @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
+
+text:
+       $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
+       @echo
+       @echo "Build finished. The text files are in $(BUILDDIR)/text."
+
+man:
+       $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
+       @echo
+       @echo "Build finished. The manual pages are in $(BUILDDIR)/man."
+
+texinfo:
+       $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
+       @echo
+       @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
+       @echo "Run \`make' in that directory to run these through makeinfo" \
+             "(use \`make info' here to do that automatically)."
+
+info:
+       $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
+       @echo "Running Texinfo files through makeinfo..."
+       make -C $(BUILDDIR)/texinfo info
+       @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
+
+gettext:
+       $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
+       @echo
+       @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
+
+changes:
+       $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
+       @echo
+       @echo "The overview file is in $(BUILDDIR)/changes."
+
+linkcheck:
+       $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
+       @echo
+       @echo "Link check complete; look for any errors in the above output " \
+             "or in $(BUILDDIR)/linkcheck/output.txt."
+
+doctest:
+       $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
+       @echo "Testing of doctests in the sources finished, look at the " \
+             "results in $(BUILDDIR)/doctest/output.txt."
diff --git a/doc/sphinx/_build/doctrees/_layout/modules.doctree b/doc/sphinx/_build/doctrees/_layout/modules.doctree
new file mode 100644 (file)
index 0000000..ec30cb7
Binary files /dev/null and b/doc/sphinx/_build/doctrees/_layout/modules.doctree differ
diff --git a/doc/sphinx/_build/doctrees/_layout/nepi.data.doctree b/doc/sphinx/_build/doctrees/_layout/nepi.data.doctree
new file mode 100644 (file)
index 0000000..c4f7845
Binary files /dev/null and b/doc/sphinx/_build/doctrees/_layout/nepi.data.doctree differ
diff --git a/doc/sphinx/_build/doctrees/_layout/nepi.data.processing.ccn.doctree b/doc/sphinx/_build/doctrees/_layout/nepi.data.processing.ccn.doctree
new file mode 100644 (file)
index 0000000..a5a8817
Binary files /dev/null and b/doc/sphinx/_build/doctrees/_layout/nepi.data.processing.ccn.doctree differ
diff --git a/doc/sphinx/_build/doctrees/_layout/nepi.data.processing.doctree b/doc/sphinx/_build/doctrees/_layout/nepi.data.processing.doctree
new file mode 100644 (file)
index 0000000..70a98ba
Binary files /dev/null and b/doc/sphinx/_build/doctrees/_layout/nepi.data.processing.doctree differ
diff --git a/doc/sphinx/_build/doctrees/_layout/nepi.data.processing.ping.doctree b/doc/sphinx/_build/doctrees/_layout/nepi.data.processing.ping.doctree
new file mode 100644 (file)
index 0000000..f97deac
Binary files /dev/null and b/doc/sphinx/_build/doctrees/_layout/nepi.data.processing.ping.doctree differ
diff --git a/doc/sphinx/_build/doctrees/_layout/nepi.doctree b/doc/sphinx/_build/doctrees/_layout/nepi.doctree
new file mode 100644 (file)
index 0000000..a07ade5
Binary files /dev/null and b/doc/sphinx/_build/doctrees/_layout/nepi.doctree differ
diff --git a/doc/sphinx/_build/doctrees/_layout/nepi.execution.doctree b/doc/sphinx/_build/doctrees/_layout/nepi.execution.doctree
new file mode 100644 (file)
index 0000000..d18e0a5
Binary files /dev/null and b/doc/sphinx/_build/doctrees/_layout/nepi.execution.doctree differ
diff --git a/doc/sphinx/_build/doctrees/_layout/nepi.resources.all.doctree b/doc/sphinx/_build/doctrees/_layout/nepi.resources.all.doctree
new file mode 100644 (file)
index 0000000..c911676
Binary files /dev/null and b/doc/sphinx/_build/doctrees/_layout/nepi.resources.all.doctree differ
diff --git a/doc/sphinx/_build/doctrees/_layout/nepi.resources.doctree b/doc/sphinx/_build/doctrees/_layout/nepi.resources.doctree
new file mode 100644 (file)
index 0000000..4acbd6a
Binary files /dev/null and b/doc/sphinx/_build/doctrees/_layout/nepi.resources.doctree differ
diff --git a/doc/sphinx/_build/doctrees/_layout/nepi.resources.linux.ccn.doctree b/doc/sphinx/_build/doctrees/_layout/nepi.resources.linux.ccn.doctree
new file mode 100644 (file)
index 0000000..2b7a2f4
Binary files /dev/null and b/doc/sphinx/_build/doctrees/_layout/nepi.resources.linux.ccn.doctree differ
diff --git a/doc/sphinx/_build/doctrees/_layout/nepi.resources.linux.doctree b/doc/sphinx/_build/doctrees/_layout/nepi.resources.linux.doctree
new file mode 100644 (file)
index 0000000..26c8ded
Binary files /dev/null and b/doc/sphinx/_build/doctrees/_layout/nepi.resources.linux.doctree differ
diff --git a/doc/sphinx/_build/doctrees/_layout/nepi.resources.linux.netns.doctree b/doc/sphinx/_build/doctrees/_layout/nepi.resources.linux.netns.doctree
new file mode 100644 (file)
index 0000000..a5af36f
Binary files /dev/null and b/doc/sphinx/_build/doctrees/_layout/nepi.resources.linux.netns.doctree differ
diff --git a/doc/sphinx/_build/doctrees/_layout/nepi.resources.linux.ns3.ccn.doctree b/doc/sphinx/_build/doctrees/_layout/nepi.resources.linux.ns3.ccn.doctree
new file mode 100644 (file)
index 0000000..a3194bd
Binary files /dev/null and b/doc/sphinx/_build/doctrees/_layout/nepi.resources.linux.ns3.ccn.doctree differ
diff --git a/doc/sphinx/_build/doctrees/_layout/nepi.resources.linux.ns3.doctree b/doc/sphinx/_build/doctrees/_layout/nepi.resources.linux.ns3.doctree
new file mode 100644 (file)
index 0000000..f82425e
Binary files /dev/null and b/doc/sphinx/_build/doctrees/_layout/nepi.resources.linux.ns3.doctree differ
diff --git a/doc/sphinx/_build/doctrees/_layout/nepi.resources.netns.doctree b/doc/sphinx/_build/doctrees/_layout/nepi.resources.netns.doctree
new file mode 100644 (file)
index 0000000..4c23172
Binary files /dev/null and b/doc/sphinx/_build/doctrees/_layout/nepi.resources.netns.doctree differ
diff --git a/doc/sphinx/_build/doctrees/_layout/nepi.resources.ns3.classes.doctree b/doc/sphinx/_build/doctrees/_layout/nepi.resources.ns3.classes.doctree
new file mode 100644 (file)
index 0000000..10cd63b
Binary files /dev/null and b/doc/sphinx/_build/doctrees/_layout/nepi.resources.ns3.classes.doctree differ
diff --git a/doc/sphinx/_build/doctrees/_layout/nepi.resources.ns3.doctree b/doc/sphinx/_build/doctrees/_layout/nepi.resources.ns3.doctree
new file mode 100644 (file)
index 0000000..dd6ab1b
Binary files /dev/null and b/doc/sphinx/_build/doctrees/_layout/nepi.resources.ns3.doctree differ
diff --git a/doc/sphinx/_build/doctrees/_layout/nepi.resources.omf.doctree b/doc/sphinx/_build/doctrees/_layout/nepi.resources.omf.doctree
new file mode 100644 (file)
index 0000000..ee74928
Binary files /dev/null and b/doc/sphinx/_build/doctrees/_layout/nepi.resources.omf.doctree differ
diff --git a/doc/sphinx/_build/doctrees/_layout/nepi.resources.planetlab.doctree b/doc/sphinx/_build/doctrees/_layout/nepi.resources.planetlab.doctree
new file mode 100644 (file)
index 0000000..6f56c31
Binary files /dev/null and b/doc/sphinx/_build/doctrees/_layout/nepi.resources.planetlab.doctree differ
diff --git a/doc/sphinx/_build/doctrees/_layout/nepi.resources.planetlab.ns3.doctree b/doc/sphinx/_build/doctrees/_layout/nepi.resources.planetlab.ns3.doctree
new file mode 100644 (file)
index 0000000..397fa8b
Binary files /dev/null and b/doc/sphinx/_build/doctrees/_layout/nepi.resources.planetlab.ns3.doctree differ
diff --git a/doc/sphinx/_build/doctrees/_layout/nepi.resources.planetlab.openvswitch.doctree b/doc/sphinx/_build/doctrees/_layout/nepi.resources.planetlab.openvswitch.doctree
new file mode 100644 (file)
index 0000000..3ede8d5
Binary files /dev/null and b/doc/sphinx/_build/doctrees/_layout/nepi.resources.planetlab.openvswitch.doctree differ
diff --git a/doc/sphinx/_build/doctrees/_layout/nepi.util.doctree b/doc/sphinx/_build/doctrees/_layout/nepi.util.doctree
new file mode 100644 (file)
index 0000000..d114ec2
Binary files /dev/null and b/doc/sphinx/_build/doctrees/_layout/nepi.util.doctree differ
diff --git a/doc/sphinx/_build/doctrees/_layout/nepi.util.parsers.doctree b/doc/sphinx/_build/doctrees/_layout/nepi.util.parsers.doctree
new file mode 100644 (file)
index 0000000..c281d94
Binary files /dev/null and b/doc/sphinx/_build/doctrees/_layout/nepi.util.parsers.doctree differ
diff --git a/doc/sphinx/_build/doctrees/environment.pickle b/doc/sphinx/_build/doctrees/environment.pickle
new file mode 100644 (file)
index 0000000..b277fb6
Binary files /dev/null and b/doc/sphinx/_build/doctrees/environment.pickle differ
diff --git a/doc/sphinx/_build/doctrees/index.doctree b/doc/sphinx/_build/doctrees/index.doctree
new file mode 100644 (file)
index 0000000..cef08a5
Binary files /dev/null and b/doc/sphinx/_build/doctrees/index.doctree differ
diff --git a/doc/sphinx/_build/html/.buildinfo b/doc/sphinx/_build/html/.buildinfo
new file mode 100644 (file)
index 0000000..25f6489
--- /dev/null
@@ -0,0 +1,4 @@
+# Sphinx build info version 1
+# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
+config: b80fe6905e1167a38cd1f4c456e3337c
+tags: 645f666f9bcd5a90fca523b33c5a78b7
diff --git a/doc/sphinx/_build/html/_layout/modules.html b/doc/sphinx/_build/html/_layout/modules.html
new file mode 100644 (file)
index 0000000..40aa140
--- /dev/null
@@ -0,0 +1,150 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../_static/jquery.js"></script>
+    <script type="text/javascript" src="../_static/underscore.js"></script>
+    <script type="text/javascript" src="../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+  <h3>This Page</h3>
+  <ul class="this-page-menu">
+    <li><a href="../_sources/_layout/modules.txt"
+           rel="nofollow">Show Source</a></li>
+  </ul>
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <div class="section" id="nepi">
+<h1>nepi<a class="headerlink" href="#nepi" title="Permalink to this headline">¶</a></h1>
+<div class="toctree-wrapper compound">
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="nepi.html">nepi package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="nepi.html#subpackages">Subpackages</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nepi.data.html">nepi.data package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nepi.data.html#subpackages">Subpackages</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.data.html#module-nepi.data">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="nepi.execution.html">nepi.execution package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nepi.execution.html#submodules">Submodules</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.execution.html#module-nepi.execution.attribute">nepi.execution.attribute module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.execution.html#module-nepi.execution.ec">nepi.execution.ec module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.execution.html#module-nepi.execution.resource">nepi.execution.resource module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.execution.html#module-nepi.execution.runner">nepi.execution.runner module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.execution.html#module-nepi.execution.scheduler">nepi.execution.scheduler module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.execution.html#module-nepi.execution.tags">nepi.execution.tags module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.execution.html#module-nepi.execution.trace">nepi.execution.trace module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.execution.html#module-nepi.execution">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="nepi.resources.html">nepi.resources package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.html#subpackages">Subpackages</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.html#module-nepi.resources">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="nepi.util.html">nepi.util package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nepi.util.html#subpackages">Subpackages</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.util.html#submodules">Submodules</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.util.html#nepi-util-environ-module">nepi.util.environ module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.util.html#module-nepi.util.execfuncs">nepi.util.execfuncs module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.util.html#module-nepi.util.guid">nepi.util.guid module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.util.html#module-nepi.util.logger">nepi.util.logger module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.util.html#module-nepi.util.manifoldapi">nepi.util.manifoldapi module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.util.html#module-nepi.util.netgraph">nepi.util.netgraph module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.util.html#module-nepi.util.parallel">nepi.util.parallel module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.util.html#module-nepi.util.plotter">nepi.util.plotter module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.util.html#module-nepi.util.rmatcher">nepi.util.rmatcher module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.util.html#module-nepi.util.serializer">nepi.util.serializer module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.util.html#module-nepi.util.sfaapi">nepi.util.sfaapi module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.util.html#module-nepi.util.sfarspec_proc">nepi.util.sfarspec_proc module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.util.html#module-nepi.util.sshfuncs">nepi.util.sshfuncs module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.util.html#module-nepi.util.statfuncs">nepi.util.statfuncs module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.util.html#module-nepi.util.timefuncs">nepi.util.timefuncs module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.util.html#module-nepi.util">Module contents</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.html#module-nepi">Module contents</a></li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_layout/nepi.data.html b/doc/sphinx/_build/html/_layout/nepi.data.html
new file mode 100644 (file)
index 0000000..5199c38
--- /dev/null
@@ -0,0 +1,134 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.data package &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../_static/jquery.js"></script>
+    <script type="text/javascript" src="../_static/underscore.js"></script>
+    <script type="text/javascript" src="../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+  <h3><a href="../index.html">Table Of Contents</a></h3>
+  <ul>
+<li><a class="reference internal" href="#">nepi.data package</a><ul>
+<li><a class="reference internal" href="#subpackages">Subpackages</a></li>
+<li><a class="reference internal" href="#module-nepi.data">Module contents</a></li>
+</ul>
+</li>
+</ul>
+
+  <h3>This Page</h3>
+  <ul class="this-page-menu">
+    <li><a href="../_sources/_layout/nepi.data.txt"
+           rel="nofollow">Show Source</a></li>
+  </ul>
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <div class="section" id="nepi-data-package">
+<h1>nepi.data package<a class="headerlink" href="#nepi-data-package" title="Permalink to this headline">¶</a></h1>
+<div class="section" id="subpackages">
+<h2>Subpackages<a class="headerlink" href="#subpackages" title="Permalink to this headline">¶</a></h2>
+<div class="toctree-wrapper compound">
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="nepi.data.processing.html">nepi.data.processing package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="nepi.data.processing.html#subpackages">Subpackages</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nepi.data.processing.ccn.html">nepi.data.processing.ccn package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nepi.data.processing.ccn.html#submodules">Submodules</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.data.processing.ccn.html#module-nepi.data.processing.ccn.parser">nepi.data.processing.ccn.parser module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.data.processing.ccn.html#module-nepi.data.processing.ccn">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="nepi.data.processing.ping.html">nepi.data.processing.ping package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nepi.data.processing.ping.html#submodules">Submodules</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.data.processing.ping.html#module-nepi.data.processing.ping.parser">nepi.data.processing.ping.parser module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.data.processing.ping.html#module-nepi.data.processing.ping">Module contents</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.data.processing.html#module-nepi.data.processing">Module contents</a></li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<div class="section" id="module-nepi.data">
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-nepi.data" title="Permalink to this headline">¶</a></h2>
+</div>
+</div>
+
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_layout/nepi.data.processing.ccn.html b/doc/sphinx/_build/html/_layout/nepi.data.processing.ccn.html
new file mode 100644 (file)
index 0000000..49ad55d
--- /dev/null
@@ -0,0 +1,174 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.data.processing.ccn package &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../_static/jquery.js"></script>
+    <script type="text/javascript" src="../_static/underscore.js"></script>
+    <script type="text/javascript" src="../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+  <h3><a href="../index.html">Table Of Contents</a></h3>
+  <ul>
+<li><a class="reference internal" href="#">nepi.data.processing.ccn package</a><ul>
+<li><a class="reference internal" href="#submodules">Submodules</a></li>
+<li><a class="reference internal" href="#module-nepi.data.processing.ccn.parser">nepi.data.processing.ccn.parser module</a></li>
+<li><a class="reference internal" href="#module-nepi.data.processing.ccn">Module contents</a></li>
+</ul>
+</li>
+</ul>
+
+  <h3>This Page</h3>
+  <ul class="this-page-menu">
+    <li><a href="../_sources/_layout/nepi.data.processing.ccn.txt"
+           rel="nofollow">Show Source</a></li>
+  </ul>
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <div class="section" id="nepi-data-processing-ccn-package">
+<h1>nepi.data.processing.ccn package<a class="headerlink" href="#nepi-data-processing-ccn-package" title="Permalink to this headline">¶</a></h1>
+<div class="section" id="submodules">
+<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline">¶</a></h2>
+</div>
+<div class="section" id="module-nepi.data.processing.ccn.parser">
+<span id="nepi-data-processing-ccn-parser-module"></span><h2>nepi.data.processing.ccn.parser module<a class="headerlink" href="#module-nepi.data.processing.ccn.parser" title="Permalink to this headline">¶</a></h2>
+<dl class="function">
+<dt id="nepi.data.processing.ccn.parser.annotate_cn_graph">
+<tt class="descclassname">nepi.data.processing.ccn.parser.</tt><tt class="descname">annotate_cn_graph</tt><big>(</big><em>logs_dir</em>, <em>graph</em>, <em>parse_ping_logs=False</em><big>)</big><a class="reference internal" href="../_modules/nepi/data/processing/ccn/parser.html#annotate_cn_graph"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.data.processing.ccn.parser.annotate_cn_graph" title="Permalink to this definition">¶</a></dt>
+<dd><p>Adds CCN content history for each node in the topology graph.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="nepi.data.processing.ccn.parser.annotate_cn_node">
+<tt class="descclassname">nepi.data.processing.ccn.parser.</tt><tt class="descname">annotate_cn_node</tt><big>(</big><em>graph</em>, <em>nid</em>, <em>ips2nid</em>, <em>data</em>, <em>content_history</em><big>)</big><a class="reference internal" href="../_modules/nepi/data/processing/ccn/parser.html#annotate_cn_node"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.data.processing.ccn.parser.annotate_cn_node" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="function">
+<dt id="nepi.data.processing.ccn.parser.ccn_consumers">
+<tt class="descclassname">nepi.data.processing.ccn.parser.</tt><tt class="descname">ccn_consumers</tt><big>(</big><em>graph</em><big>)</big><a class="reference internal" href="../_modules/nepi/data/processing/ccn/parser.html#ccn_consumers"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.data.processing.ccn.parser.ccn_consumers" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the nodes that are content consumers</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="nepi.data.processing.ccn.parser.ccn_producers">
+<tt class="descclassname">nepi.data.processing.ccn.parser.</tt><tt class="descname">ccn_producers</tt><big>(</big><em>graph</em><big>)</big><a class="reference internal" href="../_modules/nepi/data/processing/ccn/parser.html#ccn_producers"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.data.processing.ccn.parser.ccn_producers" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the nodes that are content providers</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="nepi.data.processing.ccn.parser.dump_content_history">
+<tt class="descclassname">nepi.data.processing.ccn.parser.</tt><tt class="descname">dump_content_history</tt><big>(</big><em>content_history</em><big>)</big><a class="reference internal" href="../_modules/nepi/data/processing/ccn/parser.html#dump_content_history"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.data.processing.ccn.parser.dump_content_history" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="function">
+<dt id="nepi.data.processing.ccn.parser.is_control">
+<tt class="descclassname">nepi.data.processing.ccn.parser.</tt><tt class="descname">is_control</tt><big>(</big><em>content_name</em><big>)</big><a class="reference internal" href="../_modules/nepi/data/processing/ccn/parser.html#is_control"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.data.processing.ccn.parser.is_control" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="function">
+<dt id="nepi.data.processing.ccn.parser.load_content_history">
+<tt class="descclassname">nepi.data.processing.ccn.parser.</tt><tt class="descname">load_content_history</tt><big>(</big><em>fname</em><big>)</big><a class="reference internal" href="../_modules/nepi/data/processing/ccn/parser.html#load_content_history"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.data.processing.ccn.parser.load_content_history" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="function">
+<dt id="nepi.data.processing.ccn.parser.parse_file">
+<tt class="descclassname">nepi.data.processing.ccn.parser.</tt><tt class="descname">parse_file</tt><big>(</big><em>filename</em><big>)</big><a class="reference internal" href="../_modules/nepi/data/processing/ccn/parser.html#parse_file"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.data.processing.ccn.parser.parse_file" title="Permalink to this definition">¶</a></dt>
+<dd><p>Parses message information from ccnd log files</p>
+<p>filename: path to ccndlog file</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="nepi.data.processing.ccn.parser.process_content_history">
+<tt class="descclassname">nepi.data.processing.ccn.parser.</tt><tt class="descname">process_content_history</tt><big>(</big><em>graph</em><big>)</big><a class="reference internal" href="../_modules/nepi/data/processing/ccn/parser.html#process_content_history"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.data.processing.ccn.parser.process_content_history" title="Permalink to this definition">¶</a></dt>
+<dd><p>Compute CCN message counts and aggregates content historical 
+information in the content_names dictionary</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="nepi.data.processing.ccn.parser.process_content_history_logs">
+<tt class="descclassname">nepi.data.processing.ccn.parser.</tt><tt class="descname">process_content_history_logs</tt><big>(</big><em>logs_dir</em>, <em>graph</em>, <em>parse_ping_logs=False</em><big>)</big><a class="reference internal" href="../_modules/nepi/data/processing/ccn/parser.html#process_content_history_logs"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.data.processing.ccn.parser.process_content_history_logs" title="Permalink to this definition">¶</a></dt>
+<dd><p>Parse CCN logs and aggregate content history information in graph.
+Returns annotated graph and message countn and content names history.</p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.data.processing.ccn">
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-nepi.data.processing.ccn" title="Permalink to this headline">¶</a></h2>
+</div>
+</div>
+
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_layout/nepi.data.processing.html b/doc/sphinx/_build/html/_layout/nepi.data.processing.html
new file mode 100644 (file)
index 0000000..4fb2e10
--- /dev/null
@@ -0,0 +1,127 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.data.processing package &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../_static/jquery.js"></script>
+    <script type="text/javascript" src="../_static/underscore.js"></script>
+    <script type="text/javascript" src="../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+  <h3><a href="../index.html">Table Of Contents</a></h3>
+  <ul>
+<li><a class="reference internal" href="#">nepi.data.processing package</a><ul>
+<li><a class="reference internal" href="#subpackages">Subpackages</a></li>
+<li><a class="reference internal" href="#module-nepi.data.processing">Module contents</a></li>
+</ul>
+</li>
+</ul>
+
+  <h3>This Page</h3>
+  <ul class="this-page-menu">
+    <li><a href="../_sources/_layout/nepi.data.processing.txt"
+           rel="nofollow">Show Source</a></li>
+  </ul>
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <div class="section" id="nepi-data-processing-package">
+<h1>nepi.data.processing package<a class="headerlink" href="#nepi-data-processing-package" title="Permalink to this headline">¶</a></h1>
+<div class="section" id="subpackages">
+<h2>Subpackages<a class="headerlink" href="#subpackages" title="Permalink to this headline">¶</a></h2>
+<div class="toctree-wrapper compound">
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="nepi.data.processing.ccn.html">nepi.data.processing.ccn package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="nepi.data.processing.ccn.html#submodules">Submodules</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.data.processing.ccn.html#module-nepi.data.processing.ccn.parser">nepi.data.processing.ccn.parser module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.data.processing.ccn.html#module-nepi.data.processing.ccn">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="nepi.data.processing.ping.html">nepi.data.processing.ping package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="nepi.data.processing.ping.html#submodules">Submodules</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.data.processing.ping.html#module-nepi.data.processing.ping.parser">nepi.data.processing.ping.parser module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.data.processing.ping.html#module-nepi.data.processing.ping">Module contents</a></li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<div class="section" id="module-nepi.data.processing">
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-nepi.data.processing" title="Permalink to this headline">¶</a></h2>
+</div>
+</div>
+
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_layout/nepi.data.processing.ping.html b/doc/sphinx/_build/html/_layout/nepi.data.processing.ping.html
new file mode 100644 (file)
index 0000000..c9162d9
--- /dev/null
@@ -0,0 +1,133 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.data.processing.ping package &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../_static/jquery.js"></script>
+    <script type="text/javascript" src="../_static/underscore.js"></script>
+    <script type="text/javascript" src="../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+  <h3><a href="../index.html">Table Of Contents</a></h3>
+  <ul>
+<li><a class="reference internal" href="#">nepi.data.processing.ping package</a><ul>
+<li><a class="reference internal" href="#submodules">Submodules</a></li>
+<li><a class="reference internal" href="#module-nepi.data.processing.ping.parser">nepi.data.processing.ping.parser module</a></li>
+<li><a class="reference internal" href="#module-nepi.data.processing.ping">Module contents</a></li>
+</ul>
+</li>
+</ul>
+
+  <h3>This Page</h3>
+  <ul class="this-page-menu">
+    <li><a href="../_sources/_layout/nepi.data.processing.ping.txt"
+           rel="nofollow">Show Source</a></li>
+  </ul>
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <div class="section" id="nepi-data-processing-ping-package">
+<h1>nepi.data.processing.ping package<a class="headerlink" href="#nepi-data-processing-ping-package" title="Permalink to this headline">¶</a></h1>
+<div class="section" id="submodules">
+<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline">¶</a></h2>
+</div>
+<div class="section" id="module-nepi.data.processing.ping.parser">
+<span id="nepi-data-processing-ping-parser-module"></span><h2>nepi.data.processing.ping.parser module<a class="headerlink" href="#module-nepi.data.processing.ping.parser" title="Permalink to this headline">¶</a></h2>
+<dl class="function">
+<dt id="nepi.data.processing.ping.parser.annotate_cn_graph">
+<tt class="descclassname">nepi.data.processing.ping.parser.</tt><tt class="descname">annotate_cn_graph</tt><big>(</big><em>logs_dir</em>, <em>graph</em><big>)</big><a class="reference internal" href="../_modules/nepi/data/processing/ping/parser.html#annotate_cn_graph"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.data.processing.ping.parser.annotate_cn_graph" title="Permalink to this definition">¶</a></dt>
+<dd><p>Add delay inormation to graph using data collected using
+ping.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="nepi.data.processing.ping.parser.annotate_cn_node">
+<tt class="descclassname">nepi.data.processing.ping.parser.</tt><tt class="descname">annotate_cn_node</tt><big>(</big><em>graph</em>, <em>nid1</em>, <em>ips2nid</em>, <em>data</em><big>)</big><a class="reference internal" href="../_modules/nepi/data/processing/ping/parser.html#annotate_cn_node"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.data.processing.ping.parser.annotate_cn_node" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="function">
+<dt id="nepi.data.processing.ping.parser.parse_file">
+<tt class="descclassname">nepi.data.processing.ping.parser.</tt><tt class="descname">parse_file</tt><big>(</big><em>filename</em><big>)</big><a class="reference internal" href="../_modules/nepi/data/processing/ping/parser.html#parse_file"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.data.processing.ping.parser.parse_file" title="Permalink to this definition">¶</a></dt>
+<dd><p>filename: path to traceroute file</p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.data.processing.ping">
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-nepi.data.processing.ping" title="Permalink to this headline">¶</a></h2>
+</div>
+</div>
+
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_layout/nepi.execution.html b/doc/sphinx/_build/html/_layout/nepi.execution.html
new file mode 100644 (file)
index 0000000..75b38a0
--- /dev/null
@@ -0,0 +1,2376 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.execution package &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../_static/jquery.js"></script>
+    <script type="text/javascript" src="../_static/underscore.js"></script>
+    <script type="text/javascript" src="../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+  <h3><a href="../index.html">Table Of Contents</a></h3>
+  <ul>
+<li><a class="reference internal" href="#">nepi.execution package</a><ul>
+<li><a class="reference internal" href="#submodules">Submodules</a></li>
+<li><a class="reference internal" href="#module-nepi.execution.attribute">nepi.execution.attribute module</a></li>
+<li><a class="reference internal" href="#module-nepi.execution.ec">nepi.execution.ec module</a></li>
+<li><a class="reference internal" href="#module-nepi.execution.resource">nepi.execution.resource module</a></li>
+<li><a class="reference internal" href="#module-nepi.execution.runner">nepi.execution.runner module</a></li>
+<li><a class="reference internal" href="#module-nepi.execution.scheduler">nepi.execution.scheduler module</a></li>
+<li><a class="reference internal" href="#module-nepi.execution.tags">nepi.execution.tags module</a></li>
+<li><a class="reference internal" href="#module-nepi.execution.trace">nepi.execution.trace module</a></li>
+<li><a class="reference internal" href="#module-nepi.execution">Module contents</a></li>
+</ul>
+</li>
+</ul>
+
+  <h3>This Page</h3>
+  <ul class="this-page-menu">
+    <li><a href="../_sources/_layout/nepi.execution.txt"
+           rel="nofollow">Show Source</a></li>
+  </ul>
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <div class="section" id="nepi-execution-package">
+<h1>nepi.execution package<a class="headerlink" href="#nepi-execution-package" title="Permalink to this headline">¶</a></h1>
+<div class="section" id="submodules">
+<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline">¶</a></h2>
+</div>
+<div class="section" id="module-nepi.execution.attribute">
+<span id="nepi-execution-attribute-module"></span><h2>nepi.execution.attribute module<a class="headerlink" href="#module-nepi.execution.attribute" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.execution.attribute.Attribute">
+<em class="property">class </em><tt class="descclassname">nepi.execution.attribute.</tt><tt class="descname">Attribute</tt><big>(</big><em>name</em>, <em>help</em>, <em>type='STRING'</em>, <em>flags=None</em>, <em>default=None</em>, <em>allowed=None</em>, <em>range=None</em>, <em>set_hook=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/attribute.html#Attribute"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.attribute.Attribute" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference external" href="http://docs.python.org/library/functions.html#object" title="(in Python v2.7)"><tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></a></p>
+<p>An Attribute exposes a configuration parameter of a resource</p>
+<dl class="attribute">
+<dt id="nepi.execution.attribute.Attribute.allowed">
+<tt class="descname">allowed</tt><a class="reference internal" href="../_modules/nepi/execution/attribute.html#Attribute.allowed"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.attribute.Attribute.allowed" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the set of allowed values for the Attribute</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.attribute.Attribute.default">
+<tt class="descname">default</tt><a class="reference internal" href="../_modules/nepi/execution/attribute.html#Attribute.default"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.attribute.Attribute.default" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the default value of the Attribute</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.attribute.Attribute.flags">
+<tt class="descname">flags</tt><a class="reference internal" href="../_modules/nepi/execution/attribute.html#Attribute.flags"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.attribute.Attribute.flags" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the flags of the Attribute</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.attribute.Attribute.get_value">
+<tt class="descname">get_value</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/execution/attribute.html#Attribute.get_value"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.attribute.Attribute.get_value" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the value of the Attribute</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.attribute.Attribute.has_changed">
+<tt class="descname">has_changed</tt><a class="reference internal" href="../_modules/nepi/execution/attribute.html#Attribute.has_changed"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.attribute.Attribute.has_changed" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns True if the value has changed from the default</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.attribute.Attribute.has_flag">
+<tt class="descname">has_flag</tt><big>(</big><em>flag</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/attribute.html#Attribute.has_flag"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.attribute.Attribute.has_flag" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns True if the Attribute has the flag &#8216;flag&#8217;</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>flag</strong> (<em>Flags</em>) &#8211; Flag to be checked</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.attribute.Attribute.help">
+<tt class="descname">help</tt><a class="reference internal" href="../_modules/nepi/execution/attribute.html#Attribute.help"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.attribute.Attribute.help" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the description of the Attribute</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.attribute.Attribute.is_valid_value">
+<tt class="descname">is_valid_value</tt><big>(</big><em>value</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/attribute.html#Attribute.is_valid_value"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.attribute.Attribute.is_valid_value" title="Permalink to this definition">¶</a></dt>
+<dd><p>Attribute subclasses will override this method to add 
+adequate validation</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.attribute.Attribute.name">
+<tt class="descname">name</tt><a class="reference internal" href="../_modules/nepi/execution/attribute.html#Attribute.name"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.attribute.Attribute.name" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the name of the Attribute</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.attribute.Attribute.range">
+<tt class="descname">range</tt><a class="reference internal" href="../_modules/nepi/execution/attribute.html#Attribute.range"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.attribute.Attribute.range" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the range of allowed numerical values for the Attribute</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.attribute.Attribute.set_value">
+<tt class="descname">set_value</tt><big>(</big><em>value</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/attribute.html#Attribute.set_value"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.attribute.Attribute.set_value" title="Permalink to this definition">¶</a></dt>
+<dd><p>Configure a new value for the Attribute</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.attribute.Attribute.type">
+<tt class="descname">type</tt><a class="reference internal" href="../_modules/nepi/execution/attribute.html#Attribute.type"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.attribute.Attribute.type" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the type of the Attribute</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.attribute.Attribute.value">
+<tt class="descname">value</tt><a class="headerlink" href="#nepi.execution.attribute.Attribute.value" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the value of the Attribute</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="class">
+<dt id="nepi.execution.attribute.Flags">
+<em class="property">class </em><tt class="descclassname">nepi.execution.attribute.</tt><tt class="descname">Flags</tt><a class="reference internal" href="../_modules/nepi/execution/attribute.html#Flags"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.attribute.Flags" title="Permalink to this definition">¶</a></dt>
+<dd><p>Flags to characterize the scope of an Attribute</p>
+<dl class="attribute">
+<dt id="nepi.execution.attribute.Flags.Construct">
+<tt class="descname">Construct</tt><em class="property"> = 8</em><a class="headerlink" href="#nepi.execution.attribute.Flags.Construct" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.attribute.Flags.Credential">
+<tt class="descname">Credential</tt><em class="property"> = 20</em><a class="headerlink" href="#nepi.execution.attribute.Flags.Credential" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.attribute.Flags.Design">
+<tt class="descname">Design</tt><em class="property"> = 4</em><a class="headerlink" href="#nepi.execution.attribute.Flags.Design" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.attribute.Flags.Filter">
+<tt class="descname">Filter</tt><em class="property"> = 36</em><a class="headerlink" href="#nepi.execution.attribute.Flags.Filter" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.attribute.Flags.Global">
+<tt class="descname">Global</tt><em class="property"> = 128</em><a class="headerlink" href="#nepi.execution.attribute.Flags.Global" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.attribute.Flags.NoRead">
+<tt class="descname">NoRead</tt><em class="property"> = 1</em><a class="headerlink" href="#nepi.execution.attribute.Flags.NoRead" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.attribute.Flags.NoWrite">
+<tt class="descname">NoWrite</tt><em class="property"> = 2</em><a class="headerlink" href="#nepi.execution.attribute.Flags.NoWrite" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.attribute.Flags.Reserved">
+<tt class="descname">Reserved</tt><em class="property"> = 64</em><a class="headerlink" href="#nepi.execution.attribute.Flags.Reserved" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+<dl class="class">
+<dt id="nepi.execution.attribute.Types">
+<em class="property">class </em><tt class="descclassname">nepi.execution.attribute.</tt><tt class="descname">Types</tt><a class="reference internal" href="../_modules/nepi/execution/attribute.html#Types"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.attribute.Types" title="Permalink to this definition">¶</a></dt>
+<dd><p>Allowed types for the Attribute value</p>
+<dl class="attribute">
+<dt id="nepi.execution.attribute.Types.Bool">
+<tt class="descname">Bool</tt><em class="property"> = 'BOOL'</em><a class="headerlink" href="#nepi.execution.attribute.Types.Bool" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.attribute.Types.Double">
+<tt class="descname">Double</tt><em class="property"> = 'DOUBLE'</em><a class="headerlink" href="#nepi.execution.attribute.Types.Double" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.attribute.Types.Enumerate">
+<tt class="descname">Enumerate</tt><em class="property"> = 'ENUM'</em><a class="headerlink" href="#nepi.execution.attribute.Types.Enumerate" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.attribute.Types.Integer">
+<tt class="descname">Integer</tt><em class="property"> = 'INTEGER'</em><a class="headerlink" href="#nepi.execution.attribute.Types.Integer" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.attribute.Types.String">
+<tt class="descname">String</tt><em class="property"> = 'STRING'</em><a class="headerlink" href="#nepi.execution.attribute.Types.String" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.execution.ec">
+<span id="nepi-execution-ec-module"></span><h2>nepi.execution.ec module<a class="headerlink" href="#module-nepi.execution.ec" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.execution.ec.ECState">
+<em class="property">class </em><tt class="descclassname">nepi.execution.ec.</tt><tt class="descname">ECState</tt><a class="reference internal" href="../_modules/nepi/execution/ec.html#ECState"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ECState" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference external" href="http://docs.python.org/library/functions.html#object" title="(in Python v2.7)"><tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></a></p>
+<p>Possible states of the ExperimentController</p>
+<dl class="attribute">
+<dt id="nepi.execution.ec.ECState.FAILED">
+<tt class="descname">FAILED</tt><em class="property"> = 2</em><a class="headerlink" href="#nepi.execution.ec.ECState.FAILED" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.ec.ECState.RELEASED">
+<tt class="descname">RELEASED</tt><em class="property"> = 3</em><a class="headerlink" href="#nepi.execution.ec.ECState.RELEASED" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.ec.ECState.RUNNING">
+<tt class="descname">RUNNING</tt><em class="property"> = 1</em><a class="headerlink" href="#nepi.execution.ec.ECState.RUNNING" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.ec.ECState.TERMINATED">
+<tt class="descname">TERMINATED</tt><em class="property"> = 4</em><a class="headerlink" href="#nepi.execution.ec.ECState.TERMINATED" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+<dl class="class">
+<dt id="nepi.execution.ec.ExperimentController">
+<em class="property">class </em><tt class="descclassname">nepi.execution.ec.</tt><tt class="descname">ExperimentController</tt><big>(</big><em>exp_id=None</em>, <em>local_dir=None</em>, <em>persist=False</em>, <em>fm=None</em>, <em>add_node_callback=None</em>, <em>add_edge_callback=None</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference external" href="http://docs.python.org/library/functions.html#object" title="(in Python v2.7)"><tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></a></p>
+<p>An experiment, or scenario, is defined by a concrete set of resources,
+and the behavior, configuration and interconnection of those resources. 
+The Experiment Description (ED) is a detailed representation of a
+single experiment. It contains all the necessary information to 
+allow repeating the experiment. NEPI allows to describe
+experiments by registering components (resources), configuring them
+and interconnecting them.</p>
+<p>A same experiment (scenario) can be executed many times, generating 
+different results. We call an experiment execution (instance) a &#8216;run&#8217;.</p>
+<p>The ExperimentController (EC), is the entity responsible of
+managing an experiment run. The same scenario can be 
+recreated (and re-run) by instantiating an EC and recreating 
+the same experiment description.</p>
+<p>An experiment is represented as a graph of interconnected
+resources. A resource is a generic concept in the sense that any
+component taking part of an experiment, whether physical of
+virtual, is considered a resource. A resources could be a host, 
+a virtual machine, an application, a simulator, a IP address.</p>
+<p>A ResourceManager (RM), is the entity responsible for managing a 
+single resource. ResourceManagers are specific to a resource
+type (i.e. An RM to control a Linux application will not be
+the same as the RM used to control a ns-3 simulation).
+To support a new type of resource, a new RM must be implemented. 
+NEPI already provides a variety of RMs to control basic resources, 
+and new can be extended from the existing ones.</p>
+<p>Through the EC interface the user can create ResourceManagers (RMs),
+configure them and interconnect them, to describe an experiment.
+Describing an experiment through the EC does not run the experiment.
+Only when the &#8216;deploy()&#8217; method is invoked on the EC, the EC will take 
+actions to transform the &#8216;described&#8217; experiment into a &#8216;running&#8217; experiment.</p>
+<p>While the experiment is running, it is possible to continue to
+create/configure/connect RMs, and to deploy them to involve new
+resources in the experiment (this is known as &#8216;interactive&#8217; deployment).</p>
+<p>An experiments in NEPI is identified by a string id, 
+which is either given by the user, or automatically generated by NEPI.  
+The purpose of this identifier is to separate files and results that 
+belong to different experiment scenarios. 
+However, since a same &#8216;experiment&#8217; can be run many times, the experiment
+id is not enough to identify an experiment instance (run).
+For this reason, the ExperimentController has two identifier, the 
+exp_id, which can be re-used in different ExperimentController,
+and the run_id, which is unique to one ExperimentController instance, and
+is automatically generated by NEPI.</p>
+<dl class="attribute">
+<dt id="nepi.execution.ec.ExperimentController.abort">
+<tt class="descname">abort</tt><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.abort"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.abort" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns True if the experiment has failed and should be interrupted,
+False otherwise.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.deploy">
+<tt class="descname">deploy</tt><big>(</big><em>guids=None</em>, <em>wait_all_ready=True</em>, <em>group=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.deploy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.deploy" title="Permalink to this definition">¶</a></dt>
+<dd><p>Deploys all ResourceManagers in the guids list.</p>
+<p>If the argument &#8216;guids&#8217; is not given, all RMs with state NEW
+are deployed.</p>
+<blockquote>
+<div><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">param guids:</th><td class="field-body">List of guids of RMs to deploy</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type guids:</th><td class="field-body">list</td>
+</tr>
+<tr class="field-odd field"><th class="field-name" colspan="2">param wait_all_ready:</th></tr>
+<tr class="field-odd field"><td>&nbsp;</td><td class="field-body">Wait until all RMs are ready in
+order to start the RMs</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type guid:</th><td class="field-body">int</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">param group:</th><td class="field-body">Id of deployment group in which to deploy RMs</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type group:</th><td class="field-body">int</td>
+</tr>
+</tbody>
+</table>
+</div></blockquote>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.discover">
+<tt class="descname">discover</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.discover"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.discover" title="Permalink to this definition">¶</a></dt>
+<dd><p>Discovers an available resource matching the criteria defined
+by the RM with guid &#8216;guid&#8217;, and associates that resource to the RM</p>
+<p>Not all RM types require (or are capable of) performing resource 
+discovery. For the RM types which are not capable of doing so, 
+invoking this method does not have any consequences.</p>
+<blockquote>
+<div><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">param guid:</th><td class="field-body">Guid of the RM</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type guid:</th><td class="field-body">int</td>
+</tr>
+</tbody>
+</table>
+</div></blockquote>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.ec.ExperimentController.ecstate">
+<tt class="descname">ecstate</tt><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.ecstate"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.ecstate" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the state of the Experiment Controller</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.enable_trace">
+<tt class="descname">enable_trace</tt><big>(</big><em>guid</em>, <em>name</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.enable_trace"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.enable_trace" title="Permalink to this definition">¶</a></dt>
+<dd><p>Enables a trace to be collected during the experiment run</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>name</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Name of the trace</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.ec.ExperimentController.exp_dir">
+<tt class="descname">exp_dir</tt><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.exp_dir"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.exp_dir" title="Permalink to this definition">¶</a></dt>
+<dd><p>Local directory to store results and other files related to the 
+experiment.</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.ec.ExperimentController.exp_id">
+<tt class="descname">exp_id</tt><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.exp_id"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.exp_id" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the experiment id assigned by the user</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.ec.ExperimentController.failure_level">
+<tt class="descname">failure_level</tt><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.failure_level"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.failure_level" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the level of FAILURE of th experiment</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.filter_resources">
+<tt class="descname">filter_resources</tt><big>(</big><em>rtype</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.filter_resources"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.filter_resources" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the guids of all ResourceManagers of type rtype</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>rtype</strong> (<a class="reference external" href="http://docs.python.org/library/string.html#module-string" title="(in Python v2.7)"><em>string</em></a>) &#8211; Resource type</td>
+</tr>
+<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body">list of guids</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.ec.ExperimentController.fm">
+<tt class="descname">fm</tt><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.fm"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.fm" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the failure manager</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.get">
+<tt class="descname">get</tt><big>(</big><em>guid</em>, <em>name</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.get"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.get" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the value of the attribute with name &#8216;name&#8217; on the
+RM with guid &#8216;guid&#8217;</p>
+<blockquote>
+<div><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">param guid:</th><td class="field-body">Guid of the RM</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type guid:</th><td class="field-body">int</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">param name:</th><td class="field-body">Name of the attribute</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type name:</th><td class="field-body">str</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">return:</th><td class="field-body">The value of the attribute with name &#8216;name&#8217;</td>
+</tr>
+</tbody>
+</table>
+</div></blockquote>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.get_attribute">
+<tt class="descname">get_attribute</tt><big>(</big><em>guid</em>, <em>name</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.get_attribute"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.get_attribute" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the attribute &#8216;name&#8217; of the RM with guid &#8216;guid&#8217;</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
+<li><strong>guid</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; Guid of the RM</li>
+<li><strong>name</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Name of the attribute</li>
+</ul>
+</td>
+</tr>
+<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">The attribute with name &#8216;name&#8217;</p>
+</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last">Attribute</p>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.get_attributes">
+<tt class="descname">get_attributes</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.get_attributes"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.get_attributes" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns all the attributes of the RM with guid &#8216;guid&#8217;</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>guid</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; Guid of the RM</td>
+</tr>
+<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">List of attributes</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">list</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.get_discover_time">
+<tt class="descname">get_discover_time</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.get_discover_time"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.get_discover_time" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the discover time of the RM as a timestamp</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.get_failed_time">
+<tt class="descname">get_failed_time</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.get_failed_time"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.get_failed_time" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the time failure occured for the RM as a timestamp</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.get_global">
+<tt class="descname">get_global</tt><big>(</big><em>rtype</em>, <em>name</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.get_global"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.get_global" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the value of the global attribute with name &#8216;name&#8217; on the
+RMs of rtype &#8216;rtype&#8217;.</p>
+<blockquote>
+<div><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">param guid:</th><td class="field-body">Guid of the RM</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type guid:</th><td class="field-body">int</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">param name:</th><td class="field-body">Name of the attribute</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type name:</th><td class="field-body">str</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">return:</th><td class="field-body">The value of the attribute with name &#8216;name&#8217;</td>
+</tr>
+</tbody>
+</table>
+</div></blockquote>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.get_provision_time">
+<tt class="descname">get_provision_time</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.get_provision_time"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.get_provision_time" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the provision time of the RM as a timestamp</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.get_ready_time">
+<tt class="descname">get_ready_time</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.get_ready_time"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.get_ready_time" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the deployment time of the RM as a timestamp</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.get_release_time">
+<tt class="descname">get_release_time</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.get_release_time"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.get_release_time" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the release time of the RM as a timestamp</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.get_resource">
+<tt class="descname">get_resource</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.get_resource"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.get_resource" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns a registered ResourceManager by its guid</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>guid</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; Id of the resource</td>
+</tr>
+<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body">ResourceManager</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.get_resources_by_type">
+<tt class="descname">get_resources_by_type</tt><big>(</big><em>rtype</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.get_resources_by_type"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.get_resources_by_type" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the ResourceManager objects of type rtype</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>rtype</strong> (<a class="reference external" href="http://docs.python.org/library/string.html#module-string" title="(in Python v2.7)"><em>string</em></a>) &#8211; Resource type</td>
+</tr>
+<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body">list of ResourceManagers</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.get_start_time">
+<tt class="descname">get_start_time</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.get_start_time"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.get_start_time" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the start time of the RM as a timestamp</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.get_stop_time">
+<tt class="descname">get_stop_time</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.get_stop_time"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.get_stop_time" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the stop time of the RM as a timestamp</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.get_task">
+<tt class="descname">get_task</tt><big>(</big><em>tid</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.get_task"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.get_task" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns a task by its id</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>tid</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; Id of the task</td>
+</tr>
+<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body">Task</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.get_traces">
+<tt class="descname">get_traces</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.get_traces"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.get_traces" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the list of the trace names of the RM with guid &#8216;guid&#8217;</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>guid</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; Guid of the RM</td>
+</tr>
+<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">List of trace names</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">list</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.inform_failure">
+<tt class="descname">inform_failure</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.inform_failure"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.inform_failure" title="Permalink to this definition">¶</a></dt>
+<dd><p>Reports a failure in a RM to the EC for evaluation</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>guid</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; Resource id</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="classmethod">
+<dt id="nepi.execution.ec.ExperimentController.load">
+<em class="property">classmethod </em><tt class="descname">load</tt><big>(</big><em>filepath</em>, <em>format='xml'</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.load"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.load" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.ec.ExperimentController.local_dir">
+<tt class="descname">local_dir</tt><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.local_dir"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.local_dir" title="Permalink to this definition">¶</a></dt>
+<dd><p>Root local directory for experiment files</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.ec.ExperimentController.logger">
+<tt class="descname">logger</tt><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.logger"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.logger" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the logger instance of the Experiment Controller</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.ec.ExperimentController.netgraph">
+<tt class="descname">netgraph</tt><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.netgraph"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.netgraph" title="Permalink to this definition">¶</a></dt>
+<dd><p>Return NetGraph instance if experiment description was automatically 
+generated</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.ec.ExperimentController.nthreads">
+<tt class="descname">nthreads</tt><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.nthreads"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.nthreads" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the number of processing nthreads used</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.ec.ExperimentController.persist">
+<tt class="descname">persist</tt><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.persist"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.persist" title="Permalink to this definition">¶</a></dt>
+<dd><p>If True, persists the ExperimentController to XML format upon 
+experiment completion</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.plot">
+<tt class="descname">plot</tt><big>(</big><em>dirpath=None</em>, <em>format='figure'</em>, <em>show=False</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.plot"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.plot" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.provision">
+<tt class="descname">provision</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.provision"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.provision" title="Permalink to this definition">¶</a></dt>
+<dd><p>Provisions the resource associated to the RM with guid &#8216;guid&#8217;.</p>
+<p>Provisioning means making a resource &#8216;accessible&#8217; to the user. 
+Not all RM types require (or are capable of) performing resource 
+provisioning. For the RM types which are not capable of doing so, 
+invoking this method does not have any consequences.</p>
+<blockquote>
+<div><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">param guid:</th><td class="field-body">Guid of the RM</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type guid:</th><td class="field-body">int</td>
+</tr>
+</tbody>
+</table>
+</div></blockquote>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.register_condition">
+<tt class="descname">register_condition</tt><big>(</big><em>guids1</em>, <em>action</em>, <em>guids2</em>, <em>state</em>, <em>time=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.register_condition"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.register_condition" title="Permalink to this definition">¶</a></dt>
+<dd><p>Registers an action START, STOP or DEPLOY for all RM on list
+guids1 to occur at time &#8216;time&#8217; after all elements in list guids2 
+have reached state &#8216;state&#8217;.</p>
+<blockquote>
+<div><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">param guids1:</th><td class="field-body">List of guids of RMs subjected to action</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type guids1:</th><td class="field-body">list</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">param action:</th><td class="field-body">Action to perform (either START, STOP or DEPLOY)</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type action:</th><td class="field-body">ResourceAction</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">param guids2:</th><td class="field-body">List of guids of RMs to we waited for</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type guids2:</th><td class="field-body">list</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">param state:</th><td class="field-body">State to wait for on RMs of list guids2 (STARTED,
+STOPPED, etc)</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type state:</th><td class="field-body">ResourceState</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">param time:</th><td class="field-body">Time to wait after guids2 has reached status</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type time:</th><td class="field-body">string</td>
+</tr>
+</tbody>
+</table>
+</div></blockquote>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.register_connection">
+<tt class="descname">register_connection</tt><big>(</big><em>guid1</em>, <em>guid2</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.register_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.register_connection" title="Permalink to this definition">¶</a></dt>
+<dd><p>Registers a connection between a RM with guid &#8216;guid1&#8217;
+and another RM with guid &#8216;guid2&#8217;.</p>
+<p>The order of the in which the two guids are provided is not
+important, since the connection relationship is symmetric.</p>
+<blockquote>
+<div><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">param guid1:</th><td class="field-body">First guid to connect</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type guid1:</th><td class="field-body">ResourceManager</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">param guid2:</th><td class="field-body">Second guid to connect</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type guid:</th><td class="field-body">ResourceManager</td>
+</tr>
+</tbody>
+</table>
+</div></blockquote>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.register_resource">
+<tt class="descname">register_resource</tt><big>(</big><em>rtype</em>, <em>guid=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.register_resource"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.register_resource" title="Permalink to this definition">¶</a></dt>
+<dd><p>Registers a new ResourceManager of type &#8216;rtype&#8217; in the experiment</p>
+<p>This method will assign a new &#8216;guid&#8217; for the RM, if no guid
+is specified.</p>
+<blockquote>
+<div><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">param rtype:</th><td class="field-body">Type of the RM</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type rtype:</th><td class="field-body">str</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">return:</th><td class="field-body">Guid of the RM</td>
+</tr>
+<tr class="field-even field"><th class="field-name">rtype:</th><td class="field-body">int</td>
+</tr>
+</tbody>
+</table>
+</div></blockquote>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.release">
+<tt class="descname">release</tt><big>(</big><em>guids=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.release"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.release" title="Permalink to this definition">¶</a></dt>
+<dd><p>Releases all ResourceManagers in the guids list.</p>
+<p>If the argument &#8216;guids&#8217; is not given, all RMs registered
+in the experiment are released.</p>
+<blockquote>
+<div><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">param guids:</th><td class="field-body">List of RM guids</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type guids:</th><td class="field-body">list</td>
+</tr>
+</tbody>
+</table>
+</div></blockquote>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.remove_resource">
+<tt class="descname">remove_resource</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.remove_resource"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.remove_resource" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.ec.ExperimentController.resources">
+<tt class="descname">resources</tt><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.resources"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.resources" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the guids of all ResourceManagers</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">Set of all RM guids</td>
+</tr>
+<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body">list</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.ec.ExperimentController.run_dir">
+<tt class="descname">run_dir</tt><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.run_dir"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.run_dir" title="Permalink to this definition">¶</a></dt>
+<dd><p>Local directory to store results and other files related to the 
+experiment run.</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.ec.ExperimentController.run_id">
+<tt class="descname">run_id</tt><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.run_id"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.run_id" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the experiment instance (run) identifier (automatically 
+generated)</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.save">
+<tt class="descname">save</tt><big>(</big><em>dirpath=None</em>, <em>format='xml'</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.save"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.save" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.schedule">
+<tt class="descname">schedule</tt><big>(</big><em>date</em>, <em>callback</em>, <em>track=False</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.schedule"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.schedule" title="Permalink to this definition">¶</a></dt>
+<dd><p>Schedules a callback to be executed at time &#8216;date&#8217;.</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>date</strong> &#8211; string containing execution time for the task.
+It can be expressed as an absolute time, using
+timestamp format, or as a relative time matching
+^d+.d+(h|m|s|ms|us)$</li>
+<li><strong>callback</strong> &#8211; code to be executed for the task. Must be a
+Python function, and receives args and kwargs
+as arguments.</li>
+<li><strong>track</strong> &#8211; if set to True, the task will be retrievable with
+the get_task() method</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+<p>:return : The Id of the task
+:rtype: int</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.serialize">
+<tt class="descname">serialize</tt><big>(</big><em>format='xml'</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.serialize"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.serialize" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.set">
+<tt class="descname">set</tt><big>(</big><em>guid</em>, <em>name</em>, <em>value</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.set"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.set" title="Permalink to this definition">¶</a></dt>
+<dd><p>Modifies the value of the attribute with name &#8216;name&#8217; on the 
+RM with guid &#8216;guid&#8217;.</p>
+<blockquote>
+<div><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">param guid:</th><td class="field-body">Guid of the RM</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type guid:</th><td class="field-body">int</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">param name:</th><td class="field-body">Name of the attribute</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type name:</th><td class="field-body">str</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">param value:</th><td class="field-body">Value of the attribute</td>
+</tr>
+</tbody>
+</table>
+</div></blockquote>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.set_global">
+<tt class="descname">set_global</tt><big>(</big><em>rtype</em>, <em>name</em>, <em>value</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.set_global"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.set_global" title="Permalink to this definition">¶</a></dt>
+<dd><p>Modifies the value of the global attribute with name &#8216;name&#8217; on the 
+RMs of with rtype &#8216;rtype&#8217;.</p>
+<blockquote>
+<div><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">param guid:</th><td class="field-body">Guid of the RM</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type guid:</th><td class="field-body">int</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">param name:</th><td class="field-body">Name of the attribute</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type name:</th><td class="field-body">str</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">param value:</th><td class="field-body">Value of the attribute</td>
+</tr>
+</tbody>
+</table>
+</div></blockquote>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.set_with_conditions">
+<tt class="descname">set_with_conditions</tt><big>(</big><em>name</em>, <em>value</em>, <em>guids1</em>, <em>guids2</em>, <em>state</em>, <em>time=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.set_with_conditions"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.set_with_conditions" title="Permalink to this definition">¶</a></dt>
+<dd><p>Modifies the value of attribute with name &#8216;name&#8217; on all RMs 
+on the guids1 list when time &#8216;time&#8217; has elapsed since all 
+elements in guids2 list have reached state &#8216;state&#8217;.</p>
+<blockquote>
+<div><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">param name:</th><td class="field-body">Name of attribute to set in RM</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type name:</th><td class="field-body">string</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">param value:</th><td class="field-body">Value of attribute to set in RM</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type name:</th><td class="field-body">string</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">param guids1:</th><td class="field-body">List of guids of RMs subjected to action</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type guids1:</th><td class="field-body">list</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">param action:</th><td class="field-body">Action to register (either START or STOP)</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type action:</th><td class="field-body">ResourceAction</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">param guids2:</th><td class="field-body">List of guids of RMs to we waited for</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type guids2:</th><td class="field-body">list</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">param state:</th><td class="field-body">State to wait for on RMs (STARTED, STOPPED, etc)</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type state:</th><td class="field-body">ResourceState</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">param time:</th><td class="field-body">Time to wait after guids2 has reached status</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type time:</th><td class="field-body">string</td>
+</tr>
+</tbody>
+</table>
+</div></blockquote>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.shutdown">
+<tt class="descname">shutdown</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.shutdown"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.shutdown" title="Permalink to this definition">¶</a></dt>
+<dd><p>Releases all resources and stops the ExperimentController</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.start">
+<tt class="descname">start</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.start" title="Permalink to this definition">¶</a></dt>
+<dd><p>Starts the RM with guid &#8216;guid&#8217;</p>
+<p>Starting a RM means that the resource it controls will
+begin taking part of the experiment.</p>
+<blockquote>
+<div><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">param guid:</th><td class="field-body">Guid of the RM</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type guid:</th><td class="field-body">int</td>
+</tr>
+</tbody>
+</table>
+</div></blockquote>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.state">
+<tt class="descname">state</tt><big>(</big><em>guid</em>, <em>hr=False</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.state"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.state" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the state of a resource</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>guid</strong> (<em>integer</em>) &#8211; Resource guid</li>
+<li><strong>hr</strong> (<em>boolean</em>) &#8211; Human readable. Forces return of a 
+status string instead of a number</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.stop">
+<tt class="descname">stop</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.stop"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.stop" title="Permalink to this definition">¶</a></dt>
+<dd><p>Stops the RM with guid &#8216;guid&#8217;</p>
+<p>Stopping a RM means that the resource it controls will
+no longer take part of the experiment.</p>
+<blockquote>
+<div><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">param guid:</th><td class="field-body">Guid of the RM</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type guid:</th><td class="field-body">int</td>
+</tr>
+</tbody>
+</table>
+</div></blockquote>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.trace">
+<tt class="descname">trace</tt><big>(</big><em>guid</em>, <em>name</em>, <em>attr='all'</em>, <em>block=512</em>, <em>offset=0</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.trace"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.trace" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns information on a collected trace, the trace stream or 
+blocks (chunks) of the trace stream</p>
+<blockquote>
+<div><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">param name:</th><td class="field-body"><p class="first">Name of the trace</p>
+</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type name:</th><td class="field-body"><p class="first">str</p>
+</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">param attr:</th><td class="field-body"><p class="first">Can be one of:
+- TraceAttr.ALL (complete trace content), 
+- TraceAttr.STREAM (block in bytes to read starting</p>
+<blockquote>
+<div><p>at offset),</p>
+</div></blockquote>
+<ul class="simple">
+<li>TraceAttr.PATH (full path to the trace file),</li>
+<li>TraceAttr.SIZE (size of trace file).</li>
+</ul>
+</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type attr:</th><td class="field-body"><p class="first">str</p>
+</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">param block:</th><td class="field-body"><p class="first">Number of bytes to retrieve from trace, when attr is 
+TraceAttr.STREAM</p>
+</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type name:</th><td class="field-body"><p class="first">int</p>
+</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">param offset:</th><td class="field-body"><p class="first">Number of &#8216;blocks&#8217; to skip, when attr is TraceAttr.STREAM</p>
+</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type name:</th><td class="field-body"><p class="first">int</p>
+</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">rtype:</th><td class="field-body"><p class="first last">str</p>
+</td>
+</tr>
+</tbody>
+</table>
+</div></blockquote>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.trace_enabled">
+<tt class="descname">trace_enabled</tt><big>(</big><em>guid</em>, <em>name</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.trace_enabled"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.trace_enabled" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns True if the trace of name &#8216;name&#8217; is enabled</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>name</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Name of the trace</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.wait">
+<tt class="descname">wait</tt><big>(</big><em>guids</em>, <em>state</em>, <em>quit</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.wait"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.wait" title="Permalink to this definition">¶</a></dt>
+<dd><p>Blocking method that waits until all RMs in the &#8216;guids&#8217; list 
+have reached a state &gt;= &#8216;state&#8217;, or until the &#8216;quit&#8217; callback
+yields True</p>
+<blockquote>
+<div><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">param guids:</th><td class="field-body">List of guids</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type guids:</th><td class="field-body">list</td>
+</tr>
+</tbody>
+</table>
+</div></blockquote>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.wait_deployed">
+<tt class="descname">wait_deployed</tt><big>(</big><em>guids</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.wait_deployed"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.wait_deployed" title="Permalink to this definition">¶</a></dt>
+<dd><p>Blocking method that waits until all RMs in the &#8216;guids&#8217; list 
+have reached a state &gt;= READY, or until a failure in the 
+experiment occurs (i.e. abort == True)</p>
+<blockquote>
+<div><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">param guids:</th><td class="field-body">List of guids</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type guids:</th><td class="field-body">list</td>
+</tr>
+</tbody>
+</table>
+</div></blockquote>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.wait_finished">
+<tt class="descname">wait_finished</tt><big>(</big><em>guids</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.wait_finished"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.wait_finished" title="Permalink to this definition">¶</a></dt>
+<dd><p>Blocking method that waits until all RMs in the &#8216;guids&#8217; list 
+have reached a state &gt;= STOPPED (i.e. STOPPED, FAILED or 
+RELEASED ), or until a failure in the experiment occurs 
+(i.e. abort == True)</p>
+<blockquote>
+<div><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">param guids:</th><td class="field-body">List of guids</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type guids:</th><td class="field-body">list</td>
+</tr>
+</tbody>
+</table>
+</div></blockquote>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.wait_released">
+<tt class="descname">wait_released</tt><big>(</big><em>guids</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.wait_released"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.wait_released" title="Permalink to this definition">¶</a></dt>
+<dd><p>Blocking method that waits until all RMs in the &#8216;guids&#8217; list 
+have reached a state == RELEASED, or until the EC fails</p>
+<blockquote>
+<div><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">param guids:</th><td class="field-body">List of guids</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type guids:</th><td class="field-body">list</td>
+</tr>
+</tbody>
+</table>
+</div></blockquote>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.ExperimentController.wait_started">
+<tt class="descname">wait_started</tt><big>(</big><em>guids</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#ExperimentController.wait_started"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.ExperimentController.wait_started" title="Permalink to this definition">¶</a></dt>
+<dd><p>Blocking method that waits until all RMs in the &#8216;guids&#8217; list 
+have reached a state &gt;= STARTED, or until a failure in the 
+experiment occurs (i.e. abort == True)</p>
+<blockquote>
+<div><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">param guids:</th><td class="field-body">List of guids</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type guids:</th><td class="field-body">list</td>
+</tr>
+</tbody>
+</table>
+</div></blockquote>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="class">
+<dt id="nepi.execution.ec.FailureLevel">
+<em class="property">class </em><tt class="descclassname">nepi.execution.ec.</tt><tt class="descname">FailureLevel</tt><a class="reference internal" href="../_modules/nepi/execution/ec.html#FailureLevel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.FailureLevel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference external" href="http://docs.python.org/library/functions.html#object" title="(in Python v2.7)"><tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></a></p>
+<p>Possible failure states for the experiment</p>
+<dl class="attribute">
+<dt id="nepi.execution.ec.FailureLevel.EC_FAILURE">
+<tt class="descname">EC_FAILURE</tt><em class="property"> = 3</em><a class="headerlink" href="#nepi.execution.ec.FailureLevel.EC_FAILURE" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.ec.FailureLevel.OK">
+<tt class="descname">OK</tt><em class="property"> = 1</em><a class="headerlink" href="#nepi.execution.ec.FailureLevel.OK" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.ec.FailureLevel.RM_FAILURE">
+<tt class="descname">RM_FAILURE</tt><em class="property"> = 2</em><a class="headerlink" href="#nepi.execution.ec.FailureLevel.RM_FAILURE" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+<dl class="class">
+<dt id="nepi.execution.ec.FailureManager">
+<em class="property">class </em><tt class="descclassname">nepi.execution.ec.</tt><tt class="descname">FailureManager</tt><a class="reference internal" href="../_modules/nepi/execution/ec.html#FailureManager"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.FailureManager" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference external" href="http://docs.python.org/library/functions.html#object" title="(in Python v2.7)"><tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></a></p>
+<p>The FailureManager is responsible for handling errors
+and deciding whether an experiment should be aborted or not</p>
+<dl class="attribute">
+<dt id="nepi.execution.ec.FailureManager.abort">
+<tt class="descname">abort</tt><a class="reference internal" href="../_modules/nepi/execution/ec.html#FailureManager.abort"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.FailureManager.abort" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.ec.FailureManager.ec">
+<tt class="descname">ec</tt><a class="reference internal" href="../_modules/nepi/execution/ec.html#FailureManager.ec"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.FailureManager.ec" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the ExperimentController associated to this FailureManager</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.FailureManager.eval_failure">
+<tt class="descname">eval_failure</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#FailureManager.eval_failure"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.FailureManager.eval_failure" title="Permalink to this definition">¶</a></dt>
+<dd><p>Implements failure policy and sets the abort state of the
+experiment based on the failure state and criticality of
+the RM</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>guid</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; Guid of the RM upon which the failure of the experiment
+is evaluated</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.FailureManager.set_ec">
+<tt class="descname">set_ec</tt><big>(</big><em>ec</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#FailureManager.set_ec"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.FailureManager.set_ec" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.ec.FailureManager.set_ec_failure">
+<tt class="descname">set_ec_failure</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/execution/ec.html#FailureManager.set_ec_failure"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.ec.FailureManager.set_ec_failure" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.execution.resource">
+<span id="nepi-execution-resource-module"></span><h2>nepi.execution.resource module<a class="headerlink" href="#module-nepi.execution.resource" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.execution.resource.ResourceAction">
+<em class="property">class </em><tt class="descclassname">nepi.execution.resource.</tt><tt class="descname">ResourceAction</tt><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceAction"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceAction" title="Permalink to this definition">¶</a></dt>
+<dd><p>Action that a user can order to a Resource Manager</p>
+<dl class="attribute">
+<dt id="nepi.execution.resource.ResourceAction.DEPLOY">
+<tt class="descname">DEPLOY</tt><em class="property"> = 0</em><a class="headerlink" href="#nepi.execution.resource.ResourceAction.DEPLOY" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.resource.ResourceAction.START">
+<tt class="descname">START</tt><em class="property"> = 1</em><a class="headerlink" href="#nepi.execution.resource.ResourceAction.START" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.resource.ResourceAction.STOP">
+<tt class="descname">STOP</tt><em class="property"> = 2</em><a class="headerlink" href="#nepi.execution.resource.ResourceAction.STOP" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+<dl class="class">
+<dt id="nepi.execution.resource.ResourceFactory">
+<em class="property">class </em><tt class="descclassname">nepi.execution.resource.</tt><tt class="descname">ResourceFactory</tt><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceFactory"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceFactory" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference external" href="http://docs.python.org/library/functions.html#object" title="(in Python v2.7)"><tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></a></p>
+<dl class="classmethod">
+<dt id="nepi.execution.resource.ResourceFactory.create">
+<em class="property">classmethod </em><tt class="descname">create</tt><big>(</big><em>rtype</em>, <em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceFactory.create"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceFactory.create" title="Permalink to this definition">¶</a></dt>
+<dd><p>Create a new instance of a Ressource Manager</p>
+</dd></dl>
+
+<dl class="classmethod">
+<dt id="nepi.execution.resource.ResourceFactory.get_resource_type">
+<em class="property">classmethod </em><tt class="descname">get_resource_type</tt><big>(</big><em>rtype</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceFactory.get_resource_type"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceFactory.get_resource_type" title="Permalink to this definition">¶</a></dt>
+<dd><p>Return the type of the Class</p>
+</dd></dl>
+
+<dl class="classmethod">
+<dt id="nepi.execution.resource.ResourceFactory.register_type">
+<em class="property">classmethod </em><tt class="descname">register_type</tt><big>(</big><em>rclass</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceFactory.register_type"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceFactory.register_type" title="Permalink to this definition">¶</a></dt>
+<dd><p>Register a new Ressource Manager</p>
+</dd></dl>
+
+<dl class="classmethod">
+<dt id="nepi.execution.resource.ResourceFactory.resource_types">
+<em class="property">classmethod </em><tt class="descname">resource_types</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceFactory.resource_types"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceFactory.resource_types" title="Permalink to this definition">¶</a></dt>
+<dd><p>Return the type of the Class</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="class">
+<dt id="nepi.execution.resource.ResourceManager">
+<em class="property">class </em><tt class="descclassname">nepi.execution.resource.</tt><tt class="descname">ResourceManager</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.util.html#nepi.util.logger.Logger" title="nepi.util.logger.Logger"><tt class="xref py py-class docutils literal"><span class="pre">nepi.util.logger.Logger</span></tt></a></p>
+<p>Base clase for all ResourceManagers.</p>
+<p>A ResourceManger is specific to a resource type (e.g. Node, 
+Switch, Application, etc) on a specific platform (e.g. PlanetLab, 
+OMF, etc).</p>
+<p>The ResourceManager instances are responsible for interacting with
+and controlling concrete (physical or virtual) resources in the 
+experimental platforms.</p>
+<dl class="attribute">
+<dt id="nepi.execution.resource.ResourceManager.conditions">
+<tt class="descname">conditions</tt><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.conditions"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.conditions" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the conditions to which the RM is subjected to.</p>
+<p>This method returns a dictionary of conditions lists indexed by
+a ResourceAction.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.configure">
+<tt class="descname">configure</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.configure"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.configure" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.resource.ResourceManager.connections">
+<tt class="descname">connections</tt><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.connections"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.connections" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the set of guids of connected RMs</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.deploy">
+<tt class="descname">deploy</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.deploy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.deploy" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.deploy_with_conditions">
+<tt class="descname">deploy_with_conditions</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.deploy_with_conditions"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.deploy_with_conditions" title="Permalink to this definition">¶</a></dt>
+<dd><p>Deploy RM when all the conditions in self.conditions for
+action &#8216;READY&#8217; are satisfied.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.discover">
+<tt class="descname">discover</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.discover"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.discover" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.resource.ResourceManager.discover_time">
+<tt class="descname">discover_time</tt><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.discover_time"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.discover_time" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the discover time of the RM as a timestamp</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.do_configure">
+<tt class="descname">do_configure</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.do_configure"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.do_configure" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.do_connect">
+<tt class="descname">do_connect</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.do_connect"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.do_connect" title="Permalink to this definition">¶</a></dt>
+<dd><p>Performs actions that need to be taken upon associating RMs.
+This method should be redefined when necessary in child classes.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.do_deploy">
+<tt class="descname">do_deploy</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.do_deploy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.do_deploy" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.do_disconnect">
+<tt class="descname">do_disconnect</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.do_disconnect"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.do_disconnect" title="Permalink to this definition">¶</a></dt>
+<dd><p>Performs actions that need to be taken upon disassociating RMs.
+This method should be redefined when necessary in child classes.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.do_discover">
+<tt class="descname">do_discover</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.do_discover"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.do_discover" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.do_fail">
+<tt class="descname">do_fail</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.do_fail"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.do_fail" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.do_provision">
+<tt class="descname">do_provision</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.do_provision"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.do_provision" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.do_release">
+<tt class="descname">do_release</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.do_release"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.do_release" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.do_reserve">
+<tt class="descname">do_reserve</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.do_reserve"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.do_reserve" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.do_start">
+<tt class="descname">do_start</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.do_start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.do_start" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.do_stop">
+<tt class="descname">do_stop</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.do_stop"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.do_stop" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.resource.ResourceManager.ec">
+<tt class="descname">ec</tt><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.ec"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.ec" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the Experiment Controller of the RM</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.enable_trace">
+<tt class="descname">enable_trace</tt><big>(</big><em>name</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.enable_trace"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.enable_trace" title="Permalink to this definition">¶</a></dt>
+<dd><p>Explicitly enable trace generation</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>name</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Name of the trace</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.fail">
+<tt class="descname">fail</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.fail"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.fail" title="Permalink to this definition">¶</a></dt>
+<dd><p>Sets the RM to state FAILED.</p>
+<p>This method should not be overridden directly. Specific functionality
+should be added in the do_fail method.</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.resource.ResourceManager.failed_time">
+<tt class="descname">failed_time</tt><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.failed_time"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.failed_time" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the time failure occurred for the RM as a timestamp</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.get">
+<tt class="descname">get</tt><big>(</big><em>name</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.get"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.get" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the value of the attribute</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>name</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Name of the attribute</td>
+</tr>
+<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body">str</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="classmethod">
+<dt id="nepi.execution.resource.ResourceManager.get_attribute">
+<em class="property">classmethod </em><tt class="descname">get_attribute</tt><big>(</big><em>name</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.get_attribute"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.get_attribute" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns a copy of the attribute with name &#8216;name&#8217;</p>
+</dd></dl>
+
+<dl class="classmethod">
+<dt id="nepi.execution.resource.ResourceManager.get_attributes">
+<em class="property">classmethod </em><tt class="descname">get_attributes</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.get_attributes"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.get_attributes" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns a copy of the attributes</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.get_connected">
+<tt class="descname">get_connected</tt><big>(</big><em>rtype=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.get_connected"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.get_connected" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the list of RM with the type &#8216;rtype&#8217;</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>rtype</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Type of the RM we look for</td>
+</tr>
+<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">list of guid</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="classmethod">
+<dt id="nepi.execution.resource.ResourceManager.get_global">
+<em class="property">classmethod </em><tt class="descname">get_global</tt><big>(</big><em>name</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.get_global"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.get_global" title="Permalink to this definition">¶</a></dt>
+<dd><dl class="docutils">
+<dt>Returns the value of a global attribute</dt>
+<dd>Global attribute meaning an attribute for 
+all the resources from a rtype</dd>
+</dl>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>name</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Name of the attribute</td>
+</tr>
+<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body">str</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="classmethod">
+<dt id="nepi.execution.resource.ResourceManager.get_help">
+<em class="property">classmethod </em><tt class="descname">get_help</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.get_help"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.get_help" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the description of the type of Resource</p>
+</dd></dl>
+
+<dl class="classmethod">
+<dt id="nepi.execution.resource.ResourceManager.get_platform">
+<em class="property">classmethod </em><tt class="descname">get_platform</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.get_platform"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.get_platform" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the identified of the platform (i.e. testbed type)
+for the Resource</p>
+</dd></dl>
+
+<dl class="classmethod">
+<dt id="nepi.execution.resource.ResourceManager.get_rtype">
+<em class="property">classmethod </em><tt class="descname">get_rtype</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.get_rtype"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.get_rtype" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the type of the Resource Manager</p>
+</dd></dl>
+
+<dl class="classmethod">
+<dt id="nepi.execution.resource.ResourceManager.get_traces">
+<em class="property">classmethod </em><tt class="descname">get_traces</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.get_traces"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.get_traces" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns a copy of the traces</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.resource.ResourceManager.guid">
+<tt class="descname">guid</tt><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.guid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.guid" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the global unique identifier of the RM</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.has_attribute">
+<tt class="descname">has_attribute</tt><big>(</big><em>name</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.has_attribute"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.has_attribute" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns true if the RM has an attribute with name</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>name</strong> (<a class="reference external" href="http://docs.python.org/library/string.html#module-string" title="(in Python v2.7)"><em>string</em></a>) &#8211; name of the attribute</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.has_changed">
+<tt class="descname">has_changed</tt><big>(</big><em>name</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.has_changed"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.has_changed" title="Permalink to this definition">¶</a></dt>
+<dd><dl class="docutils">
+<dt>Returns the True is the value of the attribute</dt>
+<dd>has been modified by the user.</dd>
+</dl>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>name</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Name of the attribute</td>
+</tr>
+<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body">str</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.has_flag">
+<tt class="descname">has_flag</tt><big>(</big><em>name</em>, <em>flag</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.has_flag"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.has_flag" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns true if the attribute has the flag &#8216;flag&#8217;</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>flag</strong> (<em>Flags</em>) &#8211; Flag to be checked</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.is_rm_instance">
+<tt class="descname">is_rm_instance</tt><big>(</big><em>rtype</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.is_rm_instance"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.is_rm_instance" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns True if the RM is instance of &#8216;rtype&#8217;</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>rtype</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Type of the RM we look for</td>
+</tr>
+<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">True|False</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.log_message">
+<tt class="descname">log_message</tt><big>(</big><em>msg</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.log_message"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.log_message" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the log message formatted with added information.</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>msg</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; text message</td>
+</tr>
+<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body">str</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.provision">
+<tt class="descname">provision</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.provision"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.provision" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.resource.ResourceManager.provision_time">
+<tt class="descname">provision_time</tt><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.provision_time"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.provision_time" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the provision time of the RM as a timestamp</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.resource.ResourceManager.ready_time">
+<tt class="descname">ready_time</tt><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.ready_time"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.ready_time" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the deployment time of the RM as a timestamp</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.register_condition">
+<tt class="descname">register_condition</tt><big>(</big><em>action</em>, <em>group</em>, <em>state</em>, <em>time=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.register_condition"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.register_condition" title="Permalink to this definition">¶</a></dt>
+<dd><p>Registers a condition on the resource manager to allow execution 
+of &#8216;action&#8217; only after &#8216;time&#8217; has elapsed from the moment all resources 
+in &#8216;group&#8217; reached state &#8216;state&#8217;</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>action</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Action to restrict to condition (either &#8216;START&#8217; or &#8216;STOP&#8217;)</li>
+<li><strong>group</strong> (<em>int or list of int</em>) &#8211; Group of RMs to wait for (list of guids)</li>
+<li><strong>state</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; State to wait for on all RM in group. (either &#8216;STARTED&#8217;, &#8216;STOPPED&#8217; or &#8216;READY&#8217;)</li>
+<li><strong>time</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Time to wait after &#8216;state&#8217; is reached on all RMs in group. (e.g. &#8216;2s&#8217;)</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.register_connection">
+<tt class="descname">register_connection</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.register_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.register_connection" title="Permalink to this definition">¶</a></dt>
+<dd><p>Registers a connection to the RM identified by guid</p>
+<p>This method should not be overridden. Specific functionality
+should be added in the do_connect method.</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>guid</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; Global unique identified of the RM to connect to</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.release">
+<tt class="descname">release</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.release"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.release" title="Permalink to this definition">¶</a></dt>
+<dd><p>Perform actions to free resources used by the RM.</p>
+<p>This  method is responsible for releasing resources that were
+used during the experiment by the RM.</p>
+<p>This method should not be overridden directly. Specific functionality
+should be added in the do_release method.</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.resource.ResourceManager.release_time">
+<tt class="descname">release_time</tt><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.release_time"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.release_time" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the release time of the RM as a timestamp</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.resource.ResourceManager.reschedule_delay">
+<tt class="descname">reschedule_delay</tt><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.reschedule_delay"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.reschedule_delay" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns default reschedule delay</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.reserve">
+<tt class="descname">reserve</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.reserve"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.reserve" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.resource.ResourceManager.reserved_time">
+<tt class="descname">reserved_time</tt><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.reserved_time"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.reserved_time" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the reserved time of the RM as a timestamp</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.set">
+<tt class="descname">set</tt><big>(</big><em>name</em>, <em>value</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.set"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.set" title="Permalink to this definition">¶</a></dt>
+<dd><p>Set the value of the attribute</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>name</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Name of the attribute</li>
+<li><strong>name</strong> &#8211; Value of the attribute</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.set_discovered">
+<tt class="descname">set_discovered</tt><big>(</big><em>time=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.set_discovered"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.set_discovered" title="Permalink to this definition">¶</a></dt>
+<dd><p>Mark ResourceManager as DISCOVERED</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.set_failed">
+<tt class="descname">set_failed</tt><big>(</big><em>time=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.set_failed"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.set_failed" title="Permalink to this definition">¶</a></dt>
+<dd><p>Mark ResourceManager as FAILED</p>
+</dd></dl>
+
+<dl class="classmethod">
+<dt id="nepi.execution.resource.ResourceManager.set_global">
+<em class="property">classmethod </em><tt class="descname">set_global</tt><big>(</big><em>name</em>, <em>value</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.set_global"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.set_global" title="Permalink to this definition">¶</a></dt>
+<dd><p>Set value for a global attribute</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>name</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Name of the attribute</li>
+<li><strong>name</strong> &#8211; Value of the attribute</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.set_provisioned">
+<tt class="descname">set_provisioned</tt><big>(</big><em>time=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.set_provisioned"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.set_provisioned" title="Permalink to this definition">¶</a></dt>
+<dd><p>Mark ResourceManager as PROVISIONED</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.set_ready">
+<tt class="descname">set_ready</tt><big>(</big><em>time=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.set_ready"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.set_ready" title="Permalink to this definition">¶</a></dt>
+<dd><p>Mark ResourceManager as READY</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.set_released">
+<tt class="descname">set_released</tt><big>(</big><em>time=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.set_released"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.set_released" title="Permalink to this definition">¶</a></dt>
+<dd><p>Mark ResourceManager as REALEASED</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.set_reserved">
+<tt class="descname">set_reserved</tt><big>(</big><em>time=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.set_reserved"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.set_reserved" title="Permalink to this definition">¶</a></dt>
+<dd><p>Mark ResourceManager as RESERVED</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.set_started">
+<tt class="descname">set_started</tt><big>(</big><em>time=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.set_started"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.set_started" title="Permalink to this definition">¶</a></dt>
+<dd><p>Mark ResourceManager as STARTED</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.set_state">
+<tt class="descname">set_state</tt><big>(</big><em>state</em>, <em>state_time_attr</em>, <em>time=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.set_state"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.set_state" title="Permalink to this definition">¶</a></dt>
+<dd><p>Set the state of the RM while keeping a trace of the time</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.set_state_time">
+<tt class="descname">set_state_time</tt><big>(</big><em>state</em>, <em>state_time_attr</em>, <em>time</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.set_state_time"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.set_state_time" title="Permalink to this definition">¶</a></dt>
+<dd><p>Set the time for the RM state change</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.set_stopped">
+<tt class="descname">set_stopped</tt><big>(</big><em>time=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.set_stopped"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.set_stopped" title="Permalink to this definition">¶</a></dt>
+<dd><p>Mark ResourceManager as STOPPED</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.set_with_conditions">
+<tt class="descname">set_with_conditions</tt><big>(</big><em>name</em>, <em>value</em>, <em>group</em>, <em>state</em>, <em>time</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.set_with_conditions"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.set_with_conditions" title="Permalink to this definition">¶</a></dt>
+<dd><p>Set value &#8216;value&#8217; on attribute with name &#8216;name&#8217; when &#8216;time&#8217; 
+has elapsed since all elements in &#8216;group&#8217; have reached state
+&#8216;state&#8217;</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>name</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Name of the attribute to set</li>
+<li><strong>name</strong> &#8211; Value of the attribute to set</li>
+<li><strong>group</strong> (<em>int or list of int</em>) &#8211; Group of RMs to wait for (list of guids)</li>
+<li><strong>state</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; State to wait for on all RM in group. (either &#8216;STARTED&#8217;, &#8216;STOPPED&#8217; or &#8216;READY&#8217;)</li>
+<li><strong>time</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Time to wait after &#8216;state&#8217; is reached on all RMs in group. (e.g. &#8216;2s&#8217;)</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.start">
+<tt class="descname">start</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.start" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.resource.ResourceManager.start_time">
+<tt class="descname">start_time</tt><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.start_time"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.start_time" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the start time of the RM as a timestamp</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.start_with_conditions">
+<tt class="descname">start_with_conditions</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.start_with_conditions"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.start_with_conditions" title="Permalink to this definition">¶</a></dt>
+<dd><p>Starts RM when all the conditions in self.conditions for
+action &#8216;START&#8217; are satisfied.</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.resource.ResourceManager.state">
+<tt class="descname">state</tt><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.state"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.state" title="Permalink to this definition">¶</a></dt>
+<dd><p>Get the current state of the RM</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.stop">
+<tt class="descname">stop</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.stop"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.stop" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.resource.ResourceManager.stop_time">
+<tt class="descname">stop_time</tt><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.stop_time"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.stop_time" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the stop time of the RM as a timestamp</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.stop_with_conditions">
+<tt class="descname">stop_with_conditions</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.stop_with_conditions"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.stop_with_conditions" title="Permalink to this definition">¶</a></dt>
+<dd><p>Stops RM when all the conditions in self.conditions for
+action &#8216;STOP&#8217; are satisfied.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.trace">
+<tt class="descname">trace</tt><big>(</big><em>name</em>, <em>attr='all'</em>, <em>block=512</em>, <em>offset=0</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.trace"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.trace" title="Permalink to this definition">¶</a></dt>
+<dd><p>Get information on collected trace</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
+<li><strong>name</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; Name of the trace</li>
+<li><strong>attr</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Can be one of:
+- TraceAttr.ALL (complete trace content), 
+- TraceAttr.STREAM (block in bytes to read starting at offset), 
+- TraceAttr.PATH (full path to the trace file),
+- TraceAttr.SIZE (size of trace file).</li>
+<li><strong>block</strong> &#8211; Number of bytes to retrieve from trace, when attr is TraceAttr.STREAM</li>
+<li><strong>offset</strong> &#8211; Number of &#8216;blocks&#8217; to skip, when attr is TraceAttr.STREAM</li>
+</ul>
+</td>
+</tr>
+<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last">str</p>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.trace_enabled">
+<tt class="descname">trace_enabled</tt><big>(</big><em>name</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.trace_enabled"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.trace_enabled" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns True if trace is enables</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>name</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Name of the trace</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.unregister_condition">
+<tt class="descname">unregister_condition</tt><big>(</big><em>group</em>, <em>action=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.unregister_condition"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.unregister_condition" title="Permalink to this definition">¶</a></dt>
+<dd><p>Removed conditions for a certain group of guids</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>action</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Action to restrict to condition (either &#8216;START&#8217;, &#8216;STOP&#8217; or &#8216;READY&#8217;)</li>
+<li><strong>group</strong> (<em>int or list of int</em>) &#8211; Group of RMs to wait for (list of guids)</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.unregister_connection">
+<tt class="descname">unregister_connection</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.unregister_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.unregister_connection" title="Permalink to this definition">¶</a></dt>
+<dd><p>Removes a registered connection to the RM identified by guid</p>
+<p>This method should not be overridden. Specific functionality
+should be added in the do_disconnect method.</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>guid</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; Global unique identified of the RM to connect to</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.resource.ResourceManager.valid_connection">
+<tt class="descname">valid_connection</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceManager.valid_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceManager.valid_connection" title="Permalink to this definition">¶</a></dt>
+<dd><p>Checks whether a connection with the other RM
+is valid.
+This method need to be redefined by each new Resource Manager.</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>guid</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; Guid of the current Resource Manager</td>
+</tr>
+<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body">Boolean</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="class">
+<dt id="nepi.execution.resource.ResourceState">
+<em class="property">class </em><tt class="descclassname">nepi.execution.resource.</tt><tt class="descname">ResourceState</tt><a class="reference internal" href="../_modules/nepi/execution/resource.html#ResourceState"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.ResourceState" title="Permalink to this definition">¶</a></dt>
+<dd><p>State of a Resource Manager</p>
+<dl class="attribute">
+<dt id="nepi.execution.resource.ResourceState.DISCOVERED">
+<tt class="descname">DISCOVERED</tt><em class="property"> = 1</em><a class="headerlink" href="#nepi.execution.resource.ResourceState.DISCOVERED" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.resource.ResourceState.FAILED">
+<tt class="descname">FAILED</tt><em class="property"> = 7</em><a class="headerlink" href="#nepi.execution.resource.ResourceState.FAILED" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.resource.ResourceState.NEW">
+<tt class="descname">NEW</tt><em class="property"> = 0</em><a class="headerlink" href="#nepi.execution.resource.ResourceState.NEW" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.resource.ResourceState.PROVISIONED">
+<tt class="descname">PROVISIONED</tt><em class="property"> = 3</em><a class="headerlink" href="#nepi.execution.resource.ResourceState.PROVISIONED" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.resource.ResourceState.READY">
+<tt class="descname">READY</tt><em class="property"> = 4</em><a class="headerlink" href="#nepi.execution.resource.ResourceState.READY" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.resource.ResourceState.RELEASED">
+<tt class="descname">RELEASED</tt><em class="property"> = 8</em><a class="headerlink" href="#nepi.execution.resource.ResourceState.RELEASED" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.resource.ResourceState.RESERVED">
+<tt class="descname">RESERVED</tt><em class="property"> = 2</em><a class="headerlink" href="#nepi.execution.resource.ResourceState.RESERVED" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.resource.ResourceState.STARTED">
+<tt class="descname">STARTED</tt><em class="property"> = 5</em><a class="headerlink" href="#nepi.execution.resource.ResourceState.STARTED" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.resource.ResourceState.STOPPED">
+<tt class="descname">STOPPED</tt><em class="property"> = 6</em><a class="headerlink" href="#nepi.execution.resource.ResourceState.STOPPED" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+<dl class="function">
+<dt id="nepi.execution.resource.clsinit">
+<tt class="descclassname">nepi.execution.resource.</tt><tt class="descname">clsinit</tt><big>(</big><em>cls</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#clsinit"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.clsinit" title="Permalink to this definition">¶</a></dt>
+<dd><p>Initializes template information (i.e. attributes and traces)
+on classes derived from the ResourceManager class.</p>
+<p>It is used as a decorator in the class declaration as follows:</p>
+<blockquote>
+<div><p>&#64;clsinit
+class MyResourceManager(ResourceManager):</p>
+<blockquote>
+<div>...</div></blockquote>
+</div></blockquote>
+</dd></dl>
+
+<dl class="function">
+<dt id="nepi.execution.resource.clsinit_copy">
+<tt class="descclassname">nepi.execution.resource.</tt><tt class="descname">clsinit_copy</tt><big>(</big><em>cls</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#clsinit_copy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.clsinit_copy" title="Permalink to this definition">¶</a></dt>
+<dd><p>Initializes template information (i.e. attributes and traces)
+on classes derived from the ResourceManager class.
+It differs from the clsinit method in that it forces inheritance
+of attributes and traces from the parent class.</p>
+<p>It is used as a decorator in the class declaration as follows:</p>
+<blockquote>
+<div><p>&#64;clsinit
+class MyResourceManager(ResourceManager):</p>
+<blockquote>
+<div>...</div></blockquote>
+</div></blockquote>
+<p>clsinit_copy should be prefered to clsinit when creating new
+ResourceManager child classes.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="nepi.execution.resource.failtrap">
+<tt class="descclassname">nepi.execution.resource.</tt><tt class="descname">failtrap</tt><big>(</big><em>func</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#failtrap"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.failtrap" title="Permalink to this definition">¶</a></dt>
+<dd><p>Decorator function for instance methods that should set the 
+RM state to FAILED when an error is raised. The methods that must be
+decorated are: discover, reserved, provision, deploy, start, stop.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="nepi.execution.resource.find_types">
+<tt class="descclassname">nepi.execution.resource.</tt><tt class="descname">find_types</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#find_types"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.find_types" title="Permalink to this definition">¶</a></dt>
+<dd><p>Look into the different folders to find all the 
+availables Resources Managers</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="nepi.execution.resource.populate_factory">
+<tt class="descclassname">nepi.execution.resource.</tt><tt class="descname">populate_factory</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/execution/resource.html#populate_factory"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.resource.populate_factory" title="Permalink to this definition">¶</a></dt>
+<dd><p>Find and rgister all available RMs</p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.execution.runner">
+<span id="nepi-execution-runner-module"></span><h2>nepi.execution.runner module<a class="headerlink" href="#module-nepi.execution.runner" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.execution.runner.ExperimentRunner">
+<em class="property">class </em><tt class="descclassname">nepi.execution.runner.</tt><tt class="descname">ExperimentRunner</tt><a class="reference internal" href="../_modules/nepi/execution/runner.html#ExperimentRunner"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.runner.ExperimentRunner" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference external" href="http://docs.python.org/library/functions.html#object" title="(in Python v2.7)"><tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></a></p>
+<p>The ExperimentRunner entity is responsible of
+re-running an experiment described by an ExperimentController 
+multiple time</p>
+<dl class="method">
+<dt id="nepi.execution.runner.ExperimentRunner.evaluate_normal_convergence">
+<tt class="descname">evaluate_normal_convergence</tt><big>(</big><em>ec</em>, <em>run</em>, <em>metrics</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/runner.html#ExperimentRunner.evaluate_normal_convergence"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.runner.ExperimentRunner.evaluate_normal_convergence" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns True when the confidence interval of the sample mean is
+less than 5% of the mean value, for a 95% confidence level,
+assuming normal distribution of the data</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.runner.ExperimentRunner.run">
+<tt class="descname">run</tt><big>(</big><em>ec</em>, <em>min_runs=1</em>, <em>max_runs=-1</em>, <em>wait_time=0</em>, <em>wait_guids=[]</em>, <em>compute_metric_callback=None</em>, <em>evaluate_convergence_callback=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/runner.html#ExperimentRunner.run"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.runner.ExperimentRunner.run" title="Permalink to this definition">¶</a></dt>
+<dd><p>Run a same experiment independently multiple times, until the 
+evaluate_convergence_callback function returns True</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>ec</strong> (<em>ExperimentController</em>) &#8211; Description of experiment to replicate. 
+The runner takes care of deploying the EC, so ec.deploy()
+must not be invoked directly before or after invoking
+runner.run().</li>
+<li><strong>min_runs</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; Minimum number of times the experiment must be 
+replicated</li>
+<li><strong>max_runs</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; Maximum number of times the experiment can be 
+replicated</li>
+<li><strong>wait_time</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#float" title="(in Python v2.7)"><em>float</em></a>) &#8211; Time to wait in seconds on each run between invoking
+ec.deploy() and ec.release().</li>
+<li><strong>wait_guids</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#list" title="(in Python v2.7)"><em>list</em></a>) &#8211; List of guids wait for finalization on each run.
+This list is passed to ec.wait_finished()</li>
+<li><strong>compute_metric_callback</strong> (<em>function</em>) &#8211; <p>User defined function invoked after 
+each experiment run to compute a metric. The metric is usually
+a network measurement obtained from the data collected 
+during experiment execution.
+The function is invoked passing the ec and the run number as arguments. 
+It must return the value for the computed metric(s) (usually a single 
+numerical value, but it can be several).</p>
+<blockquote>
+<div>metric = compute_metric_callback(ec, run)</div></blockquote>
+</li>
+<li><strong>evaluate_convergence_callback</strong> (<em>function</em>) &#8211; <p>User defined function invoked after
+computing the metric on each run, to evaluate the experiment was
+run enough times. It takes the list of cumulated metrics produced by 
+the compute_metric_callback up to the current run, and decided 
+whether the metrics have statistically converged to a meaningful value
+or not. It must return either True or False.</p>
+<blockquote>
+<div>stop = evaluate_convergence_callback(ec, run, metrics)</div></blockquote>
+<p>If stop is True, then the runner will exit.</p>
+</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.runner.ExperimentRunner.run_experiment">
+<tt class="descname">run_experiment</tt><big>(</big><em>filepath</em>, <em>wait_time</em>, <em>wait_guids</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/runner.html#ExperimentRunner.run_experiment"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.runner.ExperimentRunner.run_experiment" title="Permalink to this definition">¶</a></dt>
+<dd><p>Run an experiment based on the description stored
+in filepath.</p>
+</dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.execution.scheduler">
+<span id="nepi-execution-scheduler-module"></span><h2>nepi.execution.scheduler module<a class="headerlink" href="#module-nepi.execution.scheduler" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.execution.scheduler.HeapScheduler">
+<em class="property">class </em><tt class="descclassname">nepi.execution.scheduler.</tt><tt class="descname">HeapScheduler</tt><a class="reference internal" href="../_modules/nepi/execution/scheduler.html#HeapScheduler"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.scheduler.HeapScheduler" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference external" href="http://docs.python.org/library/functions.html#object" title="(in Python v2.7)"><tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></a></p>
+<p>Create a Heap Scheduler</p>
+<div class="admonition note">
+<p class="first admonition-title">Note</p>
+<p class="last">This class is thread safe.
+All calls to C Extensions are made atomic by the GIL in the CPython implementation.
+heapq.heappush, heapq.heappop, and list access are therefore thread-safe.</p>
+</div>
+<dl class="method">
+<dt id="nepi.execution.scheduler.HeapScheduler.next">
+<tt class="descname">next</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/execution/scheduler.html#HeapScheduler.next"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.scheduler.HeapScheduler.next" title="Permalink to this definition">¶</a></dt>
+<dd><p>Get the next task in the queue by timestamp and arrival order</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.scheduler.HeapScheduler.pending">
+<tt class="descname">pending</tt><a class="reference internal" href="../_modules/nepi/execution/scheduler.html#HeapScheduler.pending"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.scheduler.HeapScheduler.pending" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the list of pending task ids</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.scheduler.HeapScheduler.remove">
+<tt class="descname">remove</tt><big>(</big><em>tid</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/scheduler.html#HeapScheduler.remove"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.scheduler.HeapScheduler.remove" title="Permalink to this definition">¶</a></dt>
+<dd><p>Remove a task form the queue</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>tid</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; Id of the task to be removed</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.execution.scheduler.HeapScheduler.schedule">
+<tt class="descname">schedule</tt><big>(</big><em>task</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/scheduler.html#HeapScheduler.schedule"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.scheduler.HeapScheduler.schedule" title="Permalink to this definition">¶</a></dt>
+<dd><p>Add a task to the queue ordered by task.timestamp and arrival order</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>task</strong> (<em>task</em>) &#8211; task to schedule</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="class">
+<dt id="nepi.execution.scheduler.Task">
+<em class="property">class </em><tt class="descclassname">nepi.execution.scheduler.</tt><tt class="descname">Task</tt><big>(</big><em>timestamp</em>, <em>callback</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/scheduler.html#Task"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.scheduler.Task" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference external" href="http://docs.python.org/library/functions.html#object" title="(in Python v2.7)"><tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></a></p>
+<p>A Task represents an operation to be executed by the 
+ExperimentController scheduler</p>
+</dd></dl>
+
+<dl class="class">
+<dt id="nepi.execution.scheduler.TaskStatus">
+<em class="property">class </em><tt class="descclassname">nepi.execution.scheduler.</tt><tt class="descname">TaskStatus</tt><a class="reference internal" href="../_modules/nepi/execution/scheduler.html#TaskStatus"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.scheduler.TaskStatus" title="Permalink to this definition">¶</a></dt>
+<dd><p>Execution state of the Task</p>
+<dl class="attribute">
+<dt id="nepi.execution.scheduler.TaskStatus.DONE">
+<tt class="descname">DONE</tt><em class="property"> = 1</em><a class="headerlink" href="#nepi.execution.scheduler.TaskStatus.DONE" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.scheduler.TaskStatus.ERROR">
+<tt class="descname">ERROR</tt><em class="property"> = 2</em><a class="headerlink" href="#nepi.execution.scheduler.TaskStatus.ERROR" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.scheduler.TaskStatus.NEW">
+<tt class="descname">NEW</tt><em class="property"> = 0</em><a class="headerlink" href="#nepi.execution.scheduler.TaskStatus.NEW" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.execution.tags">
+<span id="nepi-execution-tags-module"></span><h2>nepi.execution.tags module<a class="headerlink" href="#module-nepi.execution.tags" title="Permalink to this headline">¶</a></h2>
+</div>
+<div class="section" id="module-nepi.execution.trace">
+<span id="nepi-execution-trace-module"></span><h2>nepi.execution.trace module<a class="headerlink" href="#module-nepi.execution.trace" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.execution.trace.Trace">
+<em class="property">class </em><tt class="descclassname">nepi.execution.trace.</tt><tt class="descname">Trace</tt><big>(</big><em>name</em>, <em>help</em>, <em>enabled=False</em><big>)</big><a class="reference internal" href="../_modules/nepi/execution/trace.html#Trace"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.trace.Trace" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference external" href="http://docs.python.org/library/functions.html#object" title="(in Python v2.7)"><tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></a></p>
+<p>A Trace represents information about a Resource that can 
+be collected</p>
+<dl class="attribute">
+<dt id="nepi.execution.trace.Trace.help">
+<tt class="descname">help</tt><a class="reference internal" href="../_modules/nepi/execution/trace.html#Trace.help"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.trace.Trace.help" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the help of the trace</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.trace.Trace.name">
+<tt class="descname">name</tt><a class="reference internal" href="../_modules/nepi/execution/trace.html#Trace.name"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.trace.Trace.name" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the name of the trace</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="class">
+<dt id="nepi.execution.trace.TraceAttr">
+<em class="property">class </em><tt class="descclassname">nepi.execution.trace.</tt><tt class="descname">TraceAttr</tt><a class="reference internal" href="../_modules/nepi/execution/trace.html#TraceAttr"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.execution.trace.TraceAttr" title="Permalink to this definition">¶</a></dt>
+<dd><p>A Trace attribute defines information about a Trace that can
+be queried</p>
+<dl class="attribute">
+<dt id="nepi.execution.trace.TraceAttr.ALL">
+<tt class="descname">ALL</tt><em class="property"> = 'all'</em><a class="headerlink" href="#nepi.execution.trace.TraceAttr.ALL" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.trace.TraceAttr.PATH">
+<tt class="descname">PATH</tt><em class="property"> = 'path'</em><a class="headerlink" href="#nepi.execution.trace.TraceAttr.PATH" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.trace.TraceAttr.SIZE">
+<tt class="descname">SIZE</tt><em class="property"> = 'size'</em><a class="headerlink" href="#nepi.execution.trace.TraceAttr.SIZE" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.execution.trace.TraceAttr.STREAM">
+<tt class="descname">STREAM</tt><em class="property"> = 'stream'</em><a class="headerlink" href="#nepi.execution.trace.TraceAttr.STREAM" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.execution">
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-nepi.execution" title="Permalink to this headline">¶</a></h2>
+</div>
+</div>
+
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_layout/nepi.html b/doc/sphinx/_build/html/_layout/nepi.html
new file mode 100644 (file)
index 0000000..a68ddb6
--- /dev/null
@@ -0,0 +1,483 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi package &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../_static/jquery.js"></script>
+    <script type="text/javascript" src="../_static/underscore.js"></script>
+    <script type="text/javascript" src="../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+  <h3><a href="../index.html">Table Of Contents</a></h3>
+  <ul>
+<li><a class="reference internal" href="#">nepi package</a><ul>
+<li><a class="reference internal" href="#subpackages">Subpackages</a></li>
+<li><a class="reference internal" href="#module-nepi">Module contents</a></li>
+</ul>
+</li>
+</ul>
+
+  <h3>This Page</h3>
+  <ul class="this-page-menu">
+    <li><a href="../_sources/_layout/nepi.txt"
+           rel="nofollow">Show Source</a></li>
+  </ul>
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <div class="section" id="nepi-package">
+<h1>nepi package<a class="headerlink" href="#nepi-package" title="Permalink to this headline">¶</a></h1>
+<div class="section" id="subpackages">
+<h2>Subpackages<a class="headerlink" href="#subpackages" title="Permalink to this headline">¶</a></h2>
+<div class="toctree-wrapper compound">
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="nepi.data.html">nepi.data package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="nepi.data.html#subpackages">Subpackages</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nepi.data.processing.html">nepi.data.processing package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nepi.data.processing.html#subpackages">Subpackages</a><ul>
+<li class="toctree-l5"><a class="reference internal" href="nepi.data.processing.ccn.html">nepi.data.processing.ccn package</a><ul>
+<li class="toctree-l6"><a class="reference internal" href="nepi.data.processing.ccn.html#submodules">Submodules</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.data.processing.ccn.html#module-nepi.data.processing.ccn.parser">nepi.data.processing.ccn.parser module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.data.processing.ccn.html#module-nepi.data.processing.ccn">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l5"><a class="reference internal" href="nepi.data.processing.ping.html">nepi.data.processing.ping package</a><ul>
+<li class="toctree-l6"><a class="reference internal" href="nepi.data.processing.ping.html#submodules">Submodules</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.data.processing.ping.html#module-nepi.data.processing.ping.parser">nepi.data.processing.ping.parser module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.data.processing.ping.html#module-nepi.data.processing.ping">Module contents</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.data.processing.html#module-nepi.data.processing">Module contents</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.data.html#module-nepi.data">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="nepi.execution.html">nepi.execution package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="nepi.execution.html#submodules">Submodules</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.execution.html#module-nepi.execution.attribute">nepi.execution.attribute module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.execution.html#module-nepi.execution.ec">nepi.execution.ec module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.execution.html#module-nepi.execution.resource">nepi.execution.resource module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.execution.html#module-nepi.execution.runner">nepi.execution.runner module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.execution.html#module-nepi.execution.scheduler">nepi.execution.scheduler module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.execution.html#module-nepi.execution.tags">nepi.execution.tags module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.execution.html#module-nepi.execution.trace">nepi.execution.trace module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.execution.html#module-nepi.execution">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="nepi.resources.html">nepi.resources package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.html#subpackages">Subpackages</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nepi.resources.all.html">nepi.resources.all package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.all.html#submodules">Submodules</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.all.html#module-nepi.resources.all.collector">nepi.resources.all.collector module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.all.html#module-nepi.resources.all">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="nepi.resources.linux.html">nepi.resources.linux package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.html#subpackages">Subpackages</a><ul>
+<li class="toctree-l5"><a class="reference internal" href="nepi.resources.linux.ccn.html">nepi.resources.linux.ccn package</a><ul>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.linux.ccn.html#submodules">Submodules</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccnapplication">nepi.resources.linux.ccn.ccnapplication module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccncat">nepi.resources.linux.ccn.ccncat module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccncontent">nepi.resources.linux.ccn.ccncontent module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccnd">nepi.resources.linux.ccn.ccnd module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccnpeek">nepi.resources.linux.ccn.ccnpeek module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccnping">nepi.resources.linux.ccn.ccnping module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccnpingserver">nepi.resources.linux.ccn.ccnpingserver module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccnpoke">nepi.resources.linux.ccn.ccnpoke module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccnr">nepi.resources.linux.ccn.ccnr module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.fibentry">nepi.resources.linux.ccn.fibentry module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l5"><a class="reference internal" href="nepi.resources.linux.netns.html">nepi.resources.linux.netns package</a><ul>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.linux.netns.html#submodules">Submodules</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.linux.netns.html#module-nepi.resources.linux.netns.netnsclient">nepi.resources.linux.netns.netnsclient module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.linux.netns.html#module-nepi.resources.linux.netns.netnsemulation">nepi.resources.linux.netns.netnsemulation module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.linux.netns.html#module-nepi.resources.linux.netns">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l5"><a class="reference internal" href="nepi.resources.linux.ns3.html">nepi.resources.linux.ns3 package</a><ul>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.linux.ns3.html#subpackages">Subpackages</a><ul>
+<li class="toctree-l7"><a class="reference internal" href="nepi.resources.linux.ns3.ccn.html">nepi.resources.linux.ns3.ccn package</a><ul>
+<li class="toctree-l8"><a class="reference internal" href="nepi.resources.linux.ns3.ccn.html#submodules">Submodules</a></li>
+<li class="toctree-l8"><a class="reference internal" href="nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3ccncatdceapplication">nepi.resources.linux.ns3.ccn.ns3ccncatdceapplication module</a></li>
+<li class="toctree-l8"><a class="reference internal" href="nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3ccndceapplication">nepi.resources.linux.ns3.ccn.ns3ccndceapplication module</a></li>
+<li class="toctree-l8"><a class="reference internal" href="nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3ccnddceapplication">nepi.resources.linux.ns3.ccn.ns3ccnddceapplication module</a></li>
+<li class="toctree-l8"><a class="reference internal" href="nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3ccnpeekdceapplication">nepi.resources.linux.ns3.ccn.ns3ccnpeekdceapplication module</a></li>
+<li class="toctree-l8"><a class="reference internal" href="nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3ccnpokedceapplication">nepi.resources.linux.ns3.ccn.ns3ccnpokedceapplication module</a></li>
+<li class="toctree-l8"><a class="reference internal" href="nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3ccnrdceapplication">nepi.resources.linux.ns3.ccn.ns3ccnrdceapplication module</a></li>
+<li class="toctree-l8"><a class="reference internal" href="nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3fibentrydceapplication">nepi.resources.linux.ns3.ccn.ns3fibentrydceapplication module</a></li>
+<li class="toctree-l8"><a class="reference internal" href="nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn">Module contents</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.linux.ns3.html#submodules">Submodules</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.linux.ns3.html#module-nepi.resources.linux.ns3.fdudptunnel">nepi.resources.linux.ns3.fdudptunnel module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.linux.ns3.html#module-nepi.resources.linux.ns3.ns3client">nepi.resources.linux.ns3.ns3client module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.linux.ns3.html#module-nepi.resources.linux.ns3.ns3dceapplication">nepi.resources.linux.ns3.ns3dceapplication module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.linux.ns3.html#module-nepi.resources.linux.ns3.ns3pingdceapplication">nepi.resources.linux.ns3.ns3pingdceapplication module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.linux.ns3.html#module-nepi.resources.linux.ns3.ns3simulation">nepi.resources.linux.ns3.ns3simulation module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.linux.ns3.html#module-nepi.resources.linux.ns3.tuntapfdlink">nepi.resources.linux.ns3.tuntapfdlink module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.linux.ns3.html#module-nepi.resources.linux.ns3">Module contents</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.html#submodules">Submodules</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.html#module-nepi.resources.linux.application">nepi.resources.linux.application module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.html#module-nepi.resources.linux.channel">nepi.resources.linux.channel module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.html#module-nepi.resources.linux.debfuncs">nepi.resources.linux.debfuncs module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.html#module-nepi.resources.linux.gretunnel">nepi.resources.linux.gretunnel module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.html#module-nepi.resources.linux.interface">nepi.resources.linux.interface module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.html#module-nepi.resources.linux.mtr">nepi.resources.linux.mtr module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.html#module-nepi.resources.linux.node">nepi.resources.linux.node module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.html#module-nepi.resources.linux.nping">nepi.resources.linux.nping module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.html#module-nepi.resources.linux.ping">nepi.resources.linux.ping module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.html#module-nepi.resources.linux.route">nepi.resources.linux.route module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.html#module-nepi.resources.linux.rpmfuncs">nepi.resources.linux.rpmfuncs module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.html#module-nepi.resources.linux.tap">nepi.resources.linux.tap module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.html#module-nepi.resources.linux.tcpdump">nepi.resources.linux.tcpdump module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.html#module-nepi.resources.linux.traceroute">nepi.resources.linux.traceroute module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.html#module-nepi.resources.linux.tun">nepi.resources.linux.tun module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.html#module-nepi.resources.linux.tunnel">nepi.resources.linux.tunnel module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.html#module-nepi.resources.linux.udptest">nepi.resources.linux.udptest module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.html#module-nepi.resources.linux.udptunnel">nepi.resources.linux.udptunnel module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.html#module-nepi.resources.linux">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="nepi.resources.netns.html">nepi.resources.netns package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.netns.html#submodules">Submodules</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.netns.html#module-nepi.resources.netns.netnsapplication">nepi.resources.netns.netnsapplication module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.netns.html#module-nepi.resources.netns.netnsbase">nepi.resources.netns.netnsbase module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.netns.html#module-nepi.resources.netns.netnsclient">nepi.resources.netns.netnsclient module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.netns.html#module-nepi.resources.netns.netnsemulation">nepi.resources.netns.netnsemulation module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.netns.html#module-nepi.resources.netns.netnsinterface">nepi.resources.netns.netnsinterface module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.netns.html#module-nepi.resources.netns.netnsipv4address">nepi.resources.netns.netnsipv4address module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.netns.html#module-nepi.resources.netns.netnsnode">nepi.resources.netns.netnsnode module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.netns.html#module-nepi.resources.netns.netnsnodeinterface">nepi.resources.netns.netnsnodeinterface module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.netns.html#module-nepi.resources.netns.netnsroute">nepi.resources.netns.netnsroute module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.netns.html#module-nepi.resources.netns.netnsserver">nepi.resources.netns.netnsserver module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.netns.html#module-nepi.resources.netns.netnsswitch">nepi.resources.netns.netnsswitch module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.netns.html#module-nepi.resources.netns.netnswrapper">nepi.resources.netns.netnswrapper module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.netns.html#module-nepi.resources.netns.netnswrapper_debug">nepi.resources.netns.netnswrapper_debug module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.netns.html#module-nepi.resources.netns">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="nepi.resources.ns3.html">nepi.resources.ns3 package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.html#subpackages">Subpackages</a><ul>
+<li class="toctree-l5"><a class="reference internal" href="nepi.resources.ns3.classes.html">nepi.resources.ns3.classes package</a><ul>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#submodules">Submodules</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.aarf_wifi_manager">nepi.resources.ns3.classes.aarf_wifi_manager module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.aarfcd_wifi_manager">nepi.resources.ns3.classes.aarfcd_wifi_manager module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.adhoc_wifi_mac">nepi.resources.ns3.classes.adhoc_wifi_mac module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.aloha_noack_net_device">nepi.resources.ns3.classes.aloha_noack_net_device module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.amrr_wifi_manager">nepi.resources.ns3.classes.amrr_wifi_manager module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.ap_wifi_mac">nepi.resources.ns3.classes.ap_wifi_mac module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.arf_wifi_manager">nepi.resources.ns3.classes.arf_wifi_manager module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.arp_l3protocol">nepi.resources.ns3.classes.arp_l3protocol module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.base_station_net_device">nepi.resources.ns3.classes.base_station_net_device module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.binary_error_model">nepi.resources.ns3.classes.binary_error_model module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.binary_error_sixlow_model">nepi.resources.ns3.classes.binary_error_sixlow_model module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.bridge_channel">nepi.resources.ns3.classes.bridge_channel module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.bridge_net_device">nepi.resources.ns3.classes.bridge_net_device module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.bulk_send_application">nepi.resources.ns3.classes.bulk_send_application module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.burst_error_model">nepi.resources.ns3.classes.burst_error_model module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.cara_wifi_manager">nepi.resources.ns3.classes.cara_wifi_manager module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.constant_acceleration_mobility_model">nepi.resources.ns3.classes.constant_acceleration_mobility_model module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.constant_position_mobility_model">nepi.resources.ns3.classes.constant_position_mobility_model module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.constant_rate_wifi_manager">nepi.resources.ns3.classes.constant_rate_wifi_manager module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.constant_speed_propagation_delay_model">nepi.resources.ns3.classes.constant_speed_propagation_delay_model module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.constant_velocity_mobility_model">nepi.resources.ns3.classes.constant_velocity_mobility_model module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.cost231propagation_loss_model">nepi.resources.ns3.classes.cost231propagation_loss_model module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.csma_channel">nepi.resources.ns3.classes.csma_channel module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.csma_net_device">nepi.resources.ns3.classes.csma_net_device module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.drop_tail_queue">nepi.resources.ns3.classes.drop_tail_queue module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.dsrdsr_routing">nepi.resources.ns3.classes.dsrdsr_routing module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.emu_net_device">nepi.resources.ns3.classes.emu_net_device module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.error_channel">nepi.resources.ns3.classes.error_channel module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.error_channel_sixlow">nepi.resources.ns3.classes.error_channel_sixlow module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.error_net_device">nepi.resources.ns3.classes.error_net_device module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.fd_net_device">nepi.resources.ns3.classes.fd_net_device module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.fixed_rss_loss_model">nepi.resources.ns3.classes.fixed_rss_loss_model module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.friis_propagation_loss_model">nepi.resources.ns3.classes.friis_propagation_loss_model module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.gauss_markov_mobility_model">nepi.resources.ns3.classes.gauss_markov_mobility_model module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.hierarchical_mobility_model">nepi.resources.ns3.classes.hierarchical_mobility_model module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.hybrid_buildings_propagation_loss_model">nepi.resources.ns3.classes.hybrid_buildings_propagation_loss_model module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.icmpv4l4protocol">nepi.resources.ns3.classes.icmpv4l4protocol module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.icmpv6l4protocol">nepi.resources.ns3.classes.icmpv6l4protocol module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.ideal_wifi_manager">nepi.resources.ns3.classes.ideal_wifi_manager module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.ipv4l3protocol">nepi.resources.ns3.classes.ipv4l3protocol module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.itu_r1411los_propagation_loss_model">nepi.resources.ns3.classes.itu_r1411los_propagation_loss_model module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.itu_r1411nlos_over_rooftop_propagation_loss_model">nepi.resources.ns3.classes.itu_r1411nlos_over_rooftop_propagation_loss_model module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.jakes_propagation_loss_model">nepi.resources.ns3.classes.jakes_propagation_loss_model module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.kun2600mhz_propagation_loss_model">nepi.resources.ns3.classes.kun2600mhz_propagation_loss_model module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.list_error_model">nepi.resources.ns3.classes.list_error_model module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.log_distance_propagation_loss_model">nepi.resources.ns3.classes.log_distance_propagation_loss_model module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.loopback_net_device">nepi.resources.ns3.classes.loopback_net_device module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.lr_wpan_net_device">nepi.resources.ns3.classes.lr_wpan_net_device module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.lte_enb_net_device">nepi.resources.ns3.classes.lte_enb_net_device module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.lte_simple_net_device">nepi.resources.ns3.classes.lte_simple_net_device module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.lte_ue_net_device">nepi.resources.ns3.classes.lte_ue_net_device module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.matrix_propagation_loss_model">nepi.resources.ns3.classes.matrix_propagation_loss_model module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.mesh_point_device">nepi.resources.ns3.classes.mesh_point_device module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.mesh_wifi_interface_mac">nepi.resources.ns3.classes.mesh_wifi_interface_mac module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.minstrel_wifi_manager">nepi.resources.ns3.classes.minstrel_wifi_manager module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.multi_model_spectrum_channel">nepi.resources.ns3.classes.multi_model_spectrum_channel module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.nakagami_propagation_loss_model">nepi.resources.ns3.classes.nakagami_propagation_loss_model module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.nist_error_rate_model">nepi.resources.ns3.classes.nist_error_rate_model module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.node">nepi.resources.ns3.classes.node module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.non_communicating_net_device">nepi.resources.ns3.classes.non_communicating_net_device module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.ocb_wifi_mac">nepi.resources.ns3.classes.ocb_wifi_mac module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.oh_buildings_propagation_loss_model">nepi.resources.ns3.classes.oh_buildings_propagation_loss_model module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.okumura_hata_propagation_loss_model">nepi.resources.ns3.classes.okumura_hata_propagation_loss_model module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.on_off_application">nepi.resources.ns3.classes.on_off_application module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.onoe_wifi_manager">nepi.resources.ns3.classes.onoe_wifi_manager module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.packet_sink">nepi.resources.ns3.classes.packet_sink module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.ping6">nepi.resources.ns3.classes.ping6 module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.point_to_point_channel">nepi.resources.ns3.classes.point_to_point_channel module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.point_to_point_net_device">nepi.resources.ns3.classes.point_to_point_net_device module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.point_to_point_remote_channel">nepi.resources.ns3.classes.point_to_point_remote_channel module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.radvd">nepi.resources.ns3.classes.radvd module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.random_direction2d_mobility_model">nepi.resources.ns3.classes.random_direction2d_mobility_model module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.random_propagation_delay_model">nepi.resources.ns3.classes.random_propagation_delay_model module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.random_propagation_loss_model">nepi.resources.ns3.classes.random_propagation_loss_model module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.random_walk2d_mobility_model">nepi.resources.ns3.classes.random_walk2d_mobility_model module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.random_waypoint_mobility_model">nepi.resources.ns3.classes.random_waypoint_mobility_model module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.range_propagation_loss_model">nepi.resources.ns3.classes.range_propagation_loss_model module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.rate_error_model">nepi.resources.ns3.classes.rate_error_model module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.receive_list_error_model">nepi.resources.ns3.classes.receive_list_error_model module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.red_queue">nepi.resources.ns3.classes.red_queue module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.rraa_wifi_manager">nepi.resources.ns3.classes.rraa_wifi_manager module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.simple_channel">nepi.resources.ns3.classes.simple_channel module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.simple_net_device">nepi.resources.ns3.classes.simple_net_device module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.single_model_spectrum_channel">nepi.resources.ns3.classes.single_model_spectrum_channel module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.six_low_pan_net_device">nepi.resources.ns3.classes.six_low_pan_net_device module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.sta_wifi_mac">nepi.resources.ns3.classes.sta_wifi_mac module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.steady_state_random_waypoint_mobility_model">nepi.resources.ns3.classes.steady_state_random_waypoint_mobility_model module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.subscriber_station_net_device">nepi.resources.ns3.classes.subscriber_station_net_device module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.tap_bridge">nepi.resources.ns3.classes.tap_bridge module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.tcp_l4protocol">nepi.resources.ns3.classes.tcp_l4protocol module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.three_log_distance_propagation_loss_model">nepi.resources.ns3.classes.three_log_distance_propagation_loss_model module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.two_ray_ground_propagation_loss_model">nepi.resources.ns3.classes.two_ray_ground_propagation_loss_model module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.uan_channel">nepi.resources.ns3.classes.uan_channel module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.udp_client">nepi.resources.ns3.classes.udp_client module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.udp_echo_client">nepi.resources.ns3.classes.udp_echo_client module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.udp_echo_server">nepi.resources.ns3.classes.udp_echo_server module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.udp_l4protocol">nepi.resources.ns3.classes.udp_l4protocol module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.udp_server">nepi.resources.ns3.classes.udp_server module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.udp_trace_client">nepi.resources.ns3.classes.udp_trace_client module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.v4ping">nepi.resources.ns3.classes.v4ping module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.virtual_net_device">nepi.resources.ns3.classes.virtual_net_device module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.waypoint_mobility_model">nepi.resources.ns3.classes.waypoint_mobility_model module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.wifi_net_device">nepi.resources.ns3.classes.wifi_net_device module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.yans_error_rate_model">nepi.resources.ns3.classes.yans_error_rate_model module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.yans_wifi_channel">nepi.resources.ns3.classes.yans_wifi_channel module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.yans_wifi_phy">nepi.resources.ns3.classes.yans_wifi_phy module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes">Module contents</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.html#submodules">Submodules</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3application">nepi.resources.ns3.ns3application module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3arpl3protocol">nepi.resources.ns3.ns3arpl3protocol module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3base">nepi.resources.ns3.ns3base module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3ccndceapplication">nepi.resources.ns3.ns3ccndceapplication module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3channel">nepi.resources.ns3.ns3channel module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3client">nepi.resources.ns3.ns3client module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3dceapplication">nepi.resources.ns3.ns3dceapplication module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3dcehelper">nepi.resources.ns3.ns3dcehelper module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3errormodel">nepi.resources.ns3.ns3errormodel module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3errorratemodel">nepi.resources.ns3.ns3errorratemodel module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3fdnetdevice">nepi.resources.ns3.ns3fdnetdevice module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3icmpv4l4protocol">nepi.resources.ns3.ns3icmpv4l4protocol module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3ipv4l3protocol">nepi.resources.ns3.ns3ipv4l3protocol module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3mobilitymodel">nepi.resources.ns3.ns3mobilitymodel module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3netdevice">nepi.resources.ns3.ns3netdevice module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3node">nepi.resources.ns3.ns3node module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3pipechanel">nepi.resources.ns3.ns3pipechanel module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3propagationdelaymodel">nepi.resources.ns3.ns3propagationdelaymodel module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3propagationlossmodel">nepi.resources.ns3.ns3propagationlossmodel module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3queue">nepi.resources.ns3.ns3queue module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3route">nepi.resources.ns3.ns3route module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3server">nepi.resources.ns3.ns3server module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3simulation">nepi.resources.ns3.ns3simulation module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3wifichannel">nepi.resources.ns3.ns3wifichannel module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3wifimac">nepi.resources.ns3.ns3wifimac module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3wifinetdevice">nepi.resources.ns3.ns3wifinetdevice module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3wifiphy">nepi.resources.ns3.ns3wifiphy module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3wifiremotestationmanager">nepi.resources.ns3.ns3wifiremotestationmanager module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3wrapper">nepi.resources.ns3.ns3wrapper module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3wrapper_debug">nepi.resources.ns3.ns3wrapper_debug module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.resource_manager_generator">nepi.resources.ns3.resource_manager_generator module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="nepi.resources.omf.html">nepi.resources.omf package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.omf.html#submodules">Submodules</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.omf.html#module-nepi.resources.omf.application">nepi.resources.omf.application module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.omf.html#module-nepi.resources.omf.channel">nepi.resources.omf.channel module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.omf.html#module-nepi.resources.omf.interface">nepi.resources.omf.interface module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.omf.html#module-nepi.resources.omf.messages_5_4">nepi.resources.omf.messages_5_4 module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.omf.html#module-nepi.resources.omf.messages_6">nepi.resources.omf.messages_6 module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.omf.html#module-nepi.resources.omf.node">nepi.resources.omf.node module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.omf.html#module-nepi.resources.omf.omf5_api">nepi.resources.omf.omf5_api module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.omf.html#module-nepi.resources.omf.omf6_api">nepi.resources.omf.omf6_api module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.omf.html#module-nepi.resources.omf.omf6_parser">nepi.resources.omf.omf6_parser module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.omf.html#module-nepi.resources.omf.omf_api_factory">nepi.resources.omf.omf_api_factory module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.omf.html#module-nepi.resources.omf.omf_client">nepi.resources.omf.omf_client module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.omf.html#module-nepi.resources.omf.omf_resource">nepi.resources.omf.omf_resource module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.omf.html#module-nepi.resources.omf.wilabt_node">nepi.resources.omf.wilabt_node module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.omf.html#module-nepi.resources.omf">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="nepi.resources.planetlab.html">nepi.resources.planetlab package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.planetlab.html#subpackages">Subpackages</a><ul>
+<li class="toctree-l5"><a class="reference internal" href="nepi.resources.planetlab.ns3.html">nepi.resources.planetlab.ns3 package</a><ul>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.planetlab.ns3.html#submodules">Submodules</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.planetlab.ns3.html#module-nepi.resources.planetlab.ns3.fdudptunnel">nepi.resources.planetlab.ns3.fdudptunnel module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.planetlab.ns3.html#module-nepi.resources.planetlab.ns3.tuntapfdlink">nepi.resources.planetlab.ns3.tuntapfdlink module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.planetlab.ns3.html#module-nepi.resources.planetlab.ns3">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l5"><a class="reference internal" href="nepi.resources.planetlab.openvswitch.html">nepi.resources.planetlab.openvswitch package</a><ul>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.planetlab.openvswitch.html#submodules">Submodules</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.planetlab.openvswitch.html#module-nepi.resources.planetlab.openvswitch.ovs">nepi.resources.planetlab.openvswitch.ovs module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.planetlab.openvswitch.html#module-nepi.resources.planetlab.openvswitch.ovsport">nepi.resources.planetlab.openvswitch.ovsport module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.planetlab.openvswitch.html#module-nepi.resources.planetlab.openvswitch">Module contents</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.planetlab.html#submodules">Submodules</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.planetlab.html#module-nepi.resources.planetlab.node">nepi.resources.planetlab.node module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.planetlab.html#module-nepi.resources.planetlab.plcapi">nepi.resources.planetlab.plcapi module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.planetlab.html#module-nepi.resources.planetlab.sfa_node">nepi.resources.planetlab.sfa_node module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.planetlab.html#module-nepi.resources.planetlab.tap">nepi.resources.planetlab.tap module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.planetlab.html#module-nepi.resources.planetlab.tun">nepi.resources.planetlab.tun module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.planetlab.html#module-nepi.resources.planetlab.vroute">nepi.resources.planetlab.vroute module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.planetlab.html#module-nepi.resources.planetlab">Module contents</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.html#module-nepi.resources">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="nepi.util.html">nepi.util package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="nepi.util.html#subpackages">Subpackages</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nepi.util.parsers.html">nepi.util.parsers package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nepi.util.parsers.html#submodules">Submodules</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.util.parsers.html#module-nepi.util.parsers.xml_parser">nepi.util.parsers.xml_parser module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.util.parsers.html#module-nepi.util.parsers">Module contents</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.util.html#submodules">Submodules</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.util.html#nepi-util-environ-module">nepi.util.environ module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.util.html#module-nepi.util.execfuncs">nepi.util.execfuncs module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.util.html#module-nepi.util.guid">nepi.util.guid module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.util.html#module-nepi.util.logger">nepi.util.logger module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.util.html#module-nepi.util.manifoldapi">nepi.util.manifoldapi module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.util.html#module-nepi.util.netgraph">nepi.util.netgraph module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.util.html#module-nepi.util.parallel">nepi.util.parallel module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.util.html#module-nepi.util.plotter">nepi.util.plotter module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.util.html#module-nepi.util.rmatcher">nepi.util.rmatcher module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.util.html#module-nepi.util.serializer">nepi.util.serializer module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.util.html#module-nepi.util.sfaapi">nepi.util.sfaapi module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.util.html#module-nepi.util.sfarspec_proc">nepi.util.sfarspec_proc module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.util.html#module-nepi.util.sshfuncs">nepi.util.sshfuncs module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.util.html#module-nepi.util.statfuncs">nepi.util.statfuncs module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.util.html#module-nepi.util.timefuncs">nepi.util.timefuncs module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.util.html#module-nepi.util">Module contents</a></li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<div class="section" id="module-nepi">
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-nepi" title="Permalink to this headline">¶</a></h2>
+</div>
+</div>
+
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_layout/nepi.resources.all.html b/doc/sphinx/_build/html/_layout/nepi.resources.all.html
new file mode 100644 (file)
index 0000000..ec59dd7
--- /dev/null
@@ -0,0 +1,165 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.all package &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../_static/jquery.js"></script>
+    <script type="text/javascript" src="../_static/underscore.js"></script>
+    <script type="text/javascript" src="../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+  <h3><a href="../index.html">Table Of Contents</a></h3>
+  <ul>
+<li><a class="reference internal" href="#">nepi.resources.all package</a><ul>
+<li><a class="reference internal" href="#submodules">Submodules</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.all.collector">nepi.resources.all.collector module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.all">Module contents</a></li>
+</ul>
+</li>
+</ul>
+
+  <h3>This Page</h3>
+  <ul class="this-page-menu">
+    <li><a href="../_sources/_layout/nepi.resources.all.txt"
+           rel="nofollow">Show Source</a></li>
+  </ul>
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <div class="section" id="nepi-resources-all-package">
+<h1>nepi.resources.all package<a class="headerlink" href="#nepi-resources-all-package" title="Permalink to this headline">¶</a></h1>
+<div class="section" id="submodules">
+<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline">¶</a></h2>
+</div>
+<div class="section" id="module-nepi.resources.all.collector">
+<span id="nepi-resources-all-collector-module"></span><h2>nepi.resources.all.collector module<a class="headerlink" href="#module-nepi.resources.all.collector" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.all.collector.Collector">
+<em class="property">class </em><tt class="descclassname">nepi.resources.all.collector.</tt><tt class="descname">Collector</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/all/collector.html#Collector"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.all.collector.Collector" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.execution.html#nepi.execution.resource.ResourceManager" title="nepi.execution.resource.ResourceManager"><tt class="xref py py-class docutils literal"><span class="pre">nepi.execution.resource.ResourceManager</span></tt></a></p>
+<p>The collector entity is reponsible of collecting traces
+of a same type associated to RMs into a local directory.</p>
+<dl class="class">
+<dt>
+<tt class="descname">Class Args :</tt></dt>
+<dd><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>ec</strong> (<em>ExperimentController</em>) &#8211; The Experiment controller</li>
+<li><strong>guid</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; guid of the RM</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.all.collector.Collector.do_deploy">
+<tt class="descname">do_deploy</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/all/collector.html#Collector.do_deploy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.all.collector.Collector.do_deploy" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.all.collector.Collector.do_provision">
+<tt class="descname">do_provision</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/all/collector.html#Collector.do_provision"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.all.collector.Collector.do_provision" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.all.collector.Collector.do_release">
+<tt class="descname">do_release</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/all/collector.html#Collector.do_release"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.all.collector.Collector.do_release" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.all.collector.Collector.store_path">
+<tt class="descname">store_path</tt><a class="reference internal" href="../_modules/nepi/resources/all/collector.html#Collector.store_path"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.all.collector.Collector.store_path" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.all.collector.Collector.valid_connection">
+<tt class="descname">valid_connection</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/all/collector.html#Collector.valid_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.all.collector.Collector.valid_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.all">
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-nepi.resources.all" title="Permalink to this headline">¶</a></h2>
+</div>
+</div>
+
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_layout/nepi.resources.html b/doc/sphinx/_build/html/_layout/nepi.resources.html
new file mode 100644 (file)
index 0000000..c7c7052
--- /dev/null
@@ -0,0 +1,409 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources package &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../_static/jquery.js"></script>
+    <script type="text/javascript" src="../_static/underscore.js"></script>
+    <script type="text/javascript" src="../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+  <h3><a href="../index.html">Table Of Contents</a></h3>
+  <ul>
+<li><a class="reference internal" href="#">nepi.resources package</a><ul>
+<li><a class="reference internal" href="#subpackages">Subpackages</a></li>
+<li><a class="reference internal" href="#module-nepi.resources">Module contents</a></li>
+</ul>
+</li>
+</ul>
+
+  <h3>This Page</h3>
+  <ul class="this-page-menu">
+    <li><a href="../_sources/_layout/nepi.resources.txt"
+           rel="nofollow">Show Source</a></li>
+  </ul>
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <div class="section" id="nepi-resources-package">
+<h1>nepi.resources package<a class="headerlink" href="#nepi-resources-package" title="Permalink to this headline">¶</a></h1>
+<div class="section" id="subpackages">
+<h2>Subpackages<a class="headerlink" href="#subpackages" title="Permalink to this headline">¶</a></h2>
+<div class="toctree-wrapper compound">
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="nepi.resources.all.html">nepi.resources.all package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.all.html#submodules">Submodules</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.all.html#module-nepi.resources.all.collector">nepi.resources.all.collector module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.all.html#module-nepi.resources.all">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="nepi.resources.linux.html">nepi.resources.linux package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.html#subpackages">Subpackages</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nepi.resources.linux.ccn.html">nepi.resources.linux.ccn package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.ccn.html#submodules">Submodules</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccnapplication">nepi.resources.linux.ccn.ccnapplication module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccncat">nepi.resources.linux.ccn.ccncat module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccncontent">nepi.resources.linux.ccn.ccncontent module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccnd">nepi.resources.linux.ccn.ccnd module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccnpeek">nepi.resources.linux.ccn.ccnpeek module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccnping">nepi.resources.linux.ccn.ccnping module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccnpingserver">nepi.resources.linux.ccn.ccnpingserver module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccnpoke">nepi.resources.linux.ccn.ccnpoke module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccnr">nepi.resources.linux.ccn.ccnr module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.fibentry">nepi.resources.linux.ccn.fibentry module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="nepi.resources.linux.netns.html">nepi.resources.linux.netns package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.netns.html#submodules">Submodules</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.netns.html#module-nepi.resources.linux.netns.netnsclient">nepi.resources.linux.netns.netnsclient module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.netns.html#module-nepi.resources.linux.netns.netnsemulation">nepi.resources.linux.netns.netnsemulation module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.netns.html#module-nepi.resources.linux.netns">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="nepi.resources.linux.ns3.html">nepi.resources.linux.ns3 package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.ns3.html#subpackages">Subpackages</a><ul>
+<li class="toctree-l5"><a class="reference internal" href="nepi.resources.linux.ns3.ccn.html">nepi.resources.linux.ns3.ccn package</a><ul>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.linux.ns3.ccn.html#submodules">Submodules</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3ccncatdceapplication">nepi.resources.linux.ns3.ccn.ns3ccncatdceapplication module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3ccndceapplication">nepi.resources.linux.ns3.ccn.ns3ccndceapplication module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3ccnddceapplication">nepi.resources.linux.ns3.ccn.ns3ccnddceapplication module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3ccnpeekdceapplication">nepi.resources.linux.ns3.ccn.ns3ccnpeekdceapplication module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3ccnpokedceapplication">nepi.resources.linux.ns3.ccn.ns3ccnpokedceapplication module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3ccnrdceapplication">nepi.resources.linux.ns3.ccn.ns3ccnrdceapplication module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3fibentrydceapplication">nepi.resources.linux.ns3.ccn.ns3fibentrydceapplication module</a></li>
+<li class="toctree-l6"><a class="reference internal" href="nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn">Module contents</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.ns3.html#submodules">Submodules</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.ns3.html#module-nepi.resources.linux.ns3.fdudptunnel">nepi.resources.linux.ns3.fdudptunnel module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.ns3.html#module-nepi.resources.linux.ns3.ns3client">nepi.resources.linux.ns3.ns3client module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.ns3.html#module-nepi.resources.linux.ns3.ns3dceapplication">nepi.resources.linux.ns3.ns3dceapplication module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.ns3.html#module-nepi.resources.linux.ns3.ns3pingdceapplication">nepi.resources.linux.ns3.ns3pingdceapplication module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.ns3.html#module-nepi.resources.linux.ns3.ns3simulation">nepi.resources.linux.ns3.ns3simulation module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.ns3.html#module-nepi.resources.linux.ns3.tuntapfdlink">nepi.resources.linux.ns3.tuntapfdlink module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.ns3.html#module-nepi.resources.linux.ns3">Module contents</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.html#submodules">Submodules</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.html#module-nepi.resources.linux.application">nepi.resources.linux.application module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.html#module-nepi.resources.linux.channel">nepi.resources.linux.channel module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.html#module-nepi.resources.linux.debfuncs">nepi.resources.linux.debfuncs module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.html#module-nepi.resources.linux.gretunnel">nepi.resources.linux.gretunnel module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.html#module-nepi.resources.linux.interface">nepi.resources.linux.interface module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.html#module-nepi.resources.linux.mtr">nepi.resources.linux.mtr module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.html#module-nepi.resources.linux.node">nepi.resources.linux.node module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.html#module-nepi.resources.linux.nping">nepi.resources.linux.nping module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.html#module-nepi.resources.linux.ping">nepi.resources.linux.ping module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.html#module-nepi.resources.linux.route">nepi.resources.linux.route module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.html#module-nepi.resources.linux.rpmfuncs">nepi.resources.linux.rpmfuncs module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.html#module-nepi.resources.linux.tap">nepi.resources.linux.tap module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.html#module-nepi.resources.linux.tcpdump">nepi.resources.linux.tcpdump module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.html#module-nepi.resources.linux.traceroute">nepi.resources.linux.traceroute module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.html#module-nepi.resources.linux.tun">nepi.resources.linux.tun module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.html#module-nepi.resources.linux.tunnel">nepi.resources.linux.tunnel module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.html#module-nepi.resources.linux.udptest">nepi.resources.linux.udptest module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.html#module-nepi.resources.linux.udptunnel">nepi.resources.linux.udptunnel module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.html#module-nepi.resources.linux">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="nepi.resources.netns.html">nepi.resources.netns package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.netns.html#submodules">Submodules</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.netns.html#module-nepi.resources.netns.netnsapplication">nepi.resources.netns.netnsapplication module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.netns.html#module-nepi.resources.netns.netnsbase">nepi.resources.netns.netnsbase module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.netns.html#module-nepi.resources.netns.netnsclient">nepi.resources.netns.netnsclient module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.netns.html#module-nepi.resources.netns.netnsemulation">nepi.resources.netns.netnsemulation module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.netns.html#module-nepi.resources.netns.netnsinterface">nepi.resources.netns.netnsinterface module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.netns.html#module-nepi.resources.netns.netnsipv4address">nepi.resources.netns.netnsipv4address module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.netns.html#module-nepi.resources.netns.netnsnode">nepi.resources.netns.netnsnode module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.netns.html#module-nepi.resources.netns.netnsnodeinterface">nepi.resources.netns.netnsnodeinterface module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.netns.html#module-nepi.resources.netns.netnsroute">nepi.resources.netns.netnsroute module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.netns.html#module-nepi.resources.netns.netnsserver">nepi.resources.netns.netnsserver module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.netns.html#module-nepi.resources.netns.netnsswitch">nepi.resources.netns.netnsswitch module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.netns.html#module-nepi.resources.netns.netnswrapper">nepi.resources.netns.netnswrapper module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.netns.html#module-nepi.resources.netns.netnswrapper_debug">nepi.resources.netns.netnswrapper_debug module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.netns.html#module-nepi.resources.netns">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="nepi.resources.ns3.html">nepi.resources.ns3 package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.html#subpackages">Subpackages</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nepi.resources.ns3.classes.html">nepi.resources.ns3.classes package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#submodules">Submodules</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.aarf_wifi_manager">nepi.resources.ns3.classes.aarf_wifi_manager module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.aarfcd_wifi_manager">nepi.resources.ns3.classes.aarfcd_wifi_manager module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.adhoc_wifi_mac">nepi.resources.ns3.classes.adhoc_wifi_mac module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.aloha_noack_net_device">nepi.resources.ns3.classes.aloha_noack_net_device module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.amrr_wifi_manager">nepi.resources.ns3.classes.amrr_wifi_manager module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.ap_wifi_mac">nepi.resources.ns3.classes.ap_wifi_mac module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.arf_wifi_manager">nepi.resources.ns3.classes.arf_wifi_manager module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.arp_l3protocol">nepi.resources.ns3.classes.arp_l3protocol module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.base_station_net_device">nepi.resources.ns3.classes.base_station_net_device module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.binary_error_model">nepi.resources.ns3.classes.binary_error_model module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.binary_error_sixlow_model">nepi.resources.ns3.classes.binary_error_sixlow_model module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.bridge_channel">nepi.resources.ns3.classes.bridge_channel module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.bridge_net_device">nepi.resources.ns3.classes.bridge_net_device module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.bulk_send_application">nepi.resources.ns3.classes.bulk_send_application module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.burst_error_model">nepi.resources.ns3.classes.burst_error_model module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.cara_wifi_manager">nepi.resources.ns3.classes.cara_wifi_manager module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.constant_acceleration_mobility_model">nepi.resources.ns3.classes.constant_acceleration_mobility_model module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.constant_position_mobility_model">nepi.resources.ns3.classes.constant_position_mobility_model module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.constant_rate_wifi_manager">nepi.resources.ns3.classes.constant_rate_wifi_manager module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.constant_speed_propagation_delay_model">nepi.resources.ns3.classes.constant_speed_propagation_delay_model module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.constant_velocity_mobility_model">nepi.resources.ns3.classes.constant_velocity_mobility_model module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.cost231propagation_loss_model">nepi.resources.ns3.classes.cost231propagation_loss_model module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.csma_channel">nepi.resources.ns3.classes.csma_channel module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.csma_net_device">nepi.resources.ns3.classes.csma_net_device module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.drop_tail_queue">nepi.resources.ns3.classes.drop_tail_queue module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.dsrdsr_routing">nepi.resources.ns3.classes.dsrdsr_routing module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.emu_net_device">nepi.resources.ns3.classes.emu_net_device module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.error_channel">nepi.resources.ns3.classes.error_channel module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.error_channel_sixlow">nepi.resources.ns3.classes.error_channel_sixlow module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.error_net_device">nepi.resources.ns3.classes.error_net_device module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.fd_net_device">nepi.resources.ns3.classes.fd_net_device module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.fixed_rss_loss_model">nepi.resources.ns3.classes.fixed_rss_loss_model module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.friis_propagation_loss_model">nepi.resources.ns3.classes.friis_propagation_loss_model module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.gauss_markov_mobility_model">nepi.resources.ns3.classes.gauss_markov_mobility_model module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.hierarchical_mobility_model">nepi.resources.ns3.classes.hierarchical_mobility_model module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.hybrid_buildings_propagation_loss_model">nepi.resources.ns3.classes.hybrid_buildings_propagation_loss_model module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.icmpv4l4protocol">nepi.resources.ns3.classes.icmpv4l4protocol module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.icmpv6l4protocol">nepi.resources.ns3.classes.icmpv6l4protocol module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.ideal_wifi_manager">nepi.resources.ns3.classes.ideal_wifi_manager module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.ipv4l3protocol">nepi.resources.ns3.classes.ipv4l3protocol module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.itu_r1411los_propagation_loss_model">nepi.resources.ns3.classes.itu_r1411los_propagation_loss_model module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.itu_r1411nlos_over_rooftop_propagation_loss_model">nepi.resources.ns3.classes.itu_r1411nlos_over_rooftop_propagation_loss_model module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.jakes_propagation_loss_model">nepi.resources.ns3.classes.jakes_propagation_loss_model module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.kun2600mhz_propagation_loss_model">nepi.resources.ns3.classes.kun2600mhz_propagation_loss_model module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.list_error_model">nepi.resources.ns3.classes.list_error_model module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.log_distance_propagation_loss_model">nepi.resources.ns3.classes.log_distance_propagation_loss_model module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.loopback_net_device">nepi.resources.ns3.classes.loopback_net_device module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.lr_wpan_net_device">nepi.resources.ns3.classes.lr_wpan_net_device module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.lte_enb_net_device">nepi.resources.ns3.classes.lte_enb_net_device module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.lte_simple_net_device">nepi.resources.ns3.classes.lte_simple_net_device module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.lte_ue_net_device">nepi.resources.ns3.classes.lte_ue_net_device module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.matrix_propagation_loss_model">nepi.resources.ns3.classes.matrix_propagation_loss_model module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.mesh_point_device">nepi.resources.ns3.classes.mesh_point_device module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.mesh_wifi_interface_mac">nepi.resources.ns3.classes.mesh_wifi_interface_mac module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.minstrel_wifi_manager">nepi.resources.ns3.classes.minstrel_wifi_manager module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.multi_model_spectrum_channel">nepi.resources.ns3.classes.multi_model_spectrum_channel module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.nakagami_propagation_loss_model">nepi.resources.ns3.classes.nakagami_propagation_loss_model module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.nist_error_rate_model">nepi.resources.ns3.classes.nist_error_rate_model module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.node">nepi.resources.ns3.classes.node module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.non_communicating_net_device">nepi.resources.ns3.classes.non_communicating_net_device module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.ocb_wifi_mac">nepi.resources.ns3.classes.ocb_wifi_mac module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.oh_buildings_propagation_loss_model">nepi.resources.ns3.classes.oh_buildings_propagation_loss_model module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.okumura_hata_propagation_loss_model">nepi.resources.ns3.classes.okumura_hata_propagation_loss_model module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.on_off_application">nepi.resources.ns3.classes.on_off_application module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.onoe_wifi_manager">nepi.resources.ns3.classes.onoe_wifi_manager module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.packet_sink">nepi.resources.ns3.classes.packet_sink module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.ping6">nepi.resources.ns3.classes.ping6 module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.point_to_point_channel">nepi.resources.ns3.classes.point_to_point_channel module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.point_to_point_net_device">nepi.resources.ns3.classes.point_to_point_net_device module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.point_to_point_remote_channel">nepi.resources.ns3.classes.point_to_point_remote_channel module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.radvd">nepi.resources.ns3.classes.radvd module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.random_direction2d_mobility_model">nepi.resources.ns3.classes.random_direction2d_mobility_model module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.random_propagation_delay_model">nepi.resources.ns3.classes.random_propagation_delay_model module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.random_propagation_loss_model">nepi.resources.ns3.classes.random_propagation_loss_model module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.random_walk2d_mobility_model">nepi.resources.ns3.classes.random_walk2d_mobility_model module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.random_waypoint_mobility_model">nepi.resources.ns3.classes.random_waypoint_mobility_model module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.range_propagation_loss_model">nepi.resources.ns3.classes.range_propagation_loss_model module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.rate_error_model">nepi.resources.ns3.classes.rate_error_model module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.receive_list_error_model">nepi.resources.ns3.classes.receive_list_error_model module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.red_queue">nepi.resources.ns3.classes.red_queue module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.rraa_wifi_manager">nepi.resources.ns3.classes.rraa_wifi_manager module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.simple_channel">nepi.resources.ns3.classes.simple_channel module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.simple_net_device">nepi.resources.ns3.classes.simple_net_device module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.single_model_spectrum_channel">nepi.resources.ns3.classes.single_model_spectrum_channel module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.six_low_pan_net_device">nepi.resources.ns3.classes.six_low_pan_net_device module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.sta_wifi_mac">nepi.resources.ns3.classes.sta_wifi_mac module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.steady_state_random_waypoint_mobility_model">nepi.resources.ns3.classes.steady_state_random_waypoint_mobility_model module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.subscriber_station_net_device">nepi.resources.ns3.classes.subscriber_station_net_device module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.tap_bridge">nepi.resources.ns3.classes.tap_bridge module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.tcp_l4protocol">nepi.resources.ns3.classes.tcp_l4protocol module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.three_log_distance_propagation_loss_model">nepi.resources.ns3.classes.three_log_distance_propagation_loss_model module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.two_ray_ground_propagation_loss_model">nepi.resources.ns3.classes.two_ray_ground_propagation_loss_model module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.uan_channel">nepi.resources.ns3.classes.uan_channel module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.udp_client">nepi.resources.ns3.classes.udp_client module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.udp_echo_client">nepi.resources.ns3.classes.udp_echo_client module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.udp_echo_server">nepi.resources.ns3.classes.udp_echo_server module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.udp_l4protocol">nepi.resources.ns3.classes.udp_l4protocol module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.udp_server">nepi.resources.ns3.classes.udp_server module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.udp_trace_client">nepi.resources.ns3.classes.udp_trace_client module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.v4ping">nepi.resources.ns3.classes.v4ping module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.virtual_net_device">nepi.resources.ns3.classes.virtual_net_device module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.waypoint_mobility_model">nepi.resources.ns3.classes.waypoint_mobility_model module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.wifi_net_device">nepi.resources.ns3.classes.wifi_net_device module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.yans_error_rate_model">nepi.resources.ns3.classes.yans_error_rate_model module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.yans_wifi_channel">nepi.resources.ns3.classes.yans_wifi_channel module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.yans_wifi_phy">nepi.resources.ns3.classes.yans_wifi_phy module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes">Module contents</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.html#submodules">Submodules</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3application">nepi.resources.ns3.ns3application module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3arpl3protocol">nepi.resources.ns3.ns3arpl3protocol module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3base">nepi.resources.ns3.ns3base module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3ccndceapplication">nepi.resources.ns3.ns3ccndceapplication module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3channel">nepi.resources.ns3.ns3channel module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3client">nepi.resources.ns3.ns3client module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3dceapplication">nepi.resources.ns3.ns3dceapplication module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3dcehelper">nepi.resources.ns3.ns3dcehelper module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3errormodel">nepi.resources.ns3.ns3errormodel module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3errorratemodel">nepi.resources.ns3.ns3errorratemodel module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3fdnetdevice">nepi.resources.ns3.ns3fdnetdevice module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3icmpv4l4protocol">nepi.resources.ns3.ns3icmpv4l4protocol module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3ipv4l3protocol">nepi.resources.ns3.ns3ipv4l3protocol module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3mobilitymodel">nepi.resources.ns3.ns3mobilitymodel module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3netdevice">nepi.resources.ns3.ns3netdevice module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3node">nepi.resources.ns3.ns3node module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3pipechanel">nepi.resources.ns3.ns3pipechanel module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3propagationdelaymodel">nepi.resources.ns3.ns3propagationdelaymodel module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3propagationlossmodel">nepi.resources.ns3.ns3propagationlossmodel module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3queue">nepi.resources.ns3.ns3queue module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3route">nepi.resources.ns3.ns3route module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3server">nepi.resources.ns3.ns3server module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3simulation">nepi.resources.ns3.ns3simulation module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3wifichannel">nepi.resources.ns3.ns3wifichannel module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3wifimac">nepi.resources.ns3.ns3wifimac module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3wifinetdevice">nepi.resources.ns3.ns3wifinetdevice module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3wifiphy">nepi.resources.ns3.ns3wifiphy module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3wifiremotestationmanager">nepi.resources.ns3.ns3wifiremotestationmanager module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3wrapper">nepi.resources.ns3.ns3wrapper module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.ns3wrapper_debug">nepi.resources.ns3.ns3wrapper_debug module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3.resource_manager_generator">nepi.resources.ns3.resource_manager_generator module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.html#module-nepi.resources.ns3">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="nepi.resources.omf.html">nepi.resources.omf package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.omf.html#submodules">Submodules</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.omf.html#module-nepi.resources.omf.application">nepi.resources.omf.application module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.omf.html#module-nepi.resources.omf.channel">nepi.resources.omf.channel module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.omf.html#module-nepi.resources.omf.interface">nepi.resources.omf.interface module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.omf.html#module-nepi.resources.omf.messages_5_4">nepi.resources.omf.messages_5_4 module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.omf.html#module-nepi.resources.omf.messages_6">nepi.resources.omf.messages_6 module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.omf.html#module-nepi.resources.omf.node">nepi.resources.omf.node module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.omf.html#module-nepi.resources.omf.omf5_api">nepi.resources.omf.omf5_api module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.omf.html#module-nepi.resources.omf.omf6_api">nepi.resources.omf.omf6_api module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.omf.html#module-nepi.resources.omf.omf6_parser">nepi.resources.omf.omf6_parser module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.omf.html#module-nepi.resources.omf.omf_api_factory">nepi.resources.omf.omf_api_factory module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.omf.html#module-nepi.resources.omf.omf_client">nepi.resources.omf.omf_client module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.omf.html#module-nepi.resources.omf.omf_resource">nepi.resources.omf.omf_resource module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.omf.html#module-nepi.resources.omf.wilabt_node">nepi.resources.omf.wilabt_node module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.omf.html#module-nepi.resources.omf">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="nepi.resources.planetlab.html">nepi.resources.planetlab package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.planetlab.html#subpackages">Subpackages</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nepi.resources.planetlab.ns3.html">nepi.resources.planetlab.ns3 package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.planetlab.ns3.html#submodules">Submodules</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.planetlab.ns3.html#module-nepi.resources.planetlab.ns3.fdudptunnel">nepi.resources.planetlab.ns3.fdudptunnel module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.planetlab.ns3.html#module-nepi.resources.planetlab.ns3.tuntapfdlink">nepi.resources.planetlab.ns3.tuntapfdlink module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.planetlab.ns3.html#module-nepi.resources.planetlab.ns3">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="nepi.resources.planetlab.openvswitch.html">nepi.resources.planetlab.openvswitch package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.planetlab.openvswitch.html#submodules">Submodules</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.planetlab.openvswitch.html#module-nepi.resources.planetlab.openvswitch.ovs">nepi.resources.planetlab.openvswitch.ovs module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.planetlab.openvswitch.html#module-nepi.resources.planetlab.openvswitch.ovsport">nepi.resources.planetlab.openvswitch.ovsport module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.planetlab.openvswitch.html#module-nepi.resources.planetlab.openvswitch">Module contents</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.planetlab.html#submodules">Submodules</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.planetlab.html#module-nepi.resources.planetlab.node">nepi.resources.planetlab.node module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.planetlab.html#module-nepi.resources.planetlab.plcapi">nepi.resources.planetlab.plcapi module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.planetlab.html#module-nepi.resources.planetlab.sfa_node">nepi.resources.planetlab.sfa_node module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.planetlab.html#module-nepi.resources.planetlab.tap">nepi.resources.planetlab.tap module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.planetlab.html#module-nepi.resources.planetlab.tun">nepi.resources.planetlab.tun module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.planetlab.html#module-nepi.resources.planetlab.vroute">nepi.resources.planetlab.vroute module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.planetlab.html#module-nepi.resources.planetlab">Module contents</a></li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<div class="section" id="module-nepi.resources">
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-nepi.resources" title="Permalink to this headline">¶</a></h2>
+</div>
+</div>
+
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_layout/nepi.resources.linux.ccn.html b/doc/sphinx/_build/html/_layout/nepi.resources.linux.ccn.html
new file mode 100644 (file)
index 0000000..82f66ee
--- /dev/null
@@ -0,0 +1,446 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.ccn package &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../_static/jquery.js"></script>
+    <script type="text/javascript" src="../_static/underscore.js"></script>
+    <script type="text/javascript" src="../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+  <h3><a href="../index.html">Table Of Contents</a></h3>
+  <ul>
+<li><a class="reference internal" href="#">nepi.resources.linux.ccn package</a><ul>
+<li><a class="reference internal" href="#submodules">Submodules</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.ccn.ccnapplication">nepi.resources.linux.ccn.ccnapplication module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.ccn.ccncat">nepi.resources.linux.ccn.ccncat module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.ccn.ccncontent">nepi.resources.linux.ccn.ccncontent module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.ccn.ccnd">nepi.resources.linux.ccn.ccnd module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.ccn.ccnpeek">nepi.resources.linux.ccn.ccnpeek module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.ccn.ccnping">nepi.resources.linux.ccn.ccnping module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.ccn.ccnpingserver">nepi.resources.linux.ccn.ccnpingserver module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.ccn.ccnpoke">nepi.resources.linux.ccn.ccnpoke module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.ccn.ccnr">nepi.resources.linux.ccn.ccnr module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.ccn.fibentry">nepi.resources.linux.ccn.fibentry module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.ccn">Module contents</a></li>
+</ul>
+</li>
+</ul>
+
+  <h3>This Page</h3>
+  <ul class="this-page-menu">
+    <li><a href="../_sources/_layout/nepi.resources.linux.ccn.txt"
+           rel="nofollow">Show Source</a></li>
+  </ul>
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <div class="section" id="nepi-resources-linux-ccn-package">
+<h1>nepi.resources.linux.ccn package<a class="headerlink" href="#nepi-resources-linux-ccn-package" title="Permalink to this headline">¶</a></h1>
+<div class="section" id="submodules">
+<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline">¶</a></h2>
+</div>
+<div class="section" id="module-nepi.resources.linux.ccn.ccnapplication">
+<span id="nepi-resources-linux-ccn-ccnapplication-module"></span><h2>nepi.resources.linux.ccn.ccnapplication module<a class="headerlink" href="#module-nepi.resources.linux.ccn.ccnapplication" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.ccn.ccnapplication.LinuxCCNApplication">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.ccn.ccnapplication.</tt><tt class="descname">LinuxCCNApplication</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccnapplication.html#LinuxCCNApplication"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccnapplication.LinuxCCNApplication" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication" title="nepi.resources.linux.application.LinuxApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.application.LinuxApplication</span></tt></a></p>
+<dl class="attribute">
+<dt id="nepi.resources.linux.ccn.ccnapplication.LinuxCCNApplication.ccnd">
+<tt class="descname">ccnd</tt><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccnapplication.html#LinuxCCNApplication.ccnd"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccnapplication.LinuxCCNApplication.ccnd" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ccn.ccnapplication.LinuxCCNApplication.do_deploy">
+<tt class="descname">do_deploy</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccnapplication.html#LinuxCCNApplication.do_deploy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccnapplication.LinuxCCNApplication.do_deploy" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.ccn.ccnapplication.LinuxCCNApplication.node">
+<tt class="descname">node</tt><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccnapplication.html#LinuxCCNApplication.node"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccnapplication.LinuxCCNApplication.node" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ccn.ccnapplication.LinuxCCNApplication.valid_connection">
+<tt class="descname">valid_connection</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccnapplication.html#LinuxCCNApplication.valid_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccnapplication.LinuxCCNApplication.valid_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.ccn.ccncat">
+<span id="nepi-resources-linux-ccn-ccncat-module"></span><h2>nepi.resources.linux.ccn.ccncat module<a class="headerlink" href="#module-nepi.resources.linux.ccn.ccncat" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.ccn.ccncat.LinuxCCNCat">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.ccn.ccncat.</tt><tt class="descname">LinuxCCNCat</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccncat.html#LinuxCCNCat"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccncat.LinuxCCNCat" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.linux.ccn.ccnapplication.LinuxCCNApplication" title="nepi.resources.linux.ccn.ccnapplication.LinuxCCNApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.ccn.ccnapplication.LinuxCCNApplication</span></tt></a></p>
+<dl class="method">
+<dt id="nepi.resources.linux.ccn.ccncat.LinuxCCNCat.do_deploy">
+<tt class="descname">do_deploy</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccncat.html#LinuxCCNCat.do_deploy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccncat.LinuxCCNCat.do_deploy" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ccn.ccncat.LinuxCCNCat.valid_connection">
+<tt class="descname">valid_connection</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccncat.html#LinuxCCNCat.valid_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccncat.LinuxCCNCat.valid_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.ccn.ccncontent">
+<span id="nepi-resources-linux-ccn-ccncontent-module"></span><h2>nepi.resources.linux.ccn.ccncontent module<a class="headerlink" href="#module-nepi.resources.linux.ccn.ccncontent" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.ccn.ccncontent.LinuxCCNContent">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.ccn.ccncontent.</tt><tt class="descname">LinuxCCNContent</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccncontent.html#LinuxCCNContent"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccncontent.LinuxCCNContent" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication" title="nepi.resources.linux.application.LinuxApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.application.LinuxApplication</span></tt></a></p>
+<dl class="attribute">
+<dt id="nepi.resources.linux.ccn.ccncontent.LinuxCCNContent.ccnd">
+<tt class="descname">ccnd</tt><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccncontent.html#LinuxCCNContent.ccnd"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccncontent.LinuxCCNContent.ccnd" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.ccn.ccncontent.LinuxCCNContent.ccnr">
+<tt class="descname">ccnr</tt><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccncontent.html#LinuxCCNContent.ccnr"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccncontent.LinuxCCNContent.ccnr" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ccn.ccncontent.LinuxCCNContent.do_deploy">
+<tt class="descname">do_deploy</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccncontent.html#LinuxCCNContent.do_deploy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccncontent.LinuxCCNContent.do_deploy" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ccn.ccncontent.LinuxCCNContent.do_start">
+<tt class="descname">do_start</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccncontent.html#LinuxCCNContent.do_start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccncontent.LinuxCCNContent.do_start" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.ccn.ccncontent.LinuxCCNContent.node">
+<tt class="descname">node</tt><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccncontent.html#LinuxCCNContent.node"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccncontent.LinuxCCNContent.node" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ccn.ccncontent.LinuxCCNContent.upload_start_command">
+<tt class="descname">upload_start_command</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccncontent.html#LinuxCCNContent.upload_start_command"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccncontent.LinuxCCNContent.upload_start_command" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ccn.ccncontent.LinuxCCNContent.valid_connection">
+<tt class="descname">valid_connection</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccncontent.html#LinuxCCNContent.valid_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccncontent.LinuxCCNContent.valid_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.ccn.ccnd">
+<span id="nepi-resources-linux-ccn-ccnd-module"></span><h2>nepi.resources.linux.ccn.ccnd module<a class="headerlink" href="#module-nepi.resources.linux.ccn.ccnd" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.ccn.ccnd.LinuxCCND">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.ccn.ccnd.</tt><tt class="descname">LinuxCCND</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccnd.html#LinuxCCND"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccnd.LinuxCCND" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication" title="nepi.resources.linux.application.LinuxApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.application.LinuxApplication</span></tt></a></p>
+<dl class="method">
+<dt id="nepi.resources.linux.ccn.ccnd.LinuxCCND.do_deploy">
+<tt class="descname">do_deploy</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccnd.html#LinuxCCND.do_deploy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccnd.LinuxCCND.do_deploy" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ccn.ccnd.LinuxCCND.do_start">
+<tt class="descname">do_start</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccnd.html#LinuxCCND.do_start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccnd.LinuxCCND.do_start" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ccn.ccnd.LinuxCCND.do_stop">
+<tt class="descname">do_stop</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccnd.html#LinuxCCND.do_stop"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccnd.LinuxCCND.do_stop" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.ccn.ccnd.LinuxCCND.path">
+<tt class="descname">path</tt><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccnd.html#LinuxCCND.path"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccnd.LinuxCCND.path" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.ccn.ccnd.LinuxCCND.state">
+<tt class="descname">state</tt><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccnd.html#LinuxCCND.state"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccnd.LinuxCCND.state" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ccn.ccnd.LinuxCCND.upload_start_command">
+<tt class="descname">upload_start_command</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccnd.html#LinuxCCND.upload_start_command"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccnd.LinuxCCND.upload_start_command" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ccn.ccnd.LinuxCCND.valid_connection">
+<tt class="descname">valid_connection</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccnd.html#LinuxCCND.valid_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccnd.LinuxCCND.valid_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.ccn.ccnd.LinuxCCND.version">
+<tt class="descname">version</tt><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccnd.html#LinuxCCND.version"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccnd.LinuxCCND.version" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.ccn.ccnpeek">
+<span id="nepi-resources-linux-ccn-ccnpeek-module"></span><h2>nepi.resources.linux.ccn.ccnpeek module<a class="headerlink" href="#module-nepi.resources.linux.ccn.ccnpeek" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.ccn.ccnpeek.LinuxCCNPeek">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.ccn.ccnpeek.</tt><tt class="descname">LinuxCCNPeek</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccnpeek.html#LinuxCCNPeek"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccnpeek.LinuxCCNPeek" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.linux.ccn.ccnapplication.LinuxCCNApplication" title="nepi.resources.linux.ccn.ccnapplication.LinuxCCNApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.ccn.ccnapplication.LinuxCCNApplication</span></tt></a></p>
+<dl class="method">
+<dt id="nepi.resources.linux.ccn.ccnpeek.LinuxCCNPeek.do_deploy">
+<tt class="descname">do_deploy</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccnpeek.html#LinuxCCNPeek.do_deploy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccnpeek.LinuxCCNPeek.do_deploy" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ccn.ccnpeek.LinuxCCNPeek.valid_connection">
+<tt class="descname">valid_connection</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccnpeek.html#LinuxCCNPeek.valid_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccnpeek.LinuxCCNPeek.valid_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.ccn.ccnping">
+<span id="nepi-resources-linux-ccn-ccnping-module"></span><h2>nepi.resources.linux.ccn.ccnping module<a class="headerlink" href="#module-nepi.resources.linux.ccn.ccnping" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.ccn.ccnping.LinuxCCNPing">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.ccn.ccnping.</tt><tt class="descname">LinuxCCNPing</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccnping.html#LinuxCCNPing"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccnping.LinuxCCNPing" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.linux.ccn.ccnpingserver.LinuxCCNPingServer" title="nepi.resources.linux.ccn.ccnpingserver.LinuxCCNPingServer"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.ccn.ccnpingserver.LinuxCCNPingServer</span></tt></a></p>
+<dl class="attribute">
+<dt id="nepi.resources.linux.ccn.ccnping.LinuxCCNPing.ccnpingserver">
+<tt class="descname">ccnpingserver</tt><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccnping.html#LinuxCCNPing.ccnpingserver"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccnping.LinuxCCNPing.ccnpingserver" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ccn.ccnping.LinuxCCNPing.do_start">
+<tt class="descname">do_start</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccnping.html#LinuxCCNPing.do_start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccnping.LinuxCCNPing.do_start" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ccn.ccnping.LinuxCCNPing.valid_connection">
+<tt class="descname">valid_connection</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccnping.html#LinuxCCNPing.valid_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccnping.LinuxCCNPing.valid_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.ccn.ccnpingserver">
+<span id="nepi-resources-linux-ccn-ccnpingserver-module"></span><h2>nepi.resources.linux.ccn.ccnpingserver module<a class="headerlink" href="#module-nepi.resources.linux.ccn.ccnpingserver" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.ccn.ccnpingserver.LinuxCCNPingServer">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.ccn.ccnpingserver.</tt><tt class="descname">LinuxCCNPingServer</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccnpingserver.html#LinuxCCNPingServer"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccnpingserver.LinuxCCNPingServer" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.linux.ccn.ccnapplication.LinuxCCNApplication" title="nepi.resources.linux.ccn.ccnapplication.LinuxCCNApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.ccn.ccnapplication.LinuxCCNApplication</span></tt></a></p>
+<dl class="method">
+<dt id="nepi.resources.linux.ccn.ccnpingserver.LinuxCCNPingServer.do_deploy">
+<tt class="descname">do_deploy</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccnpingserver.html#LinuxCCNPingServer.do_deploy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccnpingserver.LinuxCCNPingServer.do_deploy" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ccn.ccnpingserver.LinuxCCNPingServer.valid_connection">
+<tt class="descname">valid_connection</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccnpingserver.html#LinuxCCNPingServer.valid_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccnpingserver.LinuxCCNPingServer.valid_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.ccn.ccnpoke">
+<span id="nepi-resources-linux-ccn-ccnpoke-module"></span><h2>nepi.resources.linux.ccn.ccnpoke module<a class="headerlink" href="#module-nepi.resources.linux.ccn.ccnpoke" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.ccn.ccnpoke.LinuxCCNPoke">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.ccn.ccnpoke.</tt><tt class="descname">LinuxCCNPoke</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccnpoke.html#LinuxCCNPoke"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccnpoke.LinuxCCNPoke" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.linux.ccn.ccnapplication.LinuxCCNApplication" title="nepi.resources.linux.ccn.ccnapplication.LinuxCCNApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.ccn.ccnapplication.LinuxCCNApplication</span></tt></a></p>
+<dl class="method">
+<dt id="nepi.resources.linux.ccn.ccnpoke.LinuxCCNPoke.do_deploy">
+<tt class="descname">do_deploy</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccnpoke.html#LinuxCCNPoke.do_deploy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccnpoke.LinuxCCNPoke.do_deploy" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ccn.ccnpoke.LinuxCCNPoke.valid_connection">
+<tt class="descname">valid_connection</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccnpoke.html#LinuxCCNPoke.valid_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccnpoke.LinuxCCNPoke.valid_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.ccn.ccnr">
+<span id="nepi-resources-linux-ccn-ccnr-module"></span><h2>nepi.resources.linux.ccn.ccnr module<a class="headerlink" href="#module-nepi.resources.linux.ccn.ccnr" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.ccn.ccnr.LinuxCCNR">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.ccn.ccnr.</tt><tt class="descname">LinuxCCNR</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccnr.html#LinuxCCNR"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccnr.LinuxCCNR" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication" title="nepi.resources.linux.application.LinuxApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.application.LinuxApplication</span></tt></a></p>
+<dl class="attribute">
+<dt id="nepi.resources.linux.ccn.ccnr.LinuxCCNR.ccnd">
+<tt class="descname">ccnd</tt><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccnr.html#LinuxCCNR.ccnd"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccnr.LinuxCCNR.ccnd" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ccn.ccnr.LinuxCCNR.do_deploy">
+<tt class="descname">do_deploy</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccnr.html#LinuxCCNR.do_deploy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccnr.LinuxCCNR.do_deploy" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ccn.ccnr.LinuxCCNR.do_start">
+<tt class="descname">do_start</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccnr.html#LinuxCCNR.do_start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccnr.LinuxCCNR.do_start" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.ccn.ccnr.LinuxCCNR.node">
+<tt class="descname">node</tt><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccnr.html#LinuxCCNR.node"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccnr.LinuxCCNR.node" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ccn.ccnr.LinuxCCNR.upload_start_command">
+<tt class="descname">upload_start_command</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccnr.html#LinuxCCNR.upload_start_command"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccnr.LinuxCCNR.upload_start_command" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ccn.ccnr.LinuxCCNR.valid_connection">
+<tt class="descname">valid_connection</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/ccnr.html#LinuxCCNR.valid_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.ccnr.LinuxCCNR.valid_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.ccn.fibentry">
+<span id="nepi-resources-linux-ccn-fibentry-module"></span><h2>nepi.resources.linux.ccn.fibentry module<a class="headerlink" href="#module-nepi.resources.linux.ccn.fibentry" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.ccn.fibentry.LinuxFIBEntry">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.ccn.fibentry.</tt><tt class="descname">LinuxFIBEntry</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/fibentry.html#LinuxFIBEntry"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.fibentry.LinuxFIBEntry" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication" title="nepi.resources.linux.application.LinuxApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.application.LinuxApplication</span></tt></a></p>
+<dl class="attribute">
+<dt id="nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.ccnd">
+<tt class="descname">ccnd</tt><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/fibentry.html#LinuxFIBEntry.ccnd"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.ccnd" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.configure">
+<tt class="descname">configure</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/fibentry.html#LinuxFIBEntry.configure"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.configure" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.do_deploy">
+<tt class="descname">do_deploy</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/fibentry.html#LinuxFIBEntry.do_deploy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.do_deploy" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.do_start">
+<tt class="descname">do_start</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/fibentry.html#LinuxFIBEntry.do_start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.do_start" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.do_stop">
+<tt class="descname">do_stop</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/fibentry.html#LinuxFIBEntry.do_stop"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.do_stop" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.node">
+<tt class="descname">node</tt><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/fibentry.html#LinuxFIBEntry.node"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.node" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.ping">
+<tt class="descname">ping</tt><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/fibentry.html#LinuxFIBEntry.ping"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.ping" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.trace">
+<tt class="descname">trace</tt><big>(</big><em>name</em>, <em>attr='all'</em>, <em>block=512</em>, <em>offset=0</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/fibentry.html#LinuxFIBEntry.trace"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.trace" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.traceroute">
+<tt class="descname">traceroute</tt><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/fibentry.html#LinuxFIBEntry.traceroute"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.traceroute" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.upload_start_command">
+<tt class="descname">upload_start_command</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/fibentry.html#LinuxFIBEntry.upload_start_command"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.upload_start_command" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.valid_connection">
+<tt class="descname">valid_connection</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ccn/fibentry.html#LinuxFIBEntry.valid_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.valid_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.ccn">
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-nepi.resources.linux.ccn" title="Permalink to this headline">¶</a></h2>
+</div>
+</div>
+
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_layout/nepi.resources.linux.html b/doc/sphinx/_build/html/_layout/nepi.resources.linux.html
new file mode 100644 (file)
index 0000000..08ed22a
--- /dev/null
@@ -0,0 +1,1539 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux package &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../_static/jquery.js"></script>
+    <script type="text/javascript" src="../_static/underscore.js"></script>
+    <script type="text/javascript" src="../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+  <h3><a href="../index.html">Table Of Contents</a></h3>
+  <ul>
+<li><a class="reference internal" href="#">nepi.resources.linux package</a><ul>
+<li><a class="reference internal" href="#subpackages">Subpackages</a></li>
+<li><a class="reference internal" href="#submodules">Submodules</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.application">nepi.resources.linux.application module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.channel">nepi.resources.linux.channel module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.debfuncs">nepi.resources.linux.debfuncs module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.gretunnel">nepi.resources.linux.gretunnel module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.interface">nepi.resources.linux.interface module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.mtr">nepi.resources.linux.mtr module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.node">nepi.resources.linux.node module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.nping">nepi.resources.linux.nping module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.ping">nepi.resources.linux.ping module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.route">nepi.resources.linux.route module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.rpmfuncs">nepi.resources.linux.rpmfuncs module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.tap">nepi.resources.linux.tap module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.tcpdump">nepi.resources.linux.tcpdump module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.traceroute">nepi.resources.linux.traceroute module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.tun">nepi.resources.linux.tun module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.tunnel">nepi.resources.linux.tunnel module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.udptest">nepi.resources.linux.udptest module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.udptunnel">nepi.resources.linux.udptunnel module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux">Module contents</a></li>
+</ul>
+</li>
+</ul>
+
+  <h3>This Page</h3>
+  <ul class="this-page-menu">
+    <li><a href="../_sources/_layout/nepi.resources.linux.txt"
+           rel="nofollow">Show Source</a></li>
+  </ul>
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <div class="section" id="nepi-resources-linux-package">
+<h1>nepi.resources.linux package<a class="headerlink" href="#nepi-resources-linux-package" title="Permalink to this headline">¶</a></h1>
+<div class="section" id="subpackages">
+<h2>Subpackages<a class="headerlink" href="#subpackages" title="Permalink to this headline">¶</a></h2>
+<div class="toctree-wrapper compound">
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="nepi.resources.linux.ccn.html">nepi.resources.linux.ccn package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.ccn.html#submodules">Submodules</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccnapplication">nepi.resources.linux.ccn.ccnapplication module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccncat">nepi.resources.linux.ccn.ccncat module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccncontent">nepi.resources.linux.ccn.ccncontent module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccnd">nepi.resources.linux.ccn.ccnd module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccnpeek">nepi.resources.linux.ccn.ccnpeek module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccnping">nepi.resources.linux.ccn.ccnping module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccnpingserver">nepi.resources.linux.ccn.ccnpingserver module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccnpoke">nepi.resources.linux.ccn.ccnpoke module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccnr">nepi.resources.linux.ccn.ccnr module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.fibentry">nepi.resources.linux.ccn.fibentry module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="nepi.resources.linux.netns.html">nepi.resources.linux.netns package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.netns.html#submodules">Submodules</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.netns.html#module-nepi.resources.linux.netns.netnsclient">nepi.resources.linux.netns.netnsclient module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.netns.html#module-nepi.resources.linux.netns.netnsemulation">nepi.resources.linux.netns.netnsemulation module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.netns.html#module-nepi.resources.linux.netns">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="nepi.resources.linux.ns3.html">nepi.resources.linux.ns3 package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.ns3.html#subpackages">Subpackages</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nepi.resources.linux.ns3.ccn.html">nepi.resources.linux.ns3.ccn package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.ns3.ccn.html#submodules">Submodules</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3ccncatdceapplication">nepi.resources.linux.ns3.ccn.ns3ccncatdceapplication module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3ccndceapplication">nepi.resources.linux.ns3.ccn.ns3ccndceapplication module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3ccnddceapplication">nepi.resources.linux.ns3.ccn.ns3ccnddceapplication module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3ccnpeekdceapplication">nepi.resources.linux.ns3.ccn.ns3ccnpeekdceapplication module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3ccnpokedceapplication">nepi.resources.linux.ns3.ccn.ns3ccnpokedceapplication module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3ccnrdceapplication">nepi.resources.linux.ns3.ccn.ns3ccnrdceapplication module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3fibentrydceapplication">nepi.resources.linux.ns3.ccn.ns3fibentrydceapplication module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn">Module contents</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.ns3.html#submodules">Submodules</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.ns3.html#module-nepi.resources.linux.ns3.fdudptunnel">nepi.resources.linux.ns3.fdudptunnel module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.ns3.html#module-nepi.resources.linux.ns3.ns3client">nepi.resources.linux.ns3.ns3client module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.ns3.html#module-nepi.resources.linux.ns3.ns3dceapplication">nepi.resources.linux.ns3.ns3dceapplication module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.ns3.html#module-nepi.resources.linux.ns3.ns3pingdceapplication">nepi.resources.linux.ns3.ns3pingdceapplication module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.ns3.html#module-nepi.resources.linux.ns3.ns3simulation">nepi.resources.linux.ns3.ns3simulation module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.ns3.html#module-nepi.resources.linux.ns3.tuntapfdlink">nepi.resources.linux.ns3.tuntapfdlink module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.ns3.html#module-nepi.resources.linux.ns3">Module contents</a></li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<div class="section" id="submodules">
+<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline">¶</a></h2>
+</div>
+<div class="section" id="module-nepi.resources.linux.application">
+<span id="nepi-resources-linux-application-module"></span><h2>nepi.resources.linux.application module<a class="headerlink" href="#module-nepi.resources.linux.application" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.application.LinuxApplication">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.application.</tt><tt class="descname">LinuxApplication</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/application.html#LinuxApplication"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.application.LinuxApplication" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.execution.html#nepi.execution.resource.ResourceManager" title="nepi.execution.resource.ResourceManager"><tt class="xref py py-class docutils literal"><span class="pre">nepi.execution.resource.ResourceManager</span></tt></a></p>
+<dl class="class">
+<dt>
+<tt class="descname">Class Args :</tt></dt>
+<dd><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>ec</strong> (<em>ExperimentController</em>) &#8211; The Experiment controller</li>
+<li><strong>guid</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; guid of the RM</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<div class="admonition note">
+<p class="first admonition-title">Note</p>
+<p>A LinuxApplication RM represents a process that can be executed in
+a remote Linux host using SSH.</p>
+<p>The LinuxApplication RM takes care of uploadin sources and any files
+needed to run the experiment, to the remote host. 
+It also allows to provide source compilation (build) and installation 
+instructions, and takes care of automating the sources build and 
+installation tasks for the user.</p>
+<p>It is important to note that files uploaded to the remote host have
+two possible scopes: single-experiment or multi-experiment.
+Single experiment files are those that will not be re-used by other 
+experiments. Multi-experiment files are those that will.
+Sources and shared files are always made available to all experiments.</p>
+<p>Directory structure:</p>
+<p>The directory structure used by LinuxApplication RM at the Linux
+host is the following:</p>
+<dl class="docutils">
+<dt>${HOME}/.nepi/nepi-usr &#8211;&gt; Base directory for multi-experiment files</dt>
+<dd><div class="first last line-block">
+<div class="line"><br /></div>
+</div>
+</dd>
+</dl>
+<p>${LIB}        <a href="#id1"><span class="problematic" id="id2">|</span></a>- /lib &#8211;&gt; Base directory for libraries
+${BIN}        <a href="#id3"><span class="problematic" id="id4">|</span></a>- /bin &#8211;&gt; Base directory for binary files
+${SRC}        <a href="#id5"><span class="problematic" id="id6">|</span></a>- /src &#8211;&gt; Base directory for sources
+${SHARE}      <a href="#id7"><span class="problematic" id="id8">|</span></a>- /share &#8211;&gt; Base directory for other files</p>
+<dl class="docutils">
+<dt>${HOME}/.nepi/nepi-exp &#8211;&gt; Base directory for single-experiment files</dt>
+<dd><div class="first last line-block">
+<div class="line"><br /></div>
+</div>
+</dd>
+<dt>${EXP_HOME}   <a href="#id9"><span class="problematic" id="id10">|</span></a>- /&lt;exp-id&gt;  &#8211;&gt; Base directory for experiment exp-id</dt>
+<dd><div class="first last line-block">
+<div class="line"><br /></div>
+</div>
+</dd>
+<dt>${APP_HOME}       <a href="#id11"><span class="problematic" id="id12">|</span></a>- /&lt;app-guid&gt; &#8211;&gt; Base directory for application </dt>
+<dd><div class="first last line-block">
+<div class="line">specific files (e.g. command.sh, input)</div>
+<div class="line"><br /></div>
+</div>
+</dd>
+</dl>
+<p class="last">${RUN_HOME}            <a href="#id13"><span class="problematic" id="id14">|</span></a>- /&lt;run-id&gt; &#8211;&gt; Base directory for run specific</p>
+</div>
+<dl class="attribute">
+<dt id="nepi.resources.linux.application.LinuxApplication.app_home">
+<tt class="descname">app_home</tt><a class="reference internal" href="../_modules/nepi/resources/linux/application.html#LinuxApplication.app_home"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.application.LinuxApplication.app_home" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.application.LinuxApplication.build">
+<tt class="descname">build</tt><big>(</big><em>build=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/application.html#LinuxApplication.build"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.application.LinuxApplication.build" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.application.LinuxApplication.do_deploy">
+<tt class="descname">do_deploy</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/application.html#LinuxApplication.do_deploy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.application.LinuxApplication.do_deploy" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.application.LinuxApplication.do_provision">
+<tt class="descname">do_provision</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/application.html#LinuxApplication.do_provision"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.application.LinuxApplication.do_provision" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.application.LinuxApplication.do_release">
+<tt class="descname">do_release</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/application.html#LinuxApplication.do_release"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.application.LinuxApplication.do_release" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.application.LinuxApplication.do_start">
+<tt class="descname">do_start</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/application.html#LinuxApplication.do_start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.application.LinuxApplication.do_start" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.application.LinuxApplication.do_stop">
+<tt class="descname">do_stop</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/application.html#LinuxApplication.do_stop"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.application.LinuxApplication.do_stop" title="Permalink to this definition">¶</a></dt>
+<dd><p>Stops application execution</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.application.LinuxApplication.execute_command">
+<tt class="descname">execute_command</tt><big>(</big><em>command</em>, <em>env=None</em>, <em>sudo=False</em>, <em>tty=False</em>, <em>forward_x11=False</em>, <em>blocking=False</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/application.html#LinuxApplication.execute_command"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.application.LinuxApplication.execute_command" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.application.LinuxApplication.execute_deploy_command">
+<tt class="descname">execute_deploy_command</tt><big>(</big><em>command</em>, <em>prefix='deploy'</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/application.html#LinuxApplication.execute_deploy_command"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.application.LinuxApplication.execute_deploy_command" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.application.LinuxApplication.in_foreground">
+<tt class="descname">in_foreground</tt><a class="reference internal" href="../_modules/nepi/resources/linux/application.html#LinuxApplication.in_foreground"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.application.LinuxApplication.in_foreground" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns True if the command needs to be executed in foreground.
+This means that command will be executed using &#8216;execute&#8217; instead of
+&#8216;run&#8217; (&#8216;run&#8217; executes a command in background and detached from the 
+terminal)</p>
+<p>When using X11 forwarding option, the command can not run in background
+and detached from a terminal, since we need to keep the terminal attached 
+to interact with it.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.application.LinuxApplication.install">
+<tt class="descname">install</tt><big>(</big><em>install=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/application.html#LinuxApplication.install"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.application.LinuxApplication.install" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.application.LinuxApplication.install_dependencies">
+<tt class="descname">install_dependencies</tt><big>(</big><em>depends=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/application.html#LinuxApplication.install_dependencies"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.application.LinuxApplication.install_dependencies" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.application.LinuxApplication.log_message">
+<tt class="descname">log_message</tt><big>(</big><em>msg</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/application.html#LinuxApplication.log_message"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.application.LinuxApplication.log_message" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.application.LinuxApplication.node">
+<tt class="descname">node</tt><a class="reference internal" href="../_modules/nepi/resources/linux/application.html#LinuxApplication.node"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.application.LinuxApplication.node" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.application.LinuxApplication.pid">
+<tt class="descname">pid</tt><a class="reference internal" href="../_modules/nepi/resources/linux/application.html#LinuxApplication.pid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.application.LinuxApplication.pid" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.application.LinuxApplication.ppid">
+<tt class="descname">ppid</tt><a class="reference internal" href="../_modules/nepi/resources/linux/application.html#LinuxApplication.ppid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.application.LinuxApplication.ppid" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.application.LinuxApplication.replace_paths">
+<tt class="descname">replace_paths</tt><big>(</big><em>command</em>, <em>node=None</em>, <em>app_home=None</em>, <em>run_home=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/application.html#LinuxApplication.replace_paths"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.application.LinuxApplication.replace_paths" title="Permalink to this definition">¶</a></dt>
+<dd><p>Replace all special path tags with shell-escaped actual paths.</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.application.LinuxApplication.run_home">
+<tt class="descname">run_home</tt><a class="reference internal" href="../_modules/nepi/resources/linux/application.html#LinuxApplication.run_home"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.application.LinuxApplication.run_home" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.application.LinuxApplication.state">
+<tt class="descname">state</tt><a class="reference internal" href="../_modules/nepi/resources/linux/application.html#LinuxApplication.state"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.application.LinuxApplication.state" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the state of the application</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.application.LinuxApplication.trace">
+<tt class="descname">trace</tt><big>(</big><em>name</em>, <em>attr='all'</em>, <em>block=512</em>, <em>offset=0</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/application.html#LinuxApplication.trace"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.application.LinuxApplication.trace" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.application.LinuxApplication.trace_filepath">
+<tt class="descname">trace_filepath</tt><big>(</big><em>filename</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/application.html#LinuxApplication.trace_filepath"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.application.LinuxApplication.trace_filepath" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.application.LinuxApplication.upload_binaries">
+<tt class="descname">upload_binaries</tt><big>(</big><em>bins=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/application.html#LinuxApplication.upload_binaries"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.application.LinuxApplication.upload_binaries" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.application.LinuxApplication.upload_code">
+<tt class="descname">upload_code</tt><big>(</big><em>code=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/application.html#LinuxApplication.upload_code"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.application.LinuxApplication.upload_code" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.application.LinuxApplication.upload_files">
+<tt class="descname">upload_files</tt><big>(</big><em>files=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/application.html#LinuxApplication.upload_files"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.application.LinuxApplication.upload_files" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.application.LinuxApplication.upload_libraries">
+<tt class="descname">upload_libraries</tt><big>(</big><em>libs=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/application.html#LinuxApplication.upload_libraries"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.application.LinuxApplication.upload_libraries" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.application.LinuxApplication.upload_sources">
+<tt class="descname">upload_sources</tt><big>(</big><em>sources=None</em>, <em>src_dir=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/application.html#LinuxApplication.upload_sources"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.application.LinuxApplication.upload_sources" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.application.LinuxApplication.upload_start_command">
+<tt class="descname">upload_start_command</tt><big>(</big><em>overwrite=False</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/application.html#LinuxApplication.upload_start_command"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.application.LinuxApplication.upload_start_command" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.application.LinuxApplication.upload_stdin">
+<tt class="descname">upload_stdin</tt><big>(</big><em>stdin=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/application.html#LinuxApplication.upload_stdin"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.application.LinuxApplication.upload_stdin" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.application.LinuxApplication.valid_connection">
+<tt class="descname">valid_connection</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/application.html#LinuxApplication.valid_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.application.LinuxApplication.valid_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.channel">
+<span id="nepi-resources-linux-channel-module"></span><h2>nepi.resources.linux.channel module<a class="headerlink" href="#module-nepi.resources.linux.channel" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.channel.LinuxChannel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.channel.</tt><tt class="descname">LinuxChannel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/channel.html#LinuxChannel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.channel.LinuxChannel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.execution.html#nepi.execution.resource.ResourceManager" title="nepi.execution.resource.ResourceManager"><tt class="xref py py-class docutils literal"><span class="pre">nepi.execution.resource.ResourceManager</span></tt></a></p>
+<dl class="method">
+<dt id="nepi.resources.linux.channel.LinuxChannel.log_message">
+<tt class="descname">log_message</tt><big>(</big><em>msg</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/channel.html#LinuxChannel.log_message"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.channel.LinuxChannel.log_message" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.channel.LinuxChannel.valid_connection">
+<tt class="descname">valid_connection</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/channel.html#LinuxChannel.valid_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.channel.LinuxChannel.valid_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.debfuncs">
+<span id="nepi-resources-linux-debfuncs-module"></span><h2>nepi.resources.linux.debfuncs module<a class="headerlink" href="#module-nepi.resources.linux.debfuncs" title="Permalink to this headline">¶</a></h2>
+<dl class="function">
+<dt id="nepi.resources.linux.debfuncs.install_packages_command">
+<tt class="descclassname">nepi.resources.linux.debfuncs.</tt><tt class="descname">install_packages_command</tt><big>(</big><em>os</em>, <em>packages</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/debfuncs.html#install_packages_command"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.debfuncs.install_packages_command" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="function">
+<dt id="nepi.resources.linux.debfuncs.remove_packages_command">
+<tt class="descclassname">nepi.resources.linux.debfuncs.</tt><tt class="descname">remove_packages_command</tt><big>(</big><em>os</em>, <em>packages</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/debfuncs.html#remove_packages_command"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.debfuncs.remove_packages_command" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.gretunnel">
+<span id="nepi-resources-linux-gretunnel-module"></span><h2>nepi.resources.linux.gretunnel module<a class="headerlink" href="#module-nepi.resources.linux.gretunnel" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.gretunnel.LinuxGRETunnel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.gretunnel.</tt><tt class="descname">LinuxGRETunnel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/gretunnel.html#LinuxGRETunnel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.gretunnel.LinuxGRETunnel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.linux.tunnel.LinuxTunnel" title="nepi.resources.linux.tunnel.LinuxTunnel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.tunnel.LinuxTunnel</span></tt></a></p>
+<dl class="method">
+<dt id="nepi.resources.linux.gretunnel.LinuxGRETunnel.check_state_connection">
+<tt class="descname">check_state_connection</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/gretunnel.html#LinuxGRETunnel.check_state_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.gretunnel.LinuxGRETunnel.check_state_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.gretunnel.LinuxGRETunnel.establish_connection">
+<tt class="descname">establish_connection</tt><big>(</big><em>endpoint</em>, <em>remote_endpoint</em>, <em>data</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/gretunnel.html#LinuxGRETunnel.establish_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.gretunnel.LinuxGRETunnel.establish_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.gretunnel.LinuxGRETunnel.get_endpoints">
+<tt class="descname">get_endpoints</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/gretunnel.html#LinuxGRETunnel.get_endpoints"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.gretunnel.LinuxGRETunnel.get_endpoints" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the list of RM that are endpoints to the tunnel</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.gretunnel.LinuxGRETunnel.initiate_connection">
+<tt class="descname">initiate_connection</tt><big>(</big><em>endpoint</em>, <em>remote_endpoint</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/gretunnel.html#LinuxGRETunnel.initiate_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.gretunnel.LinuxGRETunnel.initiate_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.gretunnel.LinuxGRETunnel.log_message">
+<tt class="descname">log_message</tt><big>(</big><em>msg</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/gretunnel.html#LinuxGRETunnel.log_message"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.gretunnel.LinuxGRETunnel.log_message" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.gretunnel.LinuxGRETunnel.terminate_connection">
+<tt class="descname">terminate_connection</tt><big>(</big><em>endpoint</em>, <em>remote_endpoint</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/gretunnel.html#LinuxGRETunnel.terminate_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.gretunnel.LinuxGRETunnel.terminate_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.gretunnel.LinuxGRETunnel.valid_connection">
+<tt class="descname">valid_connection</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/gretunnel.html#LinuxGRETunnel.valid_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.gretunnel.LinuxGRETunnel.valid_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.gretunnel.LinuxGRETunnel.verify_connection">
+<tt class="descname">verify_connection</tt><big>(</big><em>endpoint</em>, <em>remote_endpoint</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/gretunnel.html#LinuxGRETunnel.verify_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.gretunnel.LinuxGRETunnel.verify_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.interface">
+<span id="nepi-resources-linux-interface-module"></span><h2>nepi.resources.linux.interface module<a class="headerlink" href="#module-nepi.resources.linux.interface" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.interface.LinuxInterface">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.interface.</tt><tt class="descname">LinuxInterface</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/interface.html#LinuxInterface"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.interface.LinuxInterface" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.execution.html#nepi.execution.resource.ResourceManager" title="nepi.execution.resource.ResourceManager"><tt class="xref py py-class docutils literal"><span class="pre">nepi.execution.resource.ResourceManager</span></tt></a></p>
+<dl class="method">
+<dt id="nepi.resources.linux.interface.LinuxInterface.add_set_hooks">
+<tt class="descname">add_set_hooks</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/interface.html#LinuxInterface.add_set_hooks"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.interface.LinuxInterface.add_set_hooks" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.interface.LinuxInterface.channel">
+<tt class="descname">channel</tt><a class="reference internal" href="../_modules/nepi/resources/linux/interface.html#LinuxInterface.channel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.interface.LinuxInterface.channel" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.interface.LinuxInterface.do_deploy">
+<tt class="descname">do_deploy</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/interface.html#LinuxInterface.do_deploy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.interface.LinuxInterface.do_deploy" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.interface.LinuxInterface.do_discover">
+<tt class="descname">do_discover</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/interface.html#LinuxInterface.do_discover"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.interface.LinuxInterface.do_discover" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.interface.LinuxInterface.do_provision">
+<tt class="descname">do_provision</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/interface.html#LinuxInterface.do_provision"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.interface.LinuxInterface.do_provision" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.interface.LinuxInterface.do_release">
+<tt class="descname">do_release</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/interface.html#LinuxInterface.do_release"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.interface.LinuxInterface.do_release" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.interface.LinuxInterface.load_configuration">
+<tt class="descname">load_configuration</tt><big>(</big><em>devname</em>, <em>mac</em>, <em>ip4</em>, <em>mask4</em>, <em>ip6</em>, <em>mask6</em>, <em>mtu</em>, <em>up</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/interface.html#LinuxInterface.load_configuration"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.interface.LinuxInterface.load_configuration" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.interface.LinuxInterface.log_message">
+<tt class="descname">log_message</tt><big>(</big><em>msg</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/interface.html#LinuxInterface.log_message"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.interface.LinuxInterface.log_message" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.interface.LinuxInterface.node">
+<tt class="descname">node</tt><a class="reference internal" href="../_modules/nepi/resources/linux/interface.html#LinuxInterface.node"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.interface.LinuxInterface.node" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.interface.LinuxInterface.set_hook_mtu">
+<tt class="descname">set_hook_mtu</tt><big>(</big><em>oldval</em>, <em>newval</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/interface.html#LinuxInterface.set_hook_mtu"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.interface.LinuxInterface.set_hook_mtu" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.interface.LinuxInterface.set_hook_up">
+<tt class="descname">set_hook_up</tt><big>(</big><em>oldval</em>, <em>newval</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/interface.html#LinuxInterface.set_hook_up"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.interface.LinuxInterface.set_hook_up" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.interface.LinuxInterface.valid_connection">
+<tt class="descname">valid_connection</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/interface.html#LinuxInterface.valid_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.interface.LinuxInterface.valid_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.mtr">
+<span id="nepi-resources-linux-mtr-module"></span><h2>nepi.resources.linux.mtr module<a class="headerlink" href="#module-nepi.resources.linux.mtr" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.mtr.LinuxMtr">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.mtr.</tt><tt class="descname">LinuxMtr</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/mtr.html#LinuxMtr"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.mtr.LinuxMtr" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.linux.application.LinuxApplication" title="nepi.resources.linux.application.LinuxApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.application.LinuxApplication</span></tt></a></p>
+<dl class="method">
+<dt id="nepi.resources.linux.mtr.LinuxMtr.do_deploy">
+<tt class="descname">do_deploy</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/mtr.html#LinuxMtr.do_deploy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.mtr.LinuxMtr.do_deploy" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.mtr.LinuxMtr.do_start">
+<tt class="descname">do_start</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/mtr.html#LinuxMtr.do_start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.mtr.LinuxMtr.do_start" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.mtr.LinuxMtr.upload_start_command">
+<tt class="descname">upload_start_command</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/mtr.html#LinuxMtr.upload_start_command"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.mtr.LinuxMtr.upload_start_command" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.mtr.LinuxMtr.valid_connection">
+<tt class="descname">valid_connection</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/mtr.html#LinuxMtr.valid_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.mtr.LinuxMtr.valid_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.node">
+<span id="nepi-resources-linux-node-module"></span><h2>nepi.resources.linux.node module<a class="headerlink" href="#module-nepi.resources.linux.node" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.node.ExitCode">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.node.</tt><tt class="descname">ExitCode</tt><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#ExitCode"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.ExitCode" title="Permalink to this definition">¶</a></dt>
+<dd><p>Error codes that the rexitcode function can return if unable to
+check the exit code of a spawned process</p>
+<dl class="attribute">
+<dt id="nepi.resources.linux.node.ExitCode.CORRUPTFILE">
+<tt class="descname">CORRUPTFILE</tt><em class="property"> = -2</em><a class="headerlink" href="#nepi.resources.linux.node.ExitCode.CORRUPTFILE" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.node.ExitCode.ERROR">
+<tt class="descname">ERROR</tt><em class="property"> = -3</em><a class="headerlink" href="#nepi.resources.linux.node.ExitCode.ERROR" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.node.ExitCode.FILENOTFOUND">
+<tt class="descname">FILENOTFOUND</tt><em class="property"> = -1</em><a class="headerlink" href="#nepi.resources.linux.node.ExitCode.FILENOTFOUND" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.node.ExitCode.OK">
+<tt class="descname">OK</tt><em class="property"> = 0</em><a class="headerlink" href="#nepi.resources.linux.node.ExitCode.OK" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+<dl class="class">
+<dt id="nepi.resources.linux.node.LinuxNode">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.node.</tt><tt class="descname">LinuxNode</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.execution.html#nepi.execution.resource.ResourceManager" title="nepi.execution.resource.ResourceManager"><tt class="xref py py-class docutils literal"><span class="pre">nepi.execution.resource.ResourceManager</span></tt></a></p>
+<dl class="class">
+<dt>
+<tt class="descname">Class Args :</tt></dt>
+<dd><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>ec</strong> (<em>ExperimentController</em>) &#8211; The Experiment controller</li>
+<li><strong>guid</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; guid of the RM</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<div class="admonition note">
+<p class="first admonition-title">Note</p>
+<p>There are different ways in which commands can be executed using the
+LinuxNode interface (i.e. &#8216;execute&#8217; - blocking and non blocking, &#8216;run&#8217;,
+&#8216;run_and_wait&#8217;).</p>
+<p>Brief explanation:</p>
+<blockquote class="last">
+<div><ul>
+<li><p class="first">&#8216;execute&#8217; (blocking mode) :</p>
+<blockquote>
+<div><p>HOW IT WORKS: &#8216;execute&#8217;, forks a process and run the
+command, synchronously, attached to the terminal, in
+foreground.
+The execute method will block until the command returns
+the result on &#8216;out&#8217;, &#8216;err&#8217; (so until it finishes executing).</p>
+<p>USAGE: short-lived commands that must be executed attached
+to a terminal and in foreground, for which it IS necessary
+to block until the command has finished (e.g. if you want
+to run &#8216;ls&#8217; or &#8216;cat&#8217;).</p>
+</div></blockquote>
+</li>
+<li><p class="first">&#8216;execute&#8217; (NON blocking mode - blocking = False) :</p>
+<blockquote>
+<div><p>HOW IT WORKS: Same as before, except that execute method
+will return immediately (even if command still running).</p>
+<p>USAGE: long-lived commands that must be executed attached
+to a terminal and in foreground, but for which it is not
+necessary to block until the command has finished. (e.g.
+start an application using X11 forwarding)</p>
+</div></blockquote>
+</li>
+</ul>
+<blockquote>
+<div><ul>
+<li><p class="first">&#8216;run&#8217; :</p>
+<blockquote>
+<div><p>HOW IT WORKS: Connects to the host ( using SSH if remote)
+and launches the command in background, detached from any
+terminal (daemonized), and returns. The command continues to
+run remotely, but since it is detached from the terminal,
+its pipes (stdin, stdout, stderr) can&#8217;t be redirected to the
+console (as normal non detached processes would), and so they
+are explicitly redirected to files. The pidfile is created as
+part of the process of launching the command. The pidfile
+holds the pid and ppid of the process forked in background,
+so later on it is possible to check whether the command is still
+running.</p>
+<blockquote>
+<div><p>USAGE: long-lived commands that can run detached in background,
+for which it is NOT necessary to block (wait) until the command
+has finished. (e.g. start an application that is not using X11
+forwarding. It can run detached and remotely in background)</p>
+</div></blockquote>
+</div></blockquote>
+</li>
+<li><p class="first">&#8216;run_and_wait&#8217; :</p>
+<blockquote>
+<div><p>HOW IT WORKS: Similar to &#8216;run&#8217; except that it &#8216;blocks&#8217; until
+the command has finished execution. It also checks whether
+errors occurred during runtime by reading the exitcode file,
+which contains the exit code of the command that was run
+(checking stderr only is not always reliable since many
+commands throw debugging info to stderr and the only way to
+automatically know whether an error really happened is to
+check the process exit code).</p>
+<p>Another difference with respect to &#8216;run&#8217;, is that instead
+of directly executing the command as a bash command line,
+it uploads the command to a bash script and runs the script.
+This allows to use the bash script to debug errors, since
+it remains at the remote host and can be run manually to
+reproduce the error.</p>
+<p>USAGE: medium-lived commands that can run detached in
+background, for which it IS necessary to block (wait) until
+the command has finished. (e.g. Package installation,
+source compilation, file download, etc)</p>
+</div></blockquote>
+</li>
+</ul>
+</div></blockquote>
+</div></blockquote>
+</div>
+<dl class="attribute">
+<dt id="nepi.resources.linux.node.LinuxNode.bin_dir">
+<tt class="descname">bin_dir</tt><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.bin_dir"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.bin_dir" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.node.LinuxNode.check_errors">
+<tt class="descname">check_errors</tt><big>(</big><em>home</em>, <em>ecodefile='exitcode'</em>, <em>stderr='stderr'</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.check_errors"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.check_errors" title="Permalink to this definition">¶</a></dt>
+<dd><p>Checks whether errors occurred while running a command.
+It first checks the exit code for the command, and only if the
+exit code is an error one it returns the error output.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.node.LinuxNode.check_output">
+<tt class="descname">check_output</tt><big>(</big><em>home</em>, <em>filename</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.check_output"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.check_output" title="Permalink to this definition">¶</a></dt>
+<dd><p>Retrives content of file</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.node.LinuxNode.clean_experiment">
+<tt class="descname">clean_experiment</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.clean_experiment"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.clean_experiment" title="Permalink to this definition">¶</a></dt>
+<dd><p>Cleans all experiment related files in the Linux host.
+It preserves NEPI files and folders that have a multi experiment
+scope.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.node.LinuxNode.clean_home">
+<tt class="descname">clean_home</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.clean_home"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.clean_home" title="Permalink to this definition">¶</a></dt>
+<dd><p>Cleans all NEPI related folders in the Linux host</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.node.LinuxNode.clean_processes">
+<tt class="descname">clean_processes</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.clean_processes"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.clean_processes" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.node.LinuxNode.copy">
+<tt class="descname">copy</tt><big>(</big><em>src</em>, <em>dst</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.copy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.copy" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.node.LinuxNode.do_deploy">
+<tt class="descname">do_deploy</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.do_deploy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.do_deploy" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.node.LinuxNode.do_provision">
+<tt class="descname">do_provision</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.do_provision"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.do_provision" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.node.LinuxNode.do_release">
+<tt class="descname">do_release</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.do_release"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.do_release" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.node.LinuxNode.download">
+<tt class="descname">download</tt><big>(</big><em>src</em>, <em>dst</em>, <em>raise_on_error=True</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.download"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.download" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.node.LinuxNode.execute">
+<tt class="descname">execute</tt><big>(</big><em>command</em>, <em>sudo=False</em>, <em>env=None</em>, <em>tty=False</em>, <em>forward_x11=False</em>, <em>retry=3</em>, <em>connect_timeout=30</em>, <em>strict_host_checking=False</em>, <em>persistent=True</em>, <em>blocking=True</em>, <em>with_lock=False</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.execute"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.execute" title="Permalink to this definition">¶</a></dt>
+<dd><p>Notice that this invocation will block until the
+execution finishes. If this is not the desired behavior,
+use &#8216;run&#8217; instead.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.node.LinuxNode.exitcode">
+<tt class="descname">exitcode</tt><big>(</big><em>home</em>, <em>ecodefile='exitcode'</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.exitcode"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.exitcode" title="Permalink to this definition">¶</a></dt>
+<dd><p>Get the exit code of an application.
+Returns an integer value with the exit code</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.node.LinuxNode.exp_dir">
+<tt class="descname">exp_dir</tt><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.exp_dir"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.exp_dir" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.node.LinuxNode.exp_home">
+<tt class="descname">exp_home</tt><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.exp_home"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.exp_home" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.node.LinuxNode.filter_existing_files">
+<tt class="descname">filter_existing_files</tt><big>(</big><em>src</em>, <em>dst</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.filter_existing_files"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.filter_existing_files" title="Permalink to this definition">¶</a></dt>
+<dd><p>Removes files that already exist in the Linux host from src list</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.node.LinuxNode.find_home">
+<tt class="descname">find_home</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.find_home"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.find_home" title="Permalink to this definition">¶</a></dt>
+<dd><p>Retrieves host home directory</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.node.LinuxNode.format_environment">
+<tt class="descname">format_environment</tt><big>(</big><em>env</em>, <em>inline=False</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.format_environment"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.format_environment" title="Permalink to this definition">¶</a></dt>
+<dd><dl class="docutils">
+<dt>Formats the environment variables for a command to be executed</dt>
+<dd><blockquote class="first">
+<div>either as an inline command
+(i.e. export PYTHONPATH=src/..; export LALAL= ..;python script.py) or 
+as a bash script (i.e. export PYTHONPATH=src/..</div></blockquote>
+<p class="last">export LALA=..</p>
+</dd>
+</dl>
+<p>)</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.node.LinuxNode.get_os">
+<tt class="descname">get_os</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.get_os"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.get_os" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.node.LinuxNode.getpid">
+<tt class="descname">getpid</tt><big>(</big><em>home</em>, <em>pidfile='pidfile'</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.getpid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.getpid" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.node.LinuxNode.home_dir">
+<tt class="descname">home_dir</tt><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.home_dir"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.home_dir" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.node.LinuxNode.install_packages">
+<tt class="descname">install_packages</tt><big>(</big><em>packages</em>, <em>home</em>, <em>run_home=None</em>, <em>raise_on_error=True</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.install_packages"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.install_packages" title="Permalink to this definition">¶</a></dt>
+<dd><p>Install packages in the Linux host.</p>
+<p>&#8216;home&#8217; is the directory to upload the package installation script.
+&#8216;run_home&#8217; is the directory from where to execute the script.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.node.LinuxNode.install_packages_command">
+<tt class="descname">install_packages_command</tt><big>(</big><em>packages</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.install_packages_command"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.install_packages_command" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.node.LinuxNode.is_alive">
+<tt class="descname">is_alive</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.is_alive"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.is_alive" title="Permalink to this definition">¶</a></dt>
+<dd><p>Checks if host is responsive</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.node.LinuxNode.kill">
+<tt class="descname">kill</tt><big>(</big><em>pid</em>, <em>ppid</em>, <em>sudo=False</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.kill"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.kill" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.node.LinuxNode.lib_dir">
+<tt class="descname">lib_dir</tt><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.lib_dir"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.lib_dir" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.node.LinuxNode.localhost">
+<tt class="descname">localhost</tt><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.localhost"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.localhost" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.node.LinuxNode.log_message">
+<tt class="descname">log_message</tt><big>(</big><em>msg</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.log_message"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.log_message" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.node.LinuxNode.mkdir">
+<tt class="descname">mkdir</tt><big>(</big><em>paths</em>, <em>clean=False</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.mkdir"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.mkdir" title="Permalink to this definition">¶</a></dt>
+<dd><p>Paths is either a single remote directory path to create,
+or a list of directories to create.</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.node.LinuxNode.nepi_home">
+<tt class="descname">nepi_home</tt><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.nepi_home"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.nepi_home" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.node.LinuxNode.node_home">
+<tt class="descname">node_home</tt><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.node_home"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.node_home" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.node.LinuxNode.os">
+<tt class="descname">os</tt><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.os"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.os" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.node.LinuxNode.remove_packages">
+<tt class="descname">remove_packages</tt><big>(</big><em>packages</em>, <em>home</em>, <em>run_home=None</em>, <em>raise_on_error=True</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.remove_packages"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.remove_packages" title="Permalink to this definition">¶</a></dt>
+<dd><p>Uninstall packages from the Linux host.</p>
+<p>&#8216;home&#8217; is the directory to upload the package un-installation script.
+&#8216;run_home&#8217; is the directory from where to execute the script.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.node.LinuxNode.rmdir">
+<tt class="descname">rmdir</tt><big>(</big><em>paths</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.rmdir"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.rmdir" title="Permalink to this definition">¶</a></dt>
+<dd><p>Paths is either a single remote directory path to delete,
+or a list of directories to delete.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.node.LinuxNode.run">
+<tt class="descname">run</tt><big>(</big><em>command</em>, <em>home</em>, <em>create_home=False</em>, <em>pidfile='pidfile'</em>, <em>stdin=None</em>, <em>stdout='stdout'</em>, <em>stderr='stderr'</em>, <em>sudo=False</em>, <em>tty=False</em>, <em>strict_host_checking=False</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.run"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.run" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.node.LinuxNode.run_and_wait">
+<tt class="descname">run_and_wait</tt><big>(</big><em>command</em>, <em>home</em>, <em>shfile='cmd.sh'</em>, <em>env=None</em>, <em>overwrite=True</em>, <em>wait_run=True</em>, <em>pidfile='pidfile'</em>, <em>ecodefile='exitcode'</em>, <em>stdin=None</em>, <em>stdout='stdout'</em>, <em>stderr='stderr'</em>, <em>sudo=False</em>, <em>tty=False</em>, <em>raise_on_error=True</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.run_and_wait"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.run_and_wait" title="Permalink to this definition">¶</a></dt>
+<dd><p>Uploads the &#8216;command&#8217; to a bash script in the host.
+Then runs the script detached in background in the host, and
+busy-waites until the script finishes executing.</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.node.LinuxNode.run_home">
+<tt class="descname">run_home</tt><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.run_home"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.run_home" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.node.LinuxNode.share_dir">
+<tt class="descname">share_dir</tt><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.share_dir"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.share_dir" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.node.LinuxNode.src_dir">
+<tt class="descname">src_dir</tt><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.src_dir"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.src_dir" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.node.LinuxNode.status">
+<tt class="descname">status</tt><big>(</big><em>pid</em>, <em>ppid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.status"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.status" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.node.LinuxNode.upload">
+<tt class="descname">upload</tt><big>(</big><em>src</em>, <em>dst</em>, <em>text=False</em>, <em>overwrite=True</em>, <em>raise_on_error=True</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.upload"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.upload" title="Permalink to this definition">¶</a></dt>
+<dd><p>Copy content to destination</p>
+<dl class="docutils">
+<dt>src  string with the content to copy. Can be:</dt>
+<dd><ul class="first last simple">
+<li>plain text</li>
+<li>a string with the path to a local file</li>
+<li>a string with a semi-colon separeted list of local files</li>
+<li>a string with a local directory</li>
+</ul>
+</dd>
+<dt>dst  string with destination path on the remote host (remote is </dt>
+<dd>always self.host)</dd>
+</dl>
+<p>text src is text input, it must be stored into a temp file before 
+uploading</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.node.LinuxNode.upload_command">
+<tt class="descname">upload_command</tt><big>(</big><em>command</em>, <em>shfile='cmd.sh'</em>, <em>ecodefile='exitcode'</em>, <em>overwrite=True</em>, <em>env=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.upload_command"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.upload_command" title="Permalink to this definition">¶</a></dt>
+<dd><p>Saves the command as a bash script file in the remote host, and
+forces to save the exit code of the command execution to the ecodefile</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.node.LinuxNode.use_deb">
+<tt class="descname">use_deb</tt><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.use_deb"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.use_deb" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.node.LinuxNode.use_rpm">
+<tt class="descname">use_rpm</tt><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.use_rpm"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.use_rpm" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.node.LinuxNode.usr_dir">
+<tt class="descname">usr_dir</tt><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.usr_dir"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.usr_dir" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.node.LinuxNode.valid_connection">
+<tt class="descname">valid_connection</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.valid_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.valid_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.node.LinuxNode.wait_pid">
+<tt class="descname">wait_pid</tt><big>(</big><em>home</em>, <em>pidfile='pidfile'</em>, <em>raise_on_error=False</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.wait_pid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.wait_pid" title="Permalink to this definition">¶</a></dt>
+<dd><p>Waits until the pid file for the command is generated, 
+and returns the pid and ppid of the process</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.node.LinuxNode.wait_run">
+<tt class="descname">wait_run</tt><big>(</big><em>pid</em>, <em>ppid</em>, <em>trial=0</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#LinuxNode.wait_run"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.LinuxNode.wait_run" title="Permalink to this definition">¶</a></dt>
+<dd><p>wait for a remote process to finish execution</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="class">
+<dt id="nepi.resources.linux.node.OSType">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.node.</tt><tt class="descname">OSType</tt><a class="reference internal" href="../_modules/nepi/resources/linux/node.html#OSType"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.node.OSType" title="Permalink to this definition">¶</a></dt>
+<dd><p>Supported flavors of Linux OS</p>
+<dl class="attribute">
+<dt id="nepi.resources.linux.node.OSType.DEBIAN">
+<tt class="descname">DEBIAN</tt><em class="property"> = 1</em><a class="headerlink" href="#nepi.resources.linux.node.OSType.DEBIAN" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.node.OSType.FEDORA">
+<tt class="descname">FEDORA</tt><em class="property"> = 4</em><a class="headerlink" href="#nepi.resources.linux.node.OSType.FEDORA" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.node.OSType.FEDORA_12">
+<tt class="descname">FEDORA_12</tt><em class="property"> = 20</em><a class="headerlink" href="#nepi.resources.linux.node.OSType.FEDORA_12" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.node.OSType.FEDORA_14">
+<tt class="descname">FEDORA_14</tt><em class="property"> = 36</em><a class="headerlink" href="#nepi.resources.linux.node.OSType.FEDORA_14" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.node.OSType.FEDORA_8">
+<tt class="descname">FEDORA_8</tt><em class="property"> = 12</em><a class="headerlink" href="#nepi.resources.linux.node.OSType.FEDORA_8" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.node.OSType.UBUNTU">
+<tt class="descname">UBUNTU</tt><em class="property"> = 2</em><a class="headerlink" href="#nepi.resources.linux.node.OSType.UBUNTU" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.nping">
+<span id="nepi-resources-linux-nping-module"></span><h2>nepi.resources.linux.nping module<a class="headerlink" href="#module-nepi.resources.linux.nping" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.nping.LinuxNPing">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.nping.</tt><tt class="descname">LinuxNPing</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/nping.html#LinuxNPing"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.nping.LinuxNPing" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.linux.application.LinuxApplication" title="nepi.resources.linux.application.LinuxApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.application.LinuxApplication</span></tt></a></p>
+<dl class="method">
+<dt id="nepi.resources.linux.nping.LinuxNPing.do_deploy">
+<tt class="descname">do_deploy</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/nping.html#LinuxNPing.do_deploy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.nping.LinuxNPing.do_deploy" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.nping.LinuxNPing.valid_connection">
+<tt class="descname">valid_connection</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/nping.html#LinuxNPing.valid_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.nping.LinuxNPing.valid_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.ping">
+<span id="nepi-resources-linux-ping-module"></span><h2>nepi.resources.linux.ping module<a class="headerlink" href="#module-nepi.resources.linux.ping" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.ping.LinuxPing">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.ping.</tt><tt class="descname">LinuxPing</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ping.html#LinuxPing"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ping.LinuxPing" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.linux.application.LinuxApplication" title="nepi.resources.linux.application.LinuxApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.application.LinuxApplication</span></tt></a></p>
+<dl class="method">
+<dt id="nepi.resources.linux.ping.LinuxPing.do_deploy">
+<tt class="descname">do_deploy</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ping.html#LinuxPing.do_deploy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ping.LinuxPing.do_deploy" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ping.LinuxPing.do_start">
+<tt class="descname">do_start</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ping.html#LinuxPing.do_start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ping.LinuxPing.do_start" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ping.LinuxPing.upload_start_command">
+<tt class="descname">upload_start_command</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ping.html#LinuxPing.upload_start_command"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ping.LinuxPing.upload_start_command" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ping.LinuxPing.valid_connection">
+<tt class="descname">valid_connection</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ping.html#LinuxPing.valid_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ping.LinuxPing.valid_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.route">
+<span id="nepi-resources-linux-route-module"></span><h2>nepi.resources.linux.route module<a class="headerlink" href="#module-nepi.resources.linux.route" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.route.LinuxRoute">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.route.</tt><tt class="descname">LinuxRoute</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/route.html#LinuxRoute"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.route.LinuxRoute" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.linux.application.LinuxApplication" title="nepi.resources.linux.application.LinuxApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.application.LinuxApplication</span></tt></a></p>
+<dl class="attribute">
+<dt id="nepi.resources.linux.route.LinuxRoute.device">
+<tt class="descname">device</tt><a class="reference internal" href="../_modules/nepi/resources/linux/route.html#LinuxRoute.device"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.route.LinuxRoute.device" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.route.LinuxRoute.do_deploy">
+<tt class="descname">do_deploy</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/route.html#LinuxRoute.do_deploy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.route.LinuxRoute.do_deploy" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.route.LinuxRoute.do_start">
+<tt class="descname">do_start</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/route.html#LinuxRoute.do_start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.route.LinuxRoute.do_start" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.route.LinuxRoute.do_stop">
+<tt class="descname">do_stop</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/route.html#LinuxRoute.do_stop"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.route.LinuxRoute.do_stop" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.route.LinuxRoute.node">
+<tt class="descname">node</tt><a class="reference internal" href="../_modules/nepi/resources/linux/route.html#LinuxRoute.node"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.route.LinuxRoute.node" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.route.LinuxRoute.upload_sources">
+<tt class="descname">upload_sources</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/route.html#LinuxRoute.upload_sources"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.route.LinuxRoute.upload_sources" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.route.LinuxRoute.upload_start_command">
+<tt class="descname">upload_start_command</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/route.html#LinuxRoute.upload_start_command"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.route.LinuxRoute.upload_start_command" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.rpmfuncs">
+<span id="nepi-resources-linux-rpmfuncs-module"></span><h2>nepi.resources.linux.rpmfuncs module<a class="headerlink" href="#module-nepi.resources.linux.rpmfuncs" title="Permalink to this headline">¶</a></h2>
+<dl class="function">
+<dt id="nepi.resources.linux.rpmfuncs.install_packages_command">
+<tt class="descclassname">nepi.resources.linux.rpmfuncs.</tt><tt class="descname">install_packages_command</tt><big>(</big><em>os</em>, <em>packages</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/rpmfuncs.html#install_packages_command"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.rpmfuncs.install_packages_command" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="function">
+<dt id="nepi.resources.linux.rpmfuncs.install_rpmfusion_command">
+<tt class="descclassname">nepi.resources.linux.rpmfuncs.</tt><tt class="descname">install_rpmfusion_command</tt><big>(</big><em>os</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/rpmfuncs.html#install_rpmfusion_command"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.rpmfuncs.install_rpmfusion_command" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="function">
+<dt id="nepi.resources.linux.rpmfuncs.remove_packages_command">
+<tt class="descclassname">nepi.resources.linux.rpmfuncs.</tt><tt class="descname">remove_packages_command</tt><big>(</big><em>os</em>, <em>packages</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/rpmfuncs.html#remove_packages_command"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.rpmfuncs.remove_packages_command" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.tap">
+<span id="nepi-resources-linux-tap-module"></span><h2>nepi.resources.linux.tap module<a class="headerlink" href="#module-nepi.resources.linux.tap" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.tap.LinuxTap">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.tap.</tt><tt class="descname">LinuxTap</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/tap.html#LinuxTap"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tap.LinuxTap" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.linux.application.LinuxApplication" title="nepi.resources.linux.application.LinuxApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.application.LinuxApplication</span></tt></a></p>
+<dl class="attribute">
+<dt id="nepi.resources.linux.tap.LinuxTap.IFF_TAP">
+<tt class="descname">IFF_TAP</tt><em class="property"> = 2</em><a class="headerlink" href="#nepi.resources.linux.tap.LinuxTap.IFF_TAP" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.tap.LinuxTap.IFF_TUN">
+<tt class="descname">IFF_TUN</tt><em class="property"> = 1</em><a class="headerlink" href="#nepi.resources.linux.tap.LinuxTap.IFF_TUN" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.tap.LinuxTap.check_status">
+<tt class="descname">check_status</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/tap.html#LinuxTap.check_status"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tap.LinuxTap.check_status" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.tap.LinuxTap.do_deploy">
+<tt class="descname">do_deploy</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/tap.html#LinuxTap.do_deploy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tap.LinuxTap.do_deploy" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.tap.LinuxTap.do_release">
+<tt class="descname">do_release</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/tap.html#LinuxTap.do_release"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tap.LinuxTap.do_release" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.tap.LinuxTap.do_start">
+<tt class="descname">do_start</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/tap.html#LinuxTap.do_start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tap.LinuxTap.do_start" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.tap.LinuxTap.do_stop">
+<tt class="descname">do_stop</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/tap.html#LinuxTap.do_stop"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tap.LinuxTap.do_stop" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.tap.LinuxTap.establish_udp_connection">
+<tt class="descname">establish_udp_connection</tt><big>(</big><em>remote_endpoint</em>, <em>connection_app_home</em>, <em>connection_run_home</em>, <em>port</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/tap.html#LinuxTap.establish_udp_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tap.LinuxTap.establish_udp_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.tap.LinuxTap.gre_connect">
+<tt class="descname">gre_connect</tt><big>(</big><em>remote_endpoint</em>, <em>connection_app_home</em>, <em>connection_run_home</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/tap.html#LinuxTap.gre_connect"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tap.LinuxTap.gre_connect" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.tap.LinuxTap.gre_enabled">
+<tt class="descname">gre_enabled</tt><a class="reference internal" href="../_modules/nepi/resources/linux/tap.html#LinuxTap.gre_enabled"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tap.LinuxTap.gre_enabled" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.tap.LinuxTap.initiate_udp_connection">
+<tt class="descname">initiate_udp_connection</tt><big>(</big><em>remote_endpoint</em>, <em>connection_app_home</em>, <em>connection_run_home</em>, <em>cipher</em>, <em>cipher_key</em>, <em>bwlimit</em>, <em>txqueuelen</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/tap.html#LinuxTap.initiate_udp_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tap.LinuxTap.initiate_udp_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.tap.LinuxTap.node">
+<tt class="descname">node</tt><a class="reference internal" href="../_modules/nepi/resources/linux/tap.html#LinuxTap.node"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tap.LinuxTap.node" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.tap.LinuxTap.sock_name">
+<tt class="descname">sock_name</tt><a class="reference internal" href="../_modules/nepi/resources/linux/tap.html#LinuxTap.sock_name"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tap.LinuxTap.sock_name" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.tap.LinuxTap.state">
+<tt class="descname">state</tt><a class="reference internal" href="../_modules/nepi/resources/linux/tap.html#LinuxTap.state"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tap.LinuxTap.state" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.tap.LinuxTap.terminate_connection">
+<tt class="descname">terminate_connection</tt><big>(</big><em>remote_endpoint</em>, <em>connection_app_home</em>, <em>connection_run_home</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/tap.html#LinuxTap.terminate_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tap.LinuxTap.terminate_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.tap.LinuxTap.udp_connect">
+<tt class="descname">udp_connect</tt><big>(</big><em>remote_endpoint</em>, <em>connection_app_home</em>, <em>connection_run_home</em>, <em>cipher</em>, <em>cipher_key</em>, <em>bwlimit</em>, <em>txqueuelen</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/tap.html#LinuxTap.udp_connect"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tap.LinuxTap.udp_connect" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.tap.LinuxTap.upload_sources">
+<tt class="descname">upload_sources</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/tap.html#LinuxTap.upload_sources"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tap.LinuxTap.upload_sources" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.tap.LinuxTap.upload_start_command">
+<tt class="descname">upload_start_command</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/tap.html#LinuxTap.upload_start_command"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tap.LinuxTap.upload_start_command" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.tap.LinuxTap.valid_connection">
+<tt class="descname">valid_connection</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/tap.html#LinuxTap.valid_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tap.LinuxTap.valid_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.tap.LinuxTap.verify_connection">
+<tt class="descname">verify_connection</tt><big>(</big><em>remote_endpoint</em>, <em>connection_app_home</em>, <em>connection_run_home</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/tap.html#LinuxTap.verify_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tap.LinuxTap.verify_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.tap.LinuxTap.vif_prefix">
+<tt class="descname">vif_prefix</tt><a class="reference internal" href="../_modules/nepi/resources/linux/tap.html#LinuxTap.vif_prefix"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tap.LinuxTap.vif_prefix" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.tap.LinuxTap.vif_type">
+<tt class="descname">vif_type</tt><a class="reference internal" href="../_modules/nepi/resources/linux/tap.html#LinuxTap.vif_type"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tap.LinuxTap.vif_type" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.tap.LinuxTap.vif_type_flag">
+<tt class="descname">vif_type_flag</tt><a class="reference internal" href="../_modules/nepi/resources/linux/tap.html#LinuxTap.vif_type_flag"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tap.LinuxTap.vif_type_flag" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.tap.LinuxTap.wait_file">
+<tt class="descname">wait_file</tt><big>(</big><em>home</em>, <em>filename</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/tap.html#LinuxTap.wait_file"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tap.LinuxTap.wait_file" title="Permalink to this definition">¶</a></dt>
+<dd><p>Waits until file on endpoint is generated</p>
+</dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.tcpdump">
+<span id="nepi-resources-linux-tcpdump-module"></span><h2>nepi.resources.linux.tcpdump module<a class="headerlink" href="#module-nepi.resources.linux.tcpdump" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.tcpdump.LinuxTcpdump">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.tcpdump.</tt><tt class="descname">LinuxTcpdump</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/tcpdump.html#LinuxTcpdump"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tcpdump.LinuxTcpdump" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.linux.application.LinuxApplication" title="nepi.resources.linux.application.LinuxApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.application.LinuxApplication</span></tt></a></p>
+<dl class="method">
+<dt id="nepi.resources.linux.tcpdump.LinuxTcpdump.do_deploy">
+<tt class="descname">do_deploy</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/tcpdump.html#LinuxTcpdump.do_deploy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tcpdump.LinuxTcpdump.do_deploy" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.tcpdump.LinuxTcpdump.valid_connection">
+<tt class="descname">valid_connection</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/tcpdump.html#LinuxTcpdump.valid_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tcpdump.LinuxTcpdump.valid_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.traceroute">
+<span id="nepi-resources-linux-traceroute-module"></span><h2>nepi.resources.linux.traceroute module<a class="headerlink" href="#module-nepi.resources.linux.traceroute" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.traceroute.LinuxTraceroute">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.traceroute.</tt><tt class="descname">LinuxTraceroute</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/traceroute.html#LinuxTraceroute"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.traceroute.LinuxTraceroute" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.linux.application.LinuxApplication" title="nepi.resources.linux.application.LinuxApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.application.LinuxApplication</span></tt></a></p>
+<dl class="method">
+<dt id="nepi.resources.linux.traceroute.LinuxTraceroute.do_deploy">
+<tt class="descname">do_deploy</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/traceroute.html#LinuxTraceroute.do_deploy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.traceroute.LinuxTraceroute.do_deploy" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.traceroute.LinuxTraceroute.do_start">
+<tt class="descname">do_start</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/traceroute.html#LinuxTraceroute.do_start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.traceroute.LinuxTraceroute.do_start" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.traceroute.LinuxTraceroute.upload_start_command">
+<tt class="descname">upload_start_command</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/traceroute.html#LinuxTraceroute.upload_start_command"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.traceroute.LinuxTraceroute.upload_start_command" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.traceroute.LinuxTraceroute.valid_connection">
+<tt class="descname">valid_connection</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/traceroute.html#LinuxTraceroute.valid_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.traceroute.LinuxTraceroute.valid_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.tun">
+<span id="nepi-resources-linux-tun-module"></span><h2>nepi.resources.linux.tun module<a class="headerlink" href="#module-nepi.resources.linux.tun" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.tun.LinuxTun">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.tun.</tt><tt class="descname">LinuxTun</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/tun.html#LinuxTun"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tun.LinuxTun" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.linux.tap.LinuxTap" title="nepi.resources.linux.tap.LinuxTap"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.tap.LinuxTap</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.tunnel">
+<span id="nepi-resources-linux-tunnel-module"></span><h2>nepi.resources.linux.tunnel module<a class="headerlink" href="#module-nepi.resources.linux.tunnel" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.tunnel.LinuxTunnel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.tunnel.</tt><tt class="descname">LinuxTunnel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/tunnel.html#LinuxTunnel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tunnel.LinuxTunnel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.linux.application.LinuxApplication" title="nepi.resources.linux.application.LinuxApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.application.LinuxApplication</span></tt></a></p>
+<dl class="method">
+<dt id="nepi.resources.linux.tunnel.LinuxTunnel.app_home">
+<tt class="descname">app_home</tt><big>(</big><em>endpoint</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/tunnel.html#LinuxTunnel.app_home"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tunnel.LinuxTunnel.app_home" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.tunnel.LinuxTunnel.check_state_connection">
+<tt class="descname">check_state_connection</tt><big>(</big><em>endpoint</em>, <em>remote_endpoint</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/tunnel.html#LinuxTunnel.check_state_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tunnel.LinuxTunnel.check_state_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.tunnel.LinuxTunnel.do_deploy">
+<tt class="descname">do_deploy</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/tunnel.html#LinuxTunnel.do_deploy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tunnel.LinuxTunnel.do_deploy" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.tunnel.LinuxTunnel.do_provision">
+<tt class="descname">do_provision</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/tunnel.html#LinuxTunnel.do_provision"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tunnel.LinuxTunnel.do_provision" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.tunnel.LinuxTunnel.do_start">
+<tt class="descname">do_start</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/tunnel.html#LinuxTunnel.do_start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tunnel.LinuxTunnel.do_start" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.tunnel.LinuxTunnel.do_stop">
+<tt class="descname">do_stop</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/tunnel.html#LinuxTunnel.do_stop"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tunnel.LinuxTunnel.do_stop" title="Permalink to this definition">¶</a></dt>
+<dd><p>Stops application execution</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.tunnel.LinuxTunnel.endpoint1">
+<tt class="descname">endpoint1</tt><a class="reference internal" href="../_modules/nepi/resources/linux/tunnel.html#LinuxTunnel.endpoint1"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tunnel.LinuxTunnel.endpoint1" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.tunnel.LinuxTunnel.endpoint2">
+<tt class="descname">endpoint2</tt><a class="reference internal" href="../_modules/nepi/resources/linux/tunnel.html#LinuxTunnel.endpoint2"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tunnel.LinuxTunnel.endpoint2" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.tunnel.LinuxTunnel.endpoint_mkdir">
+<tt class="descname">endpoint_mkdir</tt><big>(</big><em>endpoint</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/tunnel.html#LinuxTunnel.endpoint_mkdir"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tunnel.LinuxTunnel.endpoint_mkdir" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.tunnel.LinuxTunnel.establish_connection">
+<tt class="descname">establish_connection</tt><big>(</big><em>endpoint</em>, <em>remote_endpoint</em>, <em>data</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/tunnel.html#LinuxTunnel.establish_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tunnel.LinuxTunnel.establish_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.tunnel.LinuxTunnel.get_endpoints">
+<tt class="descname">get_endpoints</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/tunnel.html#LinuxTunnel.get_endpoints"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tunnel.LinuxTunnel.get_endpoints" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the list of RM that are endpoints to the tunnel</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.tunnel.LinuxTunnel.initiate_connection">
+<tt class="descname">initiate_connection</tt><big>(</big><em>endpoint</em>, <em>remote_endpoint</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/tunnel.html#LinuxTunnel.initiate_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tunnel.LinuxTunnel.initiate_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.tunnel.LinuxTunnel.log_message">
+<tt class="descname">log_message</tt><big>(</big><em>msg</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/tunnel.html#LinuxTunnel.log_message"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tunnel.LinuxTunnel.log_message" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.tunnel.LinuxTunnel.run_home">
+<tt class="descname">run_home</tt><big>(</big><em>endpoint</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/tunnel.html#LinuxTunnel.run_home"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tunnel.LinuxTunnel.run_home" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.tunnel.LinuxTunnel.state">
+<tt class="descname">state</tt><a class="reference internal" href="../_modules/nepi/resources/linux/tunnel.html#LinuxTunnel.state"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tunnel.LinuxTunnel.state" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the state of the application</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.tunnel.LinuxTunnel.terminate_connection">
+<tt class="descname">terminate_connection</tt><big>(</big><em>endpoint</em>, <em>remote_endpoint</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/tunnel.html#LinuxTunnel.terminate_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tunnel.LinuxTunnel.terminate_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.tunnel.LinuxTunnel.valid_connection">
+<tt class="descname">valid_connection</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/tunnel.html#LinuxTunnel.valid_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tunnel.LinuxTunnel.valid_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.tunnel.LinuxTunnel.verify_connection">
+<tt class="descname">verify_connection</tt><big>(</big><em>endpoint</em>, <em>remote_endpoint</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/tunnel.html#LinuxTunnel.verify_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.tunnel.LinuxTunnel.verify_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.udptest">
+<span id="nepi-resources-linux-udptest-module"></span><h2>nepi.resources.linux.udptest module<a class="headerlink" href="#module-nepi.resources.linux.udptest" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.udptest.LinuxUdpTest">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.udptest.</tt><tt class="descname">LinuxUdpTest</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/udptest.html#LinuxUdpTest"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.udptest.LinuxUdpTest" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.linux.application.LinuxApplication" title="nepi.resources.linux.application.LinuxApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.application.LinuxApplication</span></tt></a></p>
+<p>Uses the hpcbench udptest tool to gather UDP measurements.
+Measurements require two ends, a server and a client RM.</p>
+<p><a class="reference external" href="http://hpcbench.sourceforge.net/">http://hpcbench.sourceforge.net/</a></p>
+<dl class="method">
+<dt id="nepi.resources.linux.udptest.LinuxUdpTest.do_deploy">
+<tt class="descname">do_deploy</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/udptest.html#LinuxUdpTest.do_deploy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.udptest.LinuxUdpTest.do_deploy" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.udptest.LinuxUdpTest.do_start">
+<tt class="descname">do_start</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/udptest.html#LinuxUdpTest.do_start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.udptest.LinuxUdpTest.do_start" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.udptest.LinuxUdpTest.upload_start_command">
+<tt class="descname">upload_start_command</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/udptest.html#LinuxUdpTest.upload_start_command"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.udptest.LinuxUdpTest.upload_start_command" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.udptest.LinuxUdpTest.valid_connection">
+<tt class="descname">valid_connection</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/udptest.html#LinuxUdpTest.valid_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.udptest.LinuxUdpTest.valid_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.udptunnel">
+<span id="nepi-resources-linux-udptunnel-module"></span><h2>nepi.resources.linux.udptunnel module<a class="headerlink" href="#module-nepi.resources.linux.udptunnel" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.udptunnel.LinuxUdpTunnel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.udptunnel.</tt><tt class="descname">LinuxUdpTunnel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/udptunnel.html#LinuxUdpTunnel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.udptunnel.LinuxUdpTunnel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.linux.tunnel.LinuxTunnel" title="nepi.resources.linux.tunnel.LinuxTunnel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.tunnel.LinuxTunnel</span></tt></a></p>
+<dl class="method">
+<dt id="nepi.resources.linux.udptunnel.LinuxUdpTunnel.check_state_connection">
+<tt class="descname">check_state_connection</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/udptunnel.html#LinuxUdpTunnel.check_state_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.udptunnel.LinuxUdpTunnel.check_state_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.udptunnel.LinuxUdpTunnel.establish_connection">
+<tt class="descname">establish_connection</tt><big>(</big><em>endpoint</em>, <em>remote_endpoint</em>, <em>port</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/udptunnel.html#LinuxUdpTunnel.establish_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.udptunnel.LinuxUdpTunnel.establish_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.udptunnel.LinuxUdpTunnel.get_endpoints">
+<tt class="descname">get_endpoints</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/udptunnel.html#LinuxUdpTunnel.get_endpoints"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.udptunnel.LinuxUdpTunnel.get_endpoints" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the list of RM that are endpoints to the tunnel</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.udptunnel.LinuxUdpTunnel.initiate_connection">
+<tt class="descname">initiate_connection</tt><big>(</big><em>endpoint</em>, <em>remote_endpoint</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/udptunnel.html#LinuxUdpTunnel.initiate_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.udptunnel.LinuxUdpTunnel.initiate_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.udptunnel.LinuxUdpTunnel.log_message">
+<tt class="descname">log_message</tt><big>(</big><em>msg</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/udptunnel.html#LinuxUdpTunnel.log_message"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.udptunnel.LinuxUdpTunnel.log_message" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.udptunnel.LinuxUdpTunnel.terminate_connection">
+<tt class="descname">terminate_connection</tt><big>(</big><em>endpoint</em>, <em>remote_endpoint</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/udptunnel.html#LinuxUdpTunnel.terminate_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.udptunnel.LinuxUdpTunnel.terminate_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.udptunnel.LinuxUdpTunnel.verify_connection">
+<tt class="descname">verify_connection</tt><big>(</big><em>endpoint</em>, <em>remote_endpoint</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/udptunnel.html#LinuxUdpTunnel.verify_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.udptunnel.LinuxUdpTunnel.verify_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux">
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-nepi.resources.linux" title="Permalink to this headline">¶</a></h2>
+</div>
+</div>
+
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_layout/nepi.resources.linux.netns.html b/doc/sphinx/_build/html/_layout/nepi.resources.linux.netns.html
new file mode 100644 (file)
index 0000000..1a34b53
--- /dev/null
@@ -0,0 +1,285 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.netns package &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../_static/jquery.js"></script>
+    <script type="text/javascript" src="../_static/underscore.js"></script>
+    <script type="text/javascript" src="../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+  <h3><a href="../index.html">Table Of Contents</a></h3>
+  <ul>
+<li><a class="reference internal" href="#">nepi.resources.linux.netns package</a><ul>
+<li><a class="reference internal" href="#submodules">Submodules</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.netns.netnsclient">nepi.resources.linux.netns.netnsclient module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.netns.netnsemulation">nepi.resources.linux.netns.netnsemulation module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.netns">Module contents</a></li>
+</ul>
+</li>
+</ul>
+
+  <h3>This Page</h3>
+  <ul class="this-page-menu">
+    <li><a href="../_sources/_layout/nepi.resources.linux.netns.txt"
+           rel="nofollow">Show Source</a></li>
+  </ul>
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <div class="section" id="nepi-resources-linux-netns-package">
+<h1>nepi.resources.linux.netns package<a class="headerlink" href="#nepi-resources-linux-netns-package" title="Permalink to this headline">¶</a></h1>
+<div class="section" id="submodules">
+<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline">¶</a></h2>
+</div>
+<div class="section" id="module-nepi.resources.linux.netns.netnsclient">
+<span id="nepi-resources-linux-netns-netnsclient-module"></span><h2>nepi.resources.linux.netns.netnsclient module<a class="headerlink" href="#module-nepi.resources.linux.netns.netnsclient" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.netns.netnsclient.LinuxNetNSClient">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.netns.netnsclient.</tt><tt class="descname">LinuxNetNSClient</tt><big>(</big><em>emulation</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/netns/netnsclient.html#LinuxNetNSClient"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.netns.netnsclient.LinuxNetNSClient" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.netns.html#nepi.resources.netns.netnsclient.NetNSClient" title="nepi.resources.netns.netnsclient.NetNSClient"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.netns.netnsclient.NetNSClient</span></tt></a></p>
+<dl class="method">
+<dt id="nepi.resources.linux.netns.netnsclient.LinuxNetNSClient.create">
+<tt class="descname">create</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/netns/netnsclient.html#LinuxNetNSClient.create"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.netns.netnsclient.LinuxNetNSClient.create" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.netns.netnsclient.LinuxNetNSClient.emulation">
+<tt class="descname">emulation</tt><a class="reference internal" href="../_modules/nepi/resources/linux/netns/netnsclient.html#LinuxNetNSClient.emulation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.netns.netnsclient.LinuxNetNSClient.emulation" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.netns.netnsclient.LinuxNetNSClient.flush">
+<tt class="descname">flush</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/netns/netnsclient.html#LinuxNetNSClient.flush"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.netns.netnsclient.LinuxNetNSClient.flush" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.netns.netnsclient.LinuxNetNSClient.get">
+<tt class="descname">get</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/netns/netnsclient.html#LinuxNetNSClient.get"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.netns.netnsclient.LinuxNetNSClient.get" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.netns.netnsclient.LinuxNetNSClient.invoke">
+<tt class="descname">invoke</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/netns/netnsclient.html#LinuxNetNSClient.invoke"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.netns.netnsclient.LinuxNetNSClient.invoke" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.netns.netnsclient.LinuxNetNSClient.send_msg">
+<tt class="descname">send_msg</tt><big>(</big><em>msg_type</em>, <em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/netns/netnsclient.html#LinuxNetNSClient.send_msg"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.netns.netnsclient.LinuxNetNSClient.send_msg" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.netns.netnsclient.LinuxNetNSClient.set">
+<tt class="descname">set</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/netns/netnsclient.html#LinuxNetNSClient.set"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.netns.netnsclient.LinuxNetNSClient.set" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.netns.netnsclient.LinuxNetNSClient.shutdown">
+<tt class="descname">shutdown</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/netns/netnsclient.html#LinuxNetNSClient.shutdown"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.netns.netnsclient.LinuxNetNSClient.shutdown" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.netns.netnsemulation">
+<span id="nepi-resources-linux-netns-netnsemulation-module"></span><h2>nepi.resources.linux.netns.netnsemulation module<a class="headerlink" href="#module-nepi.resources.linux.netns.netnsemulation" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.netns.netnsemulation.</tt><tt class="descname">LinuxNetNSEmulation</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/netns/netnsemulation.html#LinuxNetNSEmulation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication" title="nepi.resources.linux.application.LinuxApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.application.LinuxApplication</span></tt></a>, <a class="reference internal" href="nepi.resources.netns.html#nepi.resources.netns.netnsemulation.NetNSEmulation" title="nepi.resources.netns.netnsemulation.NetNSEmulation"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.netns.netnsemulation.NetNSEmulation</span></tt></a></p>
+<dl class="method">
+<dt id="nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.clone_command">
+<tt class="descname">clone_command</tt><big>(</big><em>name</em>, <em>repo</em>, <em>src</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/netns/netnsemulation.html#LinuxNetNSEmulation.clone_command"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.clone_command" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.do_deploy">
+<tt class="descname">do_deploy</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/netns/netnsemulation.html#LinuxNetNSEmulation.do_deploy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.do_deploy" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.do_release">
+<tt class="descname">do_release</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/netns/netnsemulation.html#LinuxNetNSEmulation.do_release"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.do_release" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.do_start">
+<tt class="descname">do_start</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/netns/netnsemulation.html#LinuxNetNSEmulation.do_start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.do_start" title="Permalink to this definition">¶</a></dt>
+<dd><p>Starts  execution execution</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.do_stop">
+<tt class="descname">do_stop</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/netns/netnsemulation.html#LinuxNetNSEmulation.do_stop"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.do_stop" title="Permalink to this definition">¶</a></dt>
+<dd><p>Stops simulation execution</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.netns_repo">
+<tt class="descname">netns_repo</tt><a class="reference internal" href="../_modules/nepi/resources/linux/netns/netnsemulation.html#LinuxNetNSEmulation.netns_repo"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.netns_repo" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.netns_src">
+<tt class="descname">netns_src</tt><a class="reference internal" href="../_modules/nepi/resources/linux/netns/netnsemulation.html#LinuxNetNSEmulation.netns_src"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.netns_src" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.netns_version">
+<tt class="descname">netns_version</tt><a class="reference internal" href="../_modules/nepi/resources/linux/netns/netnsemulation.html#LinuxNetNSEmulation.netns_version"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.netns_version" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.python_passfd_repo">
+<tt class="descname">python_passfd_repo</tt><a class="reference internal" href="../_modules/nepi/resources/linux/netns/netnsemulation.html#LinuxNetNSEmulation.python_passfd_repo"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.python_passfd_repo" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.python_passfd_src">
+<tt class="descname">python_passfd_src</tt><a class="reference internal" href="../_modules/nepi/resources/linux/netns/netnsemulation.html#LinuxNetNSEmulation.python_passfd_src"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.python_passfd_src" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.python_passfd_version">
+<tt class="descname">python_passfd_version</tt><a class="reference internal" href="../_modules/nepi/resources/linux/netns/netnsemulation.html#LinuxNetNSEmulation.python_passfd_version"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.python_passfd_version" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.python_unshare_repo">
+<tt class="descname">python_unshare_repo</tt><a class="reference internal" href="../_modules/nepi/resources/linux/netns/netnsemulation.html#LinuxNetNSEmulation.python_unshare_repo"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.python_unshare_repo" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.python_unshare_src">
+<tt class="descname">python_unshare_src</tt><a class="reference internal" href="../_modules/nepi/resources/linux/netns/netnsemulation.html#LinuxNetNSEmulation.python_unshare_src"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.python_unshare_src" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.python_unshare_version">
+<tt class="descname">python_unshare_version</tt><a class="reference internal" href="../_modules/nepi/resources/linux/netns/netnsemulation.html#LinuxNetNSEmulation.python_unshare_version"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.python_unshare_version" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.remote_socket">
+<tt class="descname">remote_socket</tt><a class="reference internal" href="../_modules/nepi/resources/linux/netns/netnsemulation.html#LinuxNetNSEmulation.remote_socket"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.remote_socket" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.replace_paths">
+<tt class="descname">replace_paths</tt><big>(</big><em>command</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/netns/netnsemulation.html#LinuxNetNSEmulation.replace_paths"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.replace_paths" title="Permalink to this definition">¶</a></dt>
+<dd><p>Replace all special path tags with shell-escaped actual paths.</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.socket_name">
+<tt class="descname">socket_name</tt><a class="reference internal" href="../_modules/nepi/resources/linux/netns/netnsemulation.html#LinuxNetNSEmulation.socket_name"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.socket_name" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.upload_extra_sources">
+<tt class="descname">upload_extra_sources</tt><big>(</big><em>sources=None</em>, <em>src_dir=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/netns/netnsemulation.html#LinuxNetNSEmulation.upload_extra_sources"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.upload_extra_sources" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.upload_sources">
+<tt class="descname">upload_sources</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/netns/netnsemulation.html#LinuxNetNSEmulation.upload_sources"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.upload_sources" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.upload_start_command">
+<tt class="descname">upload_start_command</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/netns/netnsemulation.html#LinuxNetNSEmulation.upload_start_command"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.upload_start_command" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.valid_connection">
+<tt class="descname">valid_connection</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/netns/netnsemulation.html#LinuxNetNSEmulation.valid_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.valid_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.wait_remote_socket">
+<tt class="descname">wait_remote_socket</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/netns/netnsemulation.html#LinuxNetNSEmulation.wait_remote_socket"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.wait_remote_socket" title="Permalink to this definition">¶</a></dt>
+<dd><p>Waits until the remote socket is created</p>
+</dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.netns">
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-nepi.resources.linux.netns" title="Permalink to this headline">¶</a></h2>
+</div>
+</div>
+
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_layout/nepi.resources.linux.ns3.ccn.html b/doc/sphinx/_build/html/_layout/nepi.resources.linux.ns3.ccn.html
new file mode 100644 (file)
index 0000000..5098df2
--- /dev/null
@@ -0,0 +1,186 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.ns3.ccn package &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../_static/jquery.js"></script>
+    <script type="text/javascript" src="../_static/underscore.js"></script>
+    <script type="text/javascript" src="../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+  <h3><a href="../index.html">Table Of Contents</a></h3>
+  <ul>
+<li><a class="reference internal" href="#">nepi.resources.linux.ns3.ccn package</a><ul>
+<li><a class="reference internal" href="#submodules">Submodules</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.ns3.ccn.ns3ccncatdceapplication">nepi.resources.linux.ns3.ccn.ns3ccncatdceapplication module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.ns3.ccn.ns3ccndceapplication">nepi.resources.linux.ns3.ccn.ns3ccndceapplication module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.ns3.ccn.ns3ccnddceapplication">nepi.resources.linux.ns3.ccn.ns3ccnddceapplication module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.ns3.ccn.ns3ccnpeekdceapplication">nepi.resources.linux.ns3.ccn.ns3ccnpeekdceapplication module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.ns3.ccn.ns3ccnpokedceapplication">nepi.resources.linux.ns3.ccn.ns3ccnpokedceapplication module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.ns3.ccn.ns3ccnrdceapplication">nepi.resources.linux.ns3.ccn.ns3ccnrdceapplication module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.ns3.ccn.ns3fibentrydceapplication">nepi.resources.linux.ns3.ccn.ns3fibentrydceapplication module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.ns3.ccn">Module contents</a></li>
+</ul>
+</li>
+</ul>
+
+  <h3>This Page</h3>
+  <ul class="this-page-menu">
+    <li><a href="../_sources/_layout/nepi.resources.linux.ns3.ccn.txt"
+           rel="nofollow">Show Source</a></li>
+  </ul>
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <div class="section" id="nepi-resources-linux-ns3-ccn-package">
+<h1>nepi.resources.linux.ns3.ccn package<a class="headerlink" href="#nepi-resources-linux-ns3-ccn-package" title="Permalink to this headline">¶</a></h1>
+<div class="section" id="submodules">
+<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline">¶</a></h2>
+</div>
+<div class="section" id="module-nepi.resources.linux.ns3.ccn.ns3ccncatdceapplication">
+<span id="nepi-resources-linux-ns3-ccn-ns3ccncatdceapplication-module"></span><h2>nepi.resources.linux.ns3.ccn.ns3ccncatdceapplication module<a class="headerlink" href="#module-nepi.resources.linux.ns3.ccn.ns3ccncatdceapplication" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.ns3.ccn.ns3ccncatdceapplication.LinuxNS3DceCCNCat">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.ns3.ccn.ns3ccncatdceapplication.</tt><tt class="descname">LinuxNS3DceCCNCat</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ccn/ns3ccncatdceapplication.html#LinuxNS3DceCCNCat"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ccn.ns3ccncatdceapplication.LinuxNS3DceCCNCat" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.linux.ns3.ccn.ns3ccndceapplication.LinuxNS3CCNDceApplication" title="nepi.resources.linux.ns3.ccn.ns3ccndceapplication.LinuxNS3CCNDceApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.ns3.ccn.ns3ccndceapplication.LinuxNS3CCNDceApplication</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.ns3.ccn.ns3ccndceapplication">
+<span id="nepi-resources-linux-ns3-ccn-ns3ccndceapplication-module"></span><h2>nepi.resources.linux.ns3.ccn.ns3ccndceapplication module<a class="headerlink" href="#module-nepi.resources.linux.ns3.ccn.ns3ccndceapplication" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.ns3.ccn.ns3ccndceapplication.LinuxNS3CCNDceApplication">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.ns3.ccn.ns3ccndceapplication.</tt><tt class="descname">LinuxNS3CCNDceApplication</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ccn/ns3ccndceapplication.html#LinuxNS3CCNDceApplication"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ccn.ns3ccndceapplication.LinuxNS3CCNDceApplication" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3ccndceapplication.NS3BaseCCNDceApplication" title="nepi.resources.ns3.ns3ccndceapplication.NS3BaseCCNDceApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3ccndceapplication.NS3BaseCCNDceApplication</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.ns3.ccn.ns3ccnddceapplication">
+<span id="nepi-resources-linux-ns3-ccn-ns3ccnddceapplication-module"></span><h2>nepi.resources.linux.ns3.ccn.ns3ccnddceapplication module<a class="headerlink" href="#module-nepi.resources.linux.ns3.ccn.ns3ccnddceapplication" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.ns3.ccn.ns3ccnddceapplication.LinuxNS3DceCCND">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.ns3.ccn.ns3ccnddceapplication.</tt><tt class="descname">LinuxNS3DceCCND</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ccn/ns3ccnddceapplication.html#LinuxNS3DceCCND"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ccn.ns3ccnddceapplication.LinuxNS3DceCCND" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.linux.ns3.ccn.ns3ccndceapplication.LinuxNS3CCNDceApplication" title="nepi.resources.linux.ns3.ccn.ns3ccndceapplication.LinuxNS3CCNDceApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.ns3.ccn.ns3ccndceapplication.LinuxNS3CCNDceApplication</span></tt></a></p>
+<dl class="attribute">
+<dt id="nepi.resources.linux.ns3.ccn.ns3ccnddceapplication.LinuxNS3DceCCND.version">
+<tt class="descname">version</tt><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ccn/ns3ccnddceapplication.html#LinuxNS3DceCCND.version"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ccn.ns3ccnddceapplication.LinuxNS3DceCCND.version" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.ns3.ccn.ns3ccnpeekdceapplication">
+<span id="nepi-resources-linux-ns3-ccn-ns3ccnpeekdceapplication-module"></span><h2>nepi.resources.linux.ns3.ccn.ns3ccnpeekdceapplication module<a class="headerlink" href="#module-nepi.resources.linux.ns3.ccn.ns3ccnpeekdceapplication" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.ns3.ccn.ns3ccnpeekdceapplication.LinuxNS3DceCCNPeek">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.ns3.ccn.ns3ccnpeekdceapplication.</tt><tt class="descname">LinuxNS3DceCCNPeek</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ccn/ns3ccnpeekdceapplication.html#LinuxNS3DceCCNPeek"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ccn.ns3ccnpeekdceapplication.LinuxNS3DceCCNPeek" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.linux.ns3.ccn.ns3ccndceapplication.LinuxNS3CCNDceApplication" title="nepi.resources.linux.ns3.ccn.ns3ccndceapplication.LinuxNS3CCNDceApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.ns3.ccn.ns3ccndceapplication.LinuxNS3CCNDceApplication</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.ns3.ccn.ns3ccnpokedceapplication">
+<span id="nepi-resources-linux-ns3-ccn-ns3ccnpokedceapplication-module"></span><h2>nepi.resources.linux.ns3.ccn.ns3ccnpokedceapplication module<a class="headerlink" href="#module-nepi.resources.linux.ns3.ccn.ns3ccnpokedceapplication" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.ns3.ccn.ns3ccnpokedceapplication.LinuxNS3DceCCNPoke">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.ns3.ccn.ns3ccnpokedceapplication.</tt><tt class="descname">LinuxNS3DceCCNPoke</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ccn/ns3ccnpokedceapplication.html#LinuxNS3DceCCNPoke"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ccn.ns3ccnpokedceapplication.LinuxNS3DceCCNPoke" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.linux.ns3.ccn.ns3ccndceapplication.LinuxNS3CCNDceApplication" title="nepi.resources.linux.ns3.ccn.ns3ccndceapplication.LinuxNS3CCNDceApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.ns3.ccn.ns3ccndceapplication.LinuxNS3CCNDceApplication</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.ns3.ccn.ns3ccnrdceapplication">
+<span id="nepi-resources-linux-ns3-ccn-ns3ccnrdceapplication-module"></span><h2>nepi.resources.linux.ns3.ccn.ns3ccnrdceapplication module<a class="headerlink" href="#module-nepi.resources.linux.ns3.ccn.ns3ccnrdceapplication" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.ns3.ccn.ns3ccnrdceapplication.LinuxNS3DceCCNR">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.ns3.ccn.ns3ccnrdceapplication.</tt><tt class="descname">LinuxNS3DceCCNR</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ccn/ns3ccnrdceapplication.html#LinuxNS3DceCCNR"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ccn.ns3ccnrdceapplication.LinuxNS3DceCCNR" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.linux.ns3.ccn.ns3ccndceapplication.LinuxNS3CCNDceApplication" title="nepi.resources.linux.ns3.ccn.ns3ccndceapplication.LinuxNS3CCNDceApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.ns3.ccn.ns3ccndceapplication.LinuxNS3CCNDceApplication</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.ns3.ccn.ns3fibentrydceapplication">
+<span id="nepi-resources-linux-ns3-ccn-ns3fibentrydceapplication-module"></span><h2>nepi.resources.linux.ns3.ccn.ns3fibentrydceapplication module<a class="headerlink" href="#module-nepi.resources.linux.ns3.ccn.ns3fibentrydceapplication" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.ns3.ccn.ns3fibentrydceapplication.LinuxNS3DceFIBEntry">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.ns3.ccn.ns3fibentrydceapplication.</tt><tt class="descname">LinuxNS3DceFIBEntry</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ccn/ns3fibentrydceapplication.html#LinuxNS3DceFIBEntry"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ccn.ns3fibentrydceapplication.LinuxNS3DceFIBEntry" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.linux.ns3.ccn.ns3ccndceapplication.LinuxNS3CCNDceApplication" title="nepi.resources.linux.ns3.ccn.ns3ccndceapplication.LinuxNS3CCNDceApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.ns3.ccn.ns3ccndceapplication.LinuxNS3CCNDceApplication</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.ns3.ccn">
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-nepi.resources.linux.ns3.ccn" title="Permalink to this headline">¶</a></h2>
+</div>
+</div>
+
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_layout/nepi.resources.linux.ns3.html b/doc/sphinx/_build/html/_layout/nepi.resources.linux.ns3.html
new file mode 100644 (file)
index 0000000..9f1cc83
--- /dev/null
@@ -0,0 +1,536 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.ns3 package &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../_static/jquery.js"></script>
+    <script type="text/javascript" src="../_static/underscore.js"></script>
+    <script type="text/javascript" src="../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+  <h3><a href="../index.html">Table Of Contents</a></h3>
+  <ul>
+<li><a class="reference internal" href="#">nepi.resources.linux.ns3 package</a><ul>
+<li><a class="reference internal" href="#subpackages">Subpackages</a></li>
+<li><a class="reference internal" href="#submodules">Submodules</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.ns3.fdudptunnel">nepi.resources.linux.ns3.fdudptunnel module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.ns3.ns3client">nepi.resources.linux.ns3.ns3client module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.ns3.ns3dceapplication">nepi.resources.linux.ns3.ns3dceapplication module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.ns3.ns3pingdceapplication">nepi.resources.linux.ns3.ns3pingdceapplication module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.ns3.ns3simulation">nepi.resources.linux.ns3.ns3simulation module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.ns3.tuntapfdlink">nepi.resources.linux.ns3.tuntapfdlink module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.linux.ns3">Module contents</a></li>
+</ul>
+</li>
+</ul>
+
+  <h3>This Page</h3>
+  <ul class="this-page-menu">
+    <li><a href="../_sources/_layout/nepi.resources.linux.ns3.txt"
+           rel="nofollow">Show Source</a></li>
+  </ul>
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <div class="section" id="nepi-resources-linux-ns3-package">
+<h1>nepi.resources.linux.ns3 package<a class="headerlink" href="#nepi-resources-linux-ns3-package" title="Permalink to this headline">¶</a></h1>
+<div class="section" id="subpackages">
+<h2>Subpackages<a class="headerlink" href="#subpackages" title="Permalink to this headline">¶</a></h2>
+<div class="toctree-wrapper compound">
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="nepi.resources.linux.ns3.ccn.html">nepi.resources.linux.ns3.ccn package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.ns3.ccn.html#submodules">Submodules</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3ccncatdceapplication">nepi.resources.linux.ns3.ccn.ns3ccncatdceapplication module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3ccndceapplication">nepi.resources.linux.ns3.ccn.ns3ccndceapplication module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3ccnddceapplication">nepi.resources.linux.ns3.ccn.ns3ccnddceapplication module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3ccnpeekdceapplication">nepi.resources.linux.ns3.ccn.ns3ccnpeekdceapplication module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3ccnpokedceapplication">nepi.resources.linux.ns3.ccn.ns3ccnpokedceapplication module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3ccnrdceapplication">nepi.resources.linux.ns3.ccn.ns3ccnrdceapplication module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3fibentrydceapplication">nepi.resources.linux.ns3.ccn.ns3fibentrydceapplication module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn">Module contents</a></li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<div class="section" id="submodules">
+<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline">¶</a></h2>
+</div>
+<div class="section" id="module-nepi.resources.linux.ns3.fdudptunnel">
+<span id="nepi-resources-linux-ns3-fdudptunnel-module"></span><h2>nepi.resources.linux.ns3.fdudptunnel module<a class="headerlink" href="#module-nepi.resources.linux.ns3.fdudptunnel" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.ns3.fdudptunnel.</tt><tt class="descname">LinuxNs3FdUdpTunnel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/fdudptunnel.html#LinuxNs3FdUdpTunnel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.linux.html#nepi.resources.linux.udptunnel.LinuxUdpTunnel" title="nepi.resources.linux.udptunnel.LinuxUdpTunnel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.udptunnel.LinuxUdpTunnel</span></tt></a></p>
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.app_home">
+<tt class="descname">app_home</tt><big>(</big><em>endpoint</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/fdudptunnel.html#LinuxNs3FdUdpTunnel.app_home"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.app_home" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.check_state_connection">
+<tt class="descname">check_state_connection</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/fdudptunnel.html#LinuxNs3FdUdpTunnel.check_state_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.check_state_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.endpoint1">
+<tt class="descname">endpoint1</tt><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/fdudptunnel.html#LinuxNs3FdUdpTunnel.endpoint1"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.endpoint1" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.endpoint2">
+<tt class="descname">endpoint2</tt><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/fdudptunnel.html#LinuxNs3FdUdpTunnel.endpoint2"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.endpoint2" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.endpoint_mkdir">
+<tt class="descname">endpoint_mkdir</tt><big>(</big><em>endpoint</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/fdudptunnel.html#LinuxNs3FdUdpTunnel.endpoint_mkdir"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.endpoint_mkdir" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.endpoint_node">
+<tt class="descname">endpoint_node</tt><big>(</big><em>endpoint</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/fdudptunnel.html#LinuxNs3FdUdpTunnel.endpoint_node"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.endpoint_node" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.establish">
+<tt class="descname">establish</tt><big>(</big><em>endpoint</em>, <em>remote_endpoint</em>, <em>port</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/fdudptunnel.html#LinuxNs3FdUdpTunnel.establish"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.establish" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.establish_connection">
+<tt class="descname">establish_connection</tt><big>(</big><em>endpoint</em>, <em>remote_endpoint</em>, <em>port</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/fdudptunnel.html#LinuxNs3FdUdpTunnel.establish_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.establish_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.get_endpoints">
+<tt class="descname">get_endpoints</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/fdudptunnel.html#LinuxNs3FdUdpTunnel.get_endpoints"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.get_endpoints" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the list of RM that are endpoints to the tunnel</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.initiate">
+<tt class="descname">initiate</tt><big>(</big><em>endpoint</em>, <em>remote_endpoint</em>, <em>address</em>, <em>cipher</em>, <em>cipher_key</em>, <em>bwlimit</em>, <em>txqueuelen</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/fdudptunnel.html#LinuxNs3FdUdpTunnel.initiate"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.initiate" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.initiate_connection">
+<tt class="descname">initiate_connection</tt><big>(</big><em>endpoint</em>, <em>remote_endpoint</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/fdudptunnel.html#LinuxNs3FdUdpTunnel.initiate_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.initiate_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.log_message">
+<tt class="descname">log_message</tt><big>(</big><em>msg</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/fdudptunnel.html#LinuxNs3FdUdpTunnel.log_message"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.log_message" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.node1">
+<tt class="descname">node1</tt><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/fdudptunnel.html#LinuxNs3FdUdpTunnel.node1"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.node1" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.node2">
+<tt class="descname">node2</tt><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/fdudptunnel.html#LinuxNs3FdUdpTunnel.node2"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.node2" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.pi">
+<tt class="descname">pi</tt><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/fdudptunnel.html#LinuxNs3FdUdpTunnel.pi"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.pi" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.run_home">
+<tt class="descname">run_home</tt><big>(</big><em>endpoint</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/fdudptunnel.html#LinuxNs3FdUdpTunnel.run_home"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.run_home" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.terminate_connection">
+<tt class="descname">terminate_connection</tt><big>(</big><em>endpoint</em>, <em>remote_endpoint</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/fdudptunnel.html#LinuxNs3FdUdpTunnel.terminate_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.terminate_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.upload_sources">
+<tt class="descname">upload_sources</tt><big>(</big><em>endpoint</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/fdudptunnel.html#LinuxNs3FdUdpTunnel.upload_sources"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.upload_sources" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.verify">
+<tt class="descname">verify</tt><big>(</big><em>endpoint</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/fdudptunnel.html#LinuxNs3FdUdpTunnel.verify"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.verify" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.verify_connection">
+<tt class="descname">verify_connection</tt><big>(</big><em>endpoint</em>, <em>remote_endpoint</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/fdudptunnel.html#LinuxNs3FdUdpTunnel.verify_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.verify_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.wait_file">
+<tt class="descname">wait_file</tt><big>(</big><em>endpoint</em>, <em>filename</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/fdudptunnel.html#LinuxNs3FdUdpTunnel.wait_file"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.wait_file" title="Permalink to this definition">¶</a></dt>
+<dd><p>Waits until file on endpoint is generated</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.wait_local_port">
+<tt class="descname">wait_local_port</tt><big>(</big><em>endpoint</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/fdudptunnel.html#LinuxNs3FdUdpTunnel.wait_local_port"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.wait_local_port" title="Permalink to this definition">¶</a></dt>
+<dd><p>Waits until the local_port file for the endpoint is generated, 
+and returns the port number</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.wait_result">
+<tt class="descname">wait_result</tt><big>(</big><em>endpoint</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/fdudptunnel.html#LinuxNs3FdUdpTunnel.wait_result"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.wait_result" title="Permalink to this definition">¶</a></dt>
+<dd><p>Waits until the return code file for the endpoint is generated</p>
+</dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.ns3.ns3client">
+<span id="nepi-resources-linux-ns3-ns3client-module"></span><h2>nepi.resources.linux.ns3.ns3client module<a class="headerlink" href="#module-nepi.resources.linux.ns3.ns3client" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.ns3.ns3client.LinuxNS3Client">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.ns3.ns3client.</tt><tt class="descname">LinuxNS3Client</tt><big>(</big><em>simulation</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ns3client.html#LinuxNS3Client"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ns3client.LinuxNS3Client" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3client.NS3Client" title="nepi.resources.ns3.ns3client.NS3Client"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3client.NS3Client</span></tt></a></p>
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.ns3client.LinuxNS3Client.create">
+<tt class="descname">create</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ns3client.html#LinuxNS3Client.create"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ns3client.LinuxNS3Client.create" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.ns3client.LinuxNS3Client.factory">
+<tt class="descname">factory</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ns3client.html#LinuxNS3Client.factory"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ns3client.LinuxNS3Client.factory" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.ns3client.LinuxNS3Client.flush">
+<tt class="descname">flush</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ns3client.html#LinuxNS3Client.flush"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ns3client.LinuxNS3Client.flush" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.ns3client.LinuxNS3Client.get">
+<tt class="descname">get</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ns3client.html#LinuxNS3Client.get"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ns3client.LinuxNS3Client.get" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.ns3client.LinuxNS3Client.invoke">
+<tt class="descname">invoke</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ns3client.html#LinuxNS3Client.invoke"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ns3client.LinuxNS3Client.invoke" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.ns3client.LinuxNS3Client.send_msg">
+<tt class="descname">send_msg</tt><big>(</big><em>msg_type</em>, <em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ns3client.html#LinuxNS3Client.send_msg"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ns3client.LinuxNS3Client.send_msg" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.ns3client.LinuxNS3Client.set">
+<tt class="descname">set</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ns3client.html#LinuxNS3Client.set"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ns3client.LinuxNS3Client.set" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.ns3client.LinuxNS3Client.shutdown">
+<tt class="descname">shutdown</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ns3client.html#LinuxNS3Client.shutdown"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ns3client.LinuxNS3Client.shutdown" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.ns3.ns3client.LinuxNS3Client.simulation">
+<tt class="descname">simulation</tt><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ns3client.html#LinuxNS3Client.simulation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ns3client.LinuxNS3Client.simulation" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.ns3client.LinuxNS3Client.start">
+<tt class="descname">start</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ns3client.html#LinuxNS3Client.start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ns3client.LinuxNS3Client.start" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.ns3client.LinuxNS3Client.stop">
+<tt class="descname">stop</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ns3client.html#LinuxNS3Client.stop"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ns3client.LinuxNS3Client.stop" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.ns3.ns3dceapplication">
+<span id="nepi-resources-linux-ns3-ns3dceapplication-module"></span><h2>nepi.resources.linux.ns3.ns3dceapplication module<a class="headerlink" href="#module-nepi.resources.linux.ns3.ns3dceapplication" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.ns3.ns3dceapplication.LinuxNS3DceApplication">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.ns3.ns3dceapplication.</tt><tt class="descname">LinuxNS3DceApplication</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ns3dceapplication.html#LinuxNS3DceApplication"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ns3dceapplication.LinuxNS3DceApplication" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3dceapplication.NS3BaseDceApplication" title="nepi.resources.ns3.ns3dceapplication.NS3BaseDceApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3dceapplication.NS3BaseDceApplication</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.ns3.ns3pingdceapplication">
+<span id="nepi-resources-linux-ns3-ns3pingdceapplication-module"></span><h2>nepi.resources.linux.ns3.ns3pingdceapplication module<a class="headerlink" href="#module-nepi.resources.linux.ns3.ns3pingdceapplication" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.ns3.ns3pingdceapplication.LinuxDcePing">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.ns3.ns3pingdceapplication.</tt><tt class="descname">LinuxDcePing</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ns3pingdceapplication.html#LinuxDcePing"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ns3pingdceapplication.LinuxDcePing" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.linux.ns3.ns3dceapplication.LinuxNS3DceApplication" title="nepi.resources.linux.ns3.ns3dceapplication.LinuxNS3DceApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.ns3.ns3dceapplication.LinuxNS3DceApplication</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.ns3.ns3simulation">
+<span id="nepi-resources-linux-ns3-ns3simulation-module"></span><h2>nepi.resources.linux.ns3.ns3simulation module<a class="headerlink" href="#module-nepi.resources.linux.ns3.ns3simulation" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.ns3.ns3simulation.</tt><tt class="descname">LinuxNS3Simulation</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ns3simulation.html#LinuxNS3Simulation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication" title="nepi.resources.linux.application.LinuxApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.application.LinuxApplication</span></tt></a>, <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3simulation.NS3Simulation" title="nepi.resources.ns3.ns3simulation.NS3Simulation"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3simulation.NS3Simulation</span></tt></a></p>
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.configure">
+<tt class="descname">configure</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ns3simulation.html#LinuxNS3Simulation.configure"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.configure" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.dce_helper">
+<tt class="descname">dce_helper</tt><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ns3simulation.html#LinuxNS3Simulation.dce_helper"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.dce_helper" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.dce_repo">
+<tt class="descname">dce_repo</tt><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ns3simulation.html#LinuxNS3Simulation.dce_repo"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.dce_repo" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.dce_src_location">
+<tt class="descname">dce_src_location</tt><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ns3simulation.html#LinuxNS3Simulation.dce_src_location"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.dce_src_location" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.dce_version">
+<tt class="descname">dce_version</tt><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ns3simulation.html#LinuxNS3Simulation.dce_version"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.dce_version" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.do_deploy">
+<tt class="descname">do_deploy</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ns3simulation.html#LinuxNS3Simulation.do_deploy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.do_deploy" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.do_release">
+<tt class="descname">do_release</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ns3simulation.html#LinuxNS3Simulation.do_release"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.do_release" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.do_start">
+<tt class="descname">do_start</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ns3simulation.html#LinuxNS3Simulation.do_start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.do_start" title="Permalink to this definition">¶</a></dt>
+<dd><p>Starts simulation execution</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.do_stop">
+<tt class="descname">do_stop</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ns3simulation.html#LinuxNS3Simulation.do_stop"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.do_stop" title="Permalink to this definition">¶</a></dt>
+<dd><p>Stops simulation execution</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.enable_dce">
+<tt class="descname">enable_dce</tt><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ns3simulation.html#LinuxNS3Simulation.enable_dce"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.enable_dce" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.ns3_build_location">
+<tt class="descname">ns3_build_location</tt><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ns3simulation.html#LinuxNS3Simulation.ns3_build_location"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.ns3_build_location" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.ns3_repo">
+<tt class="descname">ns3_repo</tt><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ns3simulation.html#LinuxNS3Simulation.ns3_repo"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.ns3_repo" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.ns3_src_location">
+<tt class="descname">ns3_src_location</tt><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ns3simulation.html#LinuxNS3Simulation.ns3_src_location"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.ns3_src_location" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.pygccxml_version">
+<tt class="descname">pygccxml_version</tt><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ns3simulation.html#LinuxNS3Simulation.pygccxml_version"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.pygccxml_version" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.remote_socket">
+<tt class="descname">remote_socket</tt><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ns3simulation.html#LinuxNS3Simulation.remote_socket"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.remote_socket" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.replace_paths">
+<tt class="descname">replace_paths</tt><big>(</big><em>command</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ns3simulation.html#LinuxNS3Simulation.replace_paths"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.replace_paths" title="Permalink to this definition">¶</a></dt>
+<dd><p>Replace all special path tags with shell-escaped actual paths.</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.socket_name">
+<tt class="descname">socket_name</tt><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ns3simulation.html#LinuxNS3Simulation.socket_name"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.socket_name" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.state">
+<tt class="descname">state</tt><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ns3simulation.html#LinuxNS3Simulation.state"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.state" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.trace">
+<tt class="descname">trace</tt><big>(</big><em>name</em>, <em>attr='all'</em>, <em>block=512</em>, <em>offset=0</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ns3simulation.html#LinuxNS3Simulation.trace"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.trace" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.upload_extra_sources">
+<tt class="descname">upload_extra_sources</tt><big>(</big><em>sources=None</em>, <em>src_dir=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ns3simulation.html#LinuxNS3Simulation.upload_extra_sources"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.upload_extra_sources" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.upload_sources">
+<tt class="descname">upload_sources</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ns3simulation.html#LinuxNS3Simulation.upload_sources"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.upload_sources" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.upload_start_command">
+<tt class="descname">upload_start_command</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ns3simulation.html#LinuxNS3Simulation.upload_start_command"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.upload_start_command" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.valid_connection">
+<tt class="descname">valid_connection</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ns3simulation.html#LinuxNS3Simulation.valid_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.valid_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.wait_remote_socket">
+<tt class="descname">wait_remote_socket</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/ns3simulation.html#LinuxNS3Simulation.wait_remote_socket"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.wait_remote_socket" title="Permalink to this definition">¶</a></dt>
+<dd><p>Waits until the remote socket is created</p>
+</dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.ns3.tuntapfdlink">
+<span id="nepi-resources-linux-ns3-tuntapfdlink-module"></span><h2>nepi.resources.linux.ns3.tuntapfdlink module<a class="headerlink" href="#module-nepi.resources.linux.ns3.tuntapfdlink" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink">
+<em class="property">class </em><tt class="descclassname">nepi.resources.linux.ns3.tuntapfdlink.</tt><tt class="descname">LinuxTunTapFdLink</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/tuntapfdlink.html#LinuxTunTapFdLink"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication" title="nepi.resources.linux.application.LinuxApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.application.LinuxApplication</span></tt></a></p>
+<p>Interconnects a TAP or TUN Linux device to a FdNetDevice</p>
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink.do_deploy">
+<tt class="descname">do_deploy</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/tuntapfdlink.html#LinuxTunTapFdLink.do_deploy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink.do_deploy" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink.do_start">
+<tt class="descname">do_start</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/tuntapfdlink.html#LinuxTunTapFdLink.do_start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink.do_start" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink.fdnetdevice">
+<tt class="descname">fdnetdevice</tt><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/tuntapfdlink.html#LinuxTunTapFdLink.fdnetdevice"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink.fdnetdevice" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink.fdnode">
+<tt class="descname">fdnode</tt><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/tuntapfdlink.html#LinuxTunTapFdLink.fdnode"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink.fdnode" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink.node">
+<tt class="descname">node</tt><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/tuntapfdlink.html#LinuxTunTapFdLink.node"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink.node" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink.tap">
+<tt class="descname">tap</tt><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/tuntapfdlink.html#LinuxTunTapFdLink.tap"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink.tap" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink.tapnode">
+<tt class="descname">tapnode</tt><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/tuntapfdlink.html#LinuxTunTapFdLink.tapnode"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink.tapnode" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink.upload_sources">
+<tt class="descname">upload_sources</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/tuntapfdlink.html#LinuxTunTapFdLink.upload_sources"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink.upload_sources" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink.upload_start_command">
+<tt class="descname">upload_start_command</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/linux/ns3/tuntapfdlink.html#LinuxTunTapFdLink.upload_start_command"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink.upload_start_command" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.linux.ns3">
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-nepi.resources.linux.ns3" title="Permalink to this headline">¶</a></h2>
+</div>
+</div>
+
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_layout/nepi.resources.netns.html b/doc/sphinx/_build/html/_layout/nepi.resources.netns.html
new file mode 100644 (file)
index 0000000..6df18f4
--- /dev/null
@@ -0,0 +1,617 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.netns package &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../_static/jquery.js"></script>
+    <script type="text/javascript" src="../_static/underscore.js"></script>
+    <script type="text/javascript" src="../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+  <h3><a href="../index.html">Table Of Contents</a></h3>
+  <ul>
+<li><a class="reference internal" href="#">nepi.resources.netns package</a><ul>
+<li><a class="reference internal" href="#submodules">Submodules</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.netns.netnsapplication">nepi.resources.netns.netnsapplication module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.netns.netnsbase">nepi.resources.netns.netnsbase module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.netns.netnsclient">nepi.resources.netns.netnsclient module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.netns.netnsemulation">nepi.resources.netns.netnsemulation module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.netns.netnsinterface">nepi.resources.netns.netnsinterface module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.netns.netnsipv4address">nepi.resources.netns.netnsipv4address module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.netns.netnsnode">nepi.resources.netns.netnsnode module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.netns.netnsnodeinterface">nepi.resources.netns.netnsnodeinterface module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.netns.netnsroute">nepi.resources.netns.netnsroute module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.netns.netnsserver">nepi.resources.netns.netnsserver module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.netns.netnsswitch">nepi.resources.netns.netnsswitch module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.netns.netnswrapper">nepi.resources.netns.netnswrapper module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.netns.netnswrapper_debug">nepi.resources.netns.netnswrapper_debug module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.netns">Module contents</a></li>
+</ul>
+</li>
+</ul>
+
+  <h3>This Page</h3>
+  <ul class="this-page-menu">
+    <li><a href="../_sources/_layout/nepi.resources.netns.txt"
+           rel="nofollow">Show Source</a></li>
+  </ul>
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <div class="section" id="nepi-resources-netns-package">
+<h1>nepi.resources.netns package<a class="headerlink" href="#nepi-resources-netns-package" title="Permalink to this headline">¶</a></h1>
+<div class="section" id="submodules">
+<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline">¶</a></h2>
+</div>
+<div class="section" id="module-nepi.resources.netns.netnsapplication">
+<span id="nepi-resources-netns-netnsapplication-module"></span><h2>nepi.resources.netns.netnsapplication module<a class="headerlink" href="#module-nepi.resources.netns.netnsapplication" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.netns.netnsapplication.NetNSApplication">
+<em class="property">class </em><tt class="descclassname">nepi.resources.netns.netnsapplication.</tt><tt class="descname">NetNSApplication</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnsapplication.html#NetNSApplication"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsapplication.NetNSApplication" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.netns.netnsbase.NetNSBase" title="nepi.resources.netns.netnsbase.NetNSBase"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.netns.netnsbase.NetNSBase</span></tt></a></p>
+<dl class="method">
+<dt id="nepi.resources.netns.netnsapplication.NetNSApplication.do_start">
+<tt class="descname">do_start</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnsapplication.html#NetNSApplication.do_start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsapplication.NetNSApplication.do_start" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.netns.netnsapplication.NetNSApplication.emulation">
+<tt class="descname">emulation</tt><a class="reference internal" href="../_modules/nepi/resources/netns/netnsapplication.html#NetNSApplication.emulation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsapplication.NetNSApplication.emulation" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.netns.netnsapplication.NetNSApplication.node">
+<tt class="descname">node</tt><a class="reference internal" href="../_modules/nepi/resources/netns/netnsapplication.html#NetNSApplication.node"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsapplication.NetNSApplication.node" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.netns.netnsapplication.NetNSApplication.state">
+<tt class="descname">state</tt><a class="reference internal" href="../_modules/nepi/resources/netns/netnsapplication.html#NetNSApplication.state"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsapplication.NetNSApplication.state" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.netns.netnsbase">
+<span id="nepi-resources-netns-netnsbase-module"></span><h2>nepi.resources.netns.netnsbase module<a class="headerlink" href="#module-nepi.resources.netns.netnsbase" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.netns.netnsbase.NetNSBase">
+<em class="property">class </em><tt class="descclassname">nepi.resources.netns.netnsbase.</tt><tt class="descname">NetNSBase</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnsbase.html#NetNSBase"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsbase.NetNSBase" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.execution.html#nepi.execution.resource.ResourceManager" title="nepi.execution.resource.ResourceManager"><tt class="xref py py-class docutils literal"><span class="pre">nepi.execution.resource.ResourceManager</span></tt></a></p>
+<dl class="attribute">
+<dt id="nepi.resources.netns.netnsbase.NetNSBase.connected">
+<tt class="descname">connected</tt><a class="reference internal" href="../_modules/nepi/resources/netns/netnsbase.html#NetNSBase.connected"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsbase.NetNSBase.connected" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.netns.netnsbase.NetNSBase.do_deploy">
+<tt class="descname">do_deploy</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnsbase.html#NetNSBase.do_deploy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsbase.NetNSBase.do_deploy" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.netns.netnsbase.NetNSBase.do_provision">
+<tt class="descname">do_provision</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnsbase.html#NetNSBase.do_provision"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsbase.NetNSBase.do_provision" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.netns.netnsbase.NetNSBase.do_start">
+<tt class="descname">do_start</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnsbase.html#NetNSBase.do_start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsbase.NetNSBase.do_start" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.netns.netnsbase.NetNSBase.do_stop">
+<tt class="descname">do_stop</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnsbase.html#NetNSBase.do_stop"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsbase.NetNSBase.do_stop" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.netns.netnsbase.NetNSBase.get">
+<tt class="descname">get</tt><big>(</big><em>name</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnsbase.html#NetNSBase.get"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsbase.NetNSBase.get" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.netns.netnsbase.NetNSBase.set">
+<tt class="descname">set</tt><big>(</big><em>name</em>, <em>value</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnsbase.html#NetNSBase.set"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsbase.NetNSBase.set" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.netns.netnsbase.NetNSBase.state">
+<tt class="descname">state</tt><a class="reference internal" href="../_modules/nepi/resources/netns/netnsbase.html#NetNSBase.state"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsbase.NetNSBase.state" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.netns.netnsbase.NetNSBase.trace">
+<tt class="descname">trace</tt><big>(</big><em>name</em>, <em>attr='all'</em>, <em>block=512</em>, <em>offset=0</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnsbase.html#NetNSBase.trace"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsbase.NetNSBase.trace" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.netns.netnsbase.NetNSBase.uuid">
+<tt class="descname">uuid</tt><a class="reference internal" href="../_modules/nepi/resources/netns/netnsbase.html#NetNSBase.uuid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsbase.NetNSBase.uuid" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.netns.netnsclient">
+<span id="nepi-resources-netns-netnsclient-module"></span><h2>nepi.resources.netns.netnsclient module<a class="headerlink" href="#module-nepi.resources.netns.netnsclient" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.netns.netnsclient.NetNSClient">
+<em class="property">class </em><tt class="descclassname">nepi.resources.netns.netnsclient.</tt><tt class="descname">NetNSClient</tt><a class="reference internal" href="../_modules/nepi/resources/netns/netnsclient.html#NetNSClient"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsclient.NetNSClient" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference external" href="http://docs.python.org/library/functions.html#object" title="(in Python v2.7)"><tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></a></p>
+<p>Common Interface for NS3 client classes</p>
+<dl class="method">
+<dt id="nepi.resources.netns.netnsclient.NetNSClient.create">
+<tt class="descname">create</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnsclient.html#NetNSClient.create"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsclient.NetNSClient.create" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.netns.netnsclient.NetNSClient.flush">
+<tt class="descname">flush</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnsclient.html#NetNSClient.flush"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsclient.NetNSClient.flush" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.netns.netnsclient.NetNSClient.get">
+<tt class="descname">get</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnsclient.html#NetNSClient.get"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsclient.NetNSClient.get" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.netns.netnsclient.NetNSClient.invoke">
+<tt class="descname">invoke</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnsclient.html#NetNSClient.invoke"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsclient.NetNSClient.invoke" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.netns.netnsclient.NetNSClient.set">
+<tt class="descname">set</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnsclient.html#NetNSClient.set"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsclient.NetNSClient.set" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.netns.netnsclient.NetNSClient.shutdown">
+<tt class="descname">shutdown</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnsclient.html#NetNSClient.shutdown"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsclient.NetNSClient.shutdown" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.netns.netnsemulation">
+<span id="nepi-resources-netns-netnsemulation-module"></span><h2>nepi.resources.netns.netnsemulation module<a class="headerlink" href="#module-nepi.resources.netns.netnsemulation" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.netns.netnsemulation.NetNSEmulation">
+<em class="property">class </em><tt class="descclassname">nepi.resources.netns.netnsemulation.</tt><tt class="descname">NetNSEmulation</tt><a class="reference internal" href="../_modules/nepi/resources/netns/netnsemulation.html#NetNSEmulation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsemulation.NetNSEmulation" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference external" href="http://docs.python.org/library/functions.html#object" title="(in Python v2.7)"><tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></a></p>
+<dl class="attribute">
+<dt id="nepi.resources.netns.netnsemulation.NetNSEmulation.client">
+<tt class="descname">client</tt><a class="reference internal" href="../_modules/nepi/resources/netns/netnsemulation.html#NetNSEmulation.client"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsemulation.NetNSEmulation.client" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.netns.netnsemulation.NetNSEmulation.create">
+<tt class="descname">create</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnsemulation.html#NetNSEmulation.create"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsemulation.NetNSEmulation.create" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.netns.netnsemulation.NetNSEmulation.emu_get">
+<tt class="descname">emu_get</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnsemulation.html#NetNSEmulation.emu_get"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsemulation.NetNSEmulation.emu_get" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.netns.netnsemulation.NetNSEmulation.emu_set">
+<tt class="descname">emu_set</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnsemulation.html#NetNSEmulation.emu_set"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsemulation.NetNSEmulation.emu_set" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.netns.netnsemulation.NetNSEmulation.flush">
+<tt class="descname">flush</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnsemulation.html#NetNSEmulation.flush"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsemulation.NetNSEmulation.flush" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.netns.netnsemulation.NetNSEmulation.invoke">
+<tt class="descname">invoke</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnsemulation.html#NetNSEmulation.invoke"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsemulation.NetNSEmulation.invoke" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.netns.netnsemulation.NetNSEmulation.shutdown">
+<tt class="descname">shutdown</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnsemulation.html#NetNSEmulation.shutdown"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsemulation.NetNSEmulation.shutdown" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.netns.netnsinterface">
+<span id="nepi-resources-netns-netnsinterface-module"></span><h2>nepi.resources.netns.netnsinterface module<a class="headerlink" href="#module-nepi.resources.netns.netnsinterface" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.netns.netnsinterface.NetNSInterface">
+<em class="property">class </em><tt class="descclassname">nepi.resources.netns.netnsinterface.</tt><tt class="descname">NetNSInterface</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnsinterface.html#NetNSInterface"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsinterface.NetNSInterface" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.netns.netnsbase.NetNSBase" title="nepi.resources.netns.netnsbase.NetNSBase"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.netns.netnsbase.NetNSBase</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.netns.netnsipv4address">
+<span id="nepi-resources-netns-netnsipv4address-module"></span><h2>nepi.resources.netns.netnsipv4address module<a class="headerlink" href="#module-nepi.resources.netns.netnsipv4address" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.netns.netnsipv4address.NetNSIPv4Address">
+<em class="property">class </em><tt class="descclassname">nepi.resources.netns.netnsipv4address.</tt><tt class="descname">NetNSIPv4Address</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnsipv4address.html#NetNSIPv4Address"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsipv4address.NetNSIPv4Address" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.netns.netnsbase.NetNSBase" title="nepi.resources.netns.netnsbase.NetNSBase"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.netns.netnsbase.NetNSBase</span></tt></a></p>
+<dl class="attribute">
+<dt id="nepi.resources.netns.netnsipv4address.NetNSIPv4Address.emulation">
+<tt class="descname">emulation</tt><a class="reference internal" href="../_modules/nepi/resources/netns/netnsipv4address.html#NetNSIPv4Address.emulation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsipv4address.NetNSIPv4Address.emulation" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.netns.netnsipv4address.NetNSIPv4Address.interface">
+<tt class="descname">interface</tt><a class="reference internal" href="../_modules/nepi/resources/netns/netnsipv4address.html#NetNSIPv4Address.interface"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsipv4address.NetNSIPv4Address.interface" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.netns.netnsipv4address.NetNSIPv4Address.node">
+<tt class="descname">node</tt><a class="reference internal" href="../_modules/nepi/resources/netns/netnsipv4address.html#NetNSIPv4Address.node"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsipv4address.NetNSIPv4Address.node" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.netns.netnsnode">
+<span id="nepi-resources-netns-netnsnode-module"></span><h2>nepi.resources.netns.netnsnode module<a class="headerlink" href="#module-nepi.resources.netns.netnsnode" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.netns.netnsnode.NetNSNode">
+<em class="property">class </em><tt class="descclassname">nepi.resources.netns.netnsnode.</tt><tt class="descname">NetNSNode</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnsnode.html#NetNSNode"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsnode.NetNSNode" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.netns.netnsbase.NetNSBase" title="nepi.resources.netns.netnsbase.NetNSBase"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.netns.netnsbase.NetNSBase</span></tt></a></p>
+<dl class="attribute">
+<dt id="nepi.resources.netns.netnsnode.NetNSNode.emulation">
+<tt class="descname">emulation</tt><a class="reference internal" href="../_modules/nepi/resources/netns/netnsnode.html#NetNSNode.emulation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsnode.NetNSNode.emulation" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.netns.netnsnodeinterface">
+<span id="nepi-resources-netns-netnsnodeinterface-module"></span><h2>nepi.resources.netns.netnsnodeinterface module<a class="headerlink" href="#module-nepi.resources.netns.netnsnodeinterface" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.netns.netnsnodeinterface.NetNSNodeInterface">
+<em class="property">class </em><tt class="descclassname">nepi.resources.netns.netnsnodeinterface.</tt><tt class="descname">NetNSNodeInterface</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnsnodeinterface.html#NetNSNodeInterface"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsnodeinterface.NetNSNodeInterface" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.netns.netnsinterface.NetNSInterface" title="nepi.resources.netns.netnsinterface.NetNSInterface"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.netns.netnsinterface.NetNSInterface</span></tt></a></p>
+<dl class="attribute">
+<dt id="nepi.resources.netns.netnsnodeinterface.NetNSNodeInterface.emulation">
+<tt class="descname">emulation</tt><a class="reference internal" href="../_modules/nepi/resources/netns/netnsnodeinterface.html#NetNSNodeInterface.emulation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsnodeinterface.NetNSNodeInterface.emulation" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.netns.netnsnodeinterface.NetNSNodeInterface.node">
+<tt class="descname">node</tt><a class="reference internal" href="../_modules/nepi/resources/netns/netnsnodeinterface.html#NetNSNodeInterface.node"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsnodeinterface.NetNSNodeInterface.node" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.netns.netnsnodeinterface.NetNSNodeInterface.switch">
+<tt class="descname">switch</tt><a class="reference internal" href="../_modules/nepi/resources/netns/netnsnodeinterface.html#NetNSNodeInterface.switch"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsnodeinterface.NetNSNodeInterface.switch" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.netns.netnsroute">
+<span id="nepi-resources-netns-netnsroute-module"></span><h2>nepi.resources.netns.netnsroute module<a class="headerlink" href="#module-nepi.resources.netns.netnsroute" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.netns.netnsroute.NetNSIPv4Route">
+<em class="property">class </em><tt class="descclassname">nepi.resources.netns.netnsroute.</tt><tt class="descname">NetNSIPv4Route</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnsroute.html#NetNSIPv4Route"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsroute.NetNSIPv4Route" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.netns.netnsbase.NetNSBase" title="nepi.resources.netns.netnsbase.NetNSBase"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.netns.netnsbase.NetNSBase</span></tt></a></p>
+<dl class="attribute">
+<dt id="nepi.resources.netns.netnsroute.NetNSIPv4Route.emulation">
+<tt class="descname">emulation</tt><a class="reference internal" href="../_modules/nepi/resources/netns/netnsroute.html#NetNSIPv4Route.emulation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsroute.NetNSIPv4Route.emulation" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.netns.netnsroute.NetNSIPv4Route.node">
+<tt class="descname">node</tt><a class="reference internal" href="../_modules/nepi/resources/netns/netnsroute.html#NetNSIPv4Route.node"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsroute.NetNSIPv4Route.node" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.netns.netnsserver">
+<span id="nepi-resources-netns-netnsserver-module"></span><h2>nepi.resources.netns.netnsserver module<a class="headerlink" href="#module-nepi.resources.netns.netnsserver" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.netns.netnsserver.NetNSWrapperMessage">
+<em class="property">class </em><tt class="descclassname">nepi.resources.netns.netnsserver.</tt><tt class="descname">NetNSWrapperMessage</tt><a class="reference internal" href="../_modules/nepi/resources/netns/netnsserver.html#NetNSWrapperMessage"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsserver.NetNSWrapperMessage" title="Permalink to this definition">¶</a></dt>
+<dd><dl class="attribute">
+<dt id="nepi.resources.netns.netnsserver.NetNSWrapperMessage.CREATE">
+<tt class="descname">CREATE</tt><em class="property"> = 'CREATE'</em><a class="headerlink" href="#nepi.resources.netns.netnsserver.NetNSWrapperMessage.CREATE" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.netns.netnsserver.NetNSWrapperMessage.FLUSH">
+<tt class="descname">FLUSH</tt><em class="property"> = 'FLUSH'</em><a class="headerlink" href="#nepi.resources.netns.netnsserver.NetNSWrapperMessage.FLUSH" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.netns.netnsserver.NetNSWrapperMessage.GET">
+<tt class="descname">GET</tt><em class="property"> = 'GET'</em><a class="headerlink" href="#nepi.resources.netns.netnsserver.NetNSWrapperMessage.GET" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.netns.netnsserver.NetNSWrapperMessage.INVOKE">
+<tt class="descname">INVOKE</tt><em class="property"> = 'INVOKE'</em><a class="headerlink" href="#nepi.resources.netns.netnsserver.NetNSWrapperMessage.INVOKE" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.netns.netnsserver.NetNSWrapperMessage.SET">
+<tt class="descname">SET</tt><em class="property"> = 'SET'</em><a class="headerlink" href="#nepi.resources.netns.netnsserver.NetNSWrapperMessage.SET" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.netns.netnsserver.NetNSWrapperMessage.SHUTDOWN">
+<tt class="descname">SHUTDOWN</tt><em class="property"> = 'SHUTDOWN'</em><a class="headerlink" href="#nepi.resources.netns.netnsserver.NetNSWrapperMessage.SHUTDOWN" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+<dl class="function">
+<dt id="nepi.resources.netns.netnsserver.create_socket">
+<tt class="descclassname">nepi.resources.netns.netnsserver.</tt><tt class="descname">create_socket</tt><big>(</big><em>socket_name</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnsserver.html#create_socket"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsserver.create_socket" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="function">
+<dt id="nepi.resources.netns.netnsserver.get_options">
+<tt class="descclassname">nepi.resources.netns.netnsserver.</tt><tt class="descname">get_options</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnsserver.html#get_options"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsserver.get_options" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="function">
+<dt id="nepi.resources.netns.netnsserver.handle_message">
+<tt class="descclassname">nepi.resources.netns.netnsserver.</tt><tt class="descname">handle_message</tt><big>(</big><em>wrapper</em>, <em>msg_type</em>, <em>args</em>, <em>kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnsserver.html#handle_message"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsserver.handle_message" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="function">
+<dt id="nepi.resources.netns.netnsserver.recv_msg">
+<tt class="descclassname">nepi.resources.netns.netnsserver.</tt><tt class="descname">recv_msg</tt><big>(</big><em>conn</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnsserver.html#recv_msg"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsserver.recv_msg" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="function">
+<dt id="nepi.resources.netns.netnsserver.run_server">
+<tt class="descclassname">nepi.resources.netns.netnsserver.</tt><tt class="descname">run_server</tt><big>(</big><em>socket_name</em>, <em>level=20</em>, <em>enable_dump=False</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnsserver.html#run_server"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsserver.run_server" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="function">
+<dt id="nepi.resources.netns.netnsserver.send_reply">
+<tt class="descclassname">nepi.resources.netns.netnsserver.</tt><tt class="descname">send_reply</tt><big>(</big><em>conn</em>, <em>reply</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnsserver.html#send_reply"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsserver.send_reply" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.netns.netnsswitch">
+<span id="nepi-resources-netns-netnsswitch-module"></span><h2>nepi.resources.netns.netnsswitch module<a class="headerlink" href="#module-nepi.resources.netns.netnsswitch" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.netns.netnsswitch.NetNSSwitch">
+<em class="property">class </em><tt class="descclassname">nepi.resources.netns.netnsswitch.</tt><tt class="descname">NetNSSwitch</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnsswitch.html#NetNSSwitch"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsswitch.NetNSSwitch" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.netns.netnsbase.NetNSBase" title="nepi.resources.netns.netnsbase.NetNSBase"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.netns.netnsbase.NetNSBase</span></tt></a></p>
+<dl class="attribute">
+<dt id="nepi.resources.netns.netnsswitch.NetNSSwitch.emulation">
+<tt class="descname">emulation</tt><a class="reference internal" href="../_modules/nepi/resources/netns/netnsswitch.html#NetNSSwitch.emulation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsswitch.NetNSSwitch.emulation" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.netns.netnsswitch.NetNSSwitch.interface">
+<tt class="descname">interface</tt><a class="reference internal" href="../_modules/nepi/resources/netns/netnsswitch.html#NetNSSwitch.interface"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsswitch.NetNSSwitch.interface" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.netns.netnsswitch.NetNSSwitch.node">
+<tt class="descname">node</tt><a class="reference internal" href="../_modules/nepi/resources/netns/netnsswitch.html#NetNSSwitch.node"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnsswitch.NetNSSwitch.node" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.netns.netnswrapper">
+<span id="nepi-resources-netns-netnswrapper-module"></span><h2>nepi.resources.netns.netnswrapper module<a class="headerlink" href="#module-nepi.resources.netns.netnswrapper" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.netns.netnswrapper.NetNSWrapper">
+<em class="property">class </em><tt class="descclassname">nepi.resources.netns.netnswrapper.</tt><tt class="descname">NetNSWrapper</tt><big>(</big><em>loglevel=20</em>, <em>enable_dump=False</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnswrapper.html#NetNSWrapper"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnswrapper.NetNSWrapper" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference external" href="http://docs.python.org/library/functions.html#object" title="(in Python v2.7)"><tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></a></p>
+<dl class="method">
+<dt id="nepi.resources.netns.netnswrapper.NetNSWrapper.create">
+<tt class="descname">create</tt><big>(</big><em>clazzname</em>, <em>*args</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnswrapper.html#NetNSWrapper.create"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnswrapper.NetNSWrapper.create" title="Permalink to this definition">¶</a></dt>
+<dd><p>This method should be used to construct netns objects</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.netns.netnswrapper.NetNSWrapper.debuger">
+<tt class="descname">debuger</tt><a class="reference internal" href="../_modules/nepi/resources/netns/netnswrapper.html#NetNSWrapper.debuger"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnswrapper.NetNSWrapper.debuger" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.netns.netnswrapper.NetNSWrapper.get">
+<tt class="descname">get</tt><big>(</big><em>uuid</em>, <em>name</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnswrapper.html#NetNSWrapper.get"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnswrapper.NetNSWrapper.get" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.netns.netnswrapper.NetNSWrapper.get_object">
+<tt class="descname">get_object</tt><big>(</big><em>uuid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnswrapper.html#NetNSWrapper.get_object"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnswrapper.NetNSWrapper.get_object" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.netns.netnswrapper.NetNSWrapper.invoke">
+<tt class="descname">invoke</tt><big>(</big><em>uuid</em>, <em>operation</em>, <em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnswrapper.html#NetNSWrapper.invoke"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnswrapper.NetNSWrapper.invoke" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.netns.netnswrapper.NetNSWrapper.logger">
+<tt class="descname">logger</tt><a class="reference internal" href="../_modules/nepi/resources/netns/netnswrapper.html#NetNSWrapper.logger"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnswrapper.NetNSWrapper.logger" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.netns.netnswrapper.NetNSWrapper.make_uuid">
+<tt class="descname">make_uuid</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnswrapper.html#NetNSWrapper.make_uuid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnswrapper.NetNSWrapper.make_uuid" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.netns.netnswrapper.NetNSWrapper.replace_args">
+<tt class="descname">replace_args</tt><big>(</big><em>args</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnswrapper.html#NetNSWrapper.replace_args"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnswrapper.NetNSWrapper.replace_args" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.netns.netnswrapper.NetNSWrapper.replace_kwargs">
+<tt class="descname">replace_kwargs</tt><big>(</big><em>kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnswrapper.html#NetNSWrapper.replace_kwargs"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnswrapper.NetNSWrapper.replace_kwargs" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.netns.netnswrapper.NetNSWrapper.set">
+<tt class="descname">set</tt><big>(</big><em>uuid</em>, <em>name</em>, <em>value</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnswrapper.html#NetNSWrapper.set"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnswrapper.NetNSWrapper.set" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.netns.netnswrapper.NetNSWrapper.shutdown">
+<tt class="descname">shutdown</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnswrapper.html#NetNSWrapper.shutdown"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnswrapper.NetNSWrapper.shutdown" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.netns.netnswrapper_debug">
+<span id="nepi-resources-netns-netnswrapper-debug-module"></span><h2>nepi.resources.netns.netnswrapper_debug module<a class="headerlink" href="#module-nepi.resources.netns.netnswrapper_debug" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger">
+<em class="property">class </em><tt class="descclassname">nepi.resources.netns.netnswrapper_debug.</tt><tt class="descname">NetNSWrapperDebuger</tt><big>(</big><em>enabled</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnswrapper_debug.html#NetNSWrapperDebuger"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference external" href="http://docs.python.org/library/functions.html#object" title="(in Python v2.7)"><tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></a></p>
+<dl class="method">
+<dt id="nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.dump_create">
+<tt class="descname">dump_create</tt><big>(</big><em>uuid</em>, <em>clazzname</em>, <em>args</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnswrapper_debug.html#NetNSWrapperDebuger.dump_create"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.dump_create" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.dump_factory">
+<tt class="descname">dump_factory</tt><big>(</big><em>uuid</em>, <em>type_name</em>, <em>kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnswrapper_debug.html#NetNSWrapperDebuger.dump_factory"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.dump_factory" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.dump_get">
+<tt class="descname">dump_get</tt><big>(</big><em>uuid</em>, <em>name</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnswrapper_debug.html#NetNSWrapperDebuger.dump_get"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.dump_get" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.dump_header">
+<tt class="descname">dump_header</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnswrapper_debug.html#NetNSWrapperDebuger.dump_header"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.dump_header" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.dump_invoke">
+<tt class="descname">dump_invoke</tt><big>(</big><em>newuuid</em>, <em>uuid</em>, <em>operation</em>, <em>args</em>, <em>kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnswrapper_debug.html#NetNSWrapperDebuger.dump_invoke"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.dump_invoke" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.dump_set">
+<tt class="descname">dump_set</tt><big>(</big><em>uuid</em>, <em>name</em>, <em>value</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnswrapper_debug.html#NetNSWrapperDebuger.dump_set"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.dump_set" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.dump_shutdown">
+<tt class="descname">dump_shutdown</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnswrapper_debug.html#NetNSWrapperDebuger.dump_shutdown"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.dump_shutdown" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.dump_to_script">
+<tt class="descname">dump_to_script</tt><big>(</big><em>command</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnswrapper_debug.html#NetNSWrapperDebuger.dump_to_script"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.dump_to_script" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.enabled">
+<tt class="descname">enabled</tt><a class="reference internal" href="../_modules/nepi/resources/netns/netnswrapper_debug.html#NetNSWrapperDebuger.enabled"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.enabled" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.format_args">
+<tt class="descname">format_args</tt><big>(</big><em>args</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnswrapper_debug.html#NetNSWrapperDebuger.format_args"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.format_args" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.format_kwargs">
+<tt class="descname">format_kwargs</tt><big>(</big><em>kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnswrapper_debug.html#NetNSWrapperDebuger.format_kwargs"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.format_kwargs" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.format_value">
+<tt class="descname">format_value</tt><big>(</big><em>value</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/netns/netnswrapper_debug.html#NetNSWrapperDebuger.format_value"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.format_value" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.script_path">
+<tt class="descname">script_path</tt><a class="reference internal" href="../_modules/nepi/resources/netns/netnswrapper_debug.html#NetNSWrapperDebuger.script_path"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.script_path" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.netns">
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-nepi.resources.netns" title="Permalink to this headline">¶</a></h2>
+</div>
+</div>
+
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_layout/nepi.resources.ns3.classes.html b/doc/sphinx/_build/html/_layout/nepi.resources.ns3.classes.html
new file mode 100644 (file)
index 0000000..38f606a
--- /dev/null
@@ -0,0 +1,1171 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes package &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../_static/jquery.js"></script>
+    <script type="text/javascript" src="../_static/underscore.js"></script>
+    <script type="text/javascript" src="../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+  <h3><a href="../index.html">Table Of Contents</a></h3>
+  <ul>
+<li><a class="reference internal" href="#">nepi.resources.ns3.classes package</a><ul>
+<li><a class="reference internal" href="#submodules">Submodules</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.aarf_wifi_manager">nepi.resources.ns3.classes.aarf_wifi_manager module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.aarfcd_wifi_manager">nepi.resources.ns3.classes.aarfcd_wifi_manager module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.adhoc_wifi_mac">nepi.resources.ns3.classes.adhoc_wifi_mac module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.aloha_noack_net_device">nepi.resources.ns3.classes.aloha_noack_net_device module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.amrr_wifi_manager">nepi.resources.ns3.classes.amrr_wifi_manager module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.ap_wifi_mac">nepi.resources.ns3.classes.ap_wifi_mac module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.arf_wifi_manager">nepi.resources.ns3.classes.arf_wifi_manager module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.arp_l3protocol">nepi.resources.ns3.classes.arp_l3protocol module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.base_station_net_device">nepi.resources.ns3.classes.base_station_net_device module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.binary_error_model">nepi.resources.ns3.classes.binary_error_model module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.binary_error_sixlow_model">nepi.resources.ns3.classes.binary_error_sixlow_model module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.bridge_channel">nepi.resources.ns3.classes.bridge_channel module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.bridge_net_device">nepi.resources.ns3.classes.bridge_net_device module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.bulk_send_application">nepi.resources.ns3.classes.bulk_send_application module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.burst_error_model">nepi.resources.ns3.classes.burst_error_model module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.cara_wifi_manager">nepi.resources.ns3.classes.cara_wifi_manager module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.constant_acceleration_mobility_model">nepi.resources.ns3.classes.constant_acceleration_mobility_model module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.constant_position_mobility_model">nepi.resources.ns3.classes.constant_position_mobility_model module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.constant_rate_wifi_manager">nepi.resources.ns3.classes.constant_rate_wifi_manager module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.constant_speed_propagation_delay_model">nepi.resources.ns3.classes.constant_speed_propagation_delay_model module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.constant_velocity_mobility_model">nepi.resources.ns3.classes.constant_velocity_mobility_model module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.cost231propagation_loss_model">nepi.resources.ns3.classes.cost231propagation_loss_model module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.csma_channel">nepi.resources.ns3.classes.csma_channel module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.csma_net_device">nepi.resources.ns3.classes.csma_net_device module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.drop_tail_queue">nepi.resources.ns3.classes.drop_tail_queue module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.dsrdsr_routing">nepi.resources.ns3.classes.dsrdsr_routing module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.emu_net_device">nepi.resources.ns3.classes.emu_net_device module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.error_channel">nepi.resources.ns3.classes.error_channel module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.error_channel_sixlow">nepi.resources.ns3.classes.error_channel_sixlow module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.error_net_device">nepi.resources.ns3.classes.error_net_device module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.fd_net_device">nepi.resources.ns3.classes.fd_net_device module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.fixed_rss_loss_model">nepi.resources.ns3.classes.fixed_rss_loss_model module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.friis_propagation_loss_model">nepi.resources.ns3.classes.friis_propagation_loss_model module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.gauss_markov_mobility_model">nepi.resources.ns3.classes.gauss_markov_mobility_model module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.hierarchical_mobility_model">nepi.resources.ns3.classes.hierarchical_mobility_model module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.hybrid_buildings_propagation_loss_model">nepi.resources.ns3.classes.hybrid_buildings_propagation_loss_model module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.icmpv4l4protocol">nepi.resources.ns3.classes.icmpv4l4protocol module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.icmpv6l4protocol">nepi.resources.ns3.classes.icmpv6l4protocol module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.ideal_wifi_manager">nepi.resources.ns3.classes.ideal_wifi_manager module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.ipv4l3protocol">nepi.resources.ns3.classes.ipv4l3protocol module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.itu_r1411los_propagation_loss_model">nepi.resources.ns3.classes.itu_r1411los_propagation_loss_model module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.itu_r1411nlos_over_rooftop_propagation_loss_model">nepi.resources.ns3.classes.itu_r1411nlos_over_rooftop_propagation_loss_model module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.jakes_propagation_loss_model">nepi.resources.ns3.classes.jakes_propagation_loss_model module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.kun2600mhz_propagation_loss_model">nepi.resources.ns3.classes.kun2600mhz_propagation_loss_model module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.list_error_model">nepi.resources.ns3.classes.list_error_model module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.log_distance_propagation_loss_model">nepi.resources.ns3.classes.log_distance_propagation_loss_model module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.loopback_net_device">nepi.resources.ns3.classes.loopback_net_device module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.lr_wpan_net_device">nepi.resources.ns3.classes.lr_wpan_net_device module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.lte_enb_net_device">nepi.resources.ns3.classes.lte_enb_net_device module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.lte_simple_net_device">nepi.resources.ns3.classes.lte_simple_net_device module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.lte_ue_net_device">nepi.resources.ns3.classes.lte_ue_net_device module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.matrix_propagation_loss_model">nepi.resources.ns3.classes.matrix_propagation_loss_model module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.mesh_point_device">nepi.resources.ns3.classes.mesh_point_device module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.mesh_wifi_interface_mac">nepi.resources.ns3.classes.mesh_wifi_interface_mac module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.minstrel_wifi_manager">nepi.resources.ns3.classes.minstrel_wifi_manager module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.multi_model_spectrum_channel">nepi.resources.ns3.classes.multi_model_spectrum_channel module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.nakagami_propagation_loss_model">nepi.resources.ns3.classes.nakagami_propagation_loss_model module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.nist_error_rate_model">nepi.resources.ns3.classes.nist_error_rate_model module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.node">nepi.resources.ns3.classes.node module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.non_communicating_net_device">nepi.resources.ns3.classes.non_communicating_net_device module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.ocb_wifi_mac">nepi.resources.ns3.classes.ocb_wifi_mac module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.oh_buildings_propagation_loss_model">nepi.resources.ns3.classes.oh_buildings_propagation_loss_model module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.okumura_hata_propagation_loss_model">nepi.resources.ns3.classes.okumura_hata_propagation_loss_model module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.on_off_application">nepi.resources.ns3.classes.on_off_application module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.onoe_wifi_manager">nepi.resources.ns3.classes.onoe_wifi_manager module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.packet_sink">nepi.resources.ns3.classes.packet_sink module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.ping6">nepi.resources.ns3.classes.ping6 module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.point_to_point_channel">nepi.resources.ns3.classes.point_to_point_channel module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.point_to_point_net_device">nepi.resources.ns3.classes.point_to_point_net_device module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.point_to_point_remote_channel">nepi.resources.ns3.classes.point_to_point_remote_channel module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.radvd">nepi.resources.ns3.classes.radvd module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.random_direction2d_mobility_model">nepi.resources.ns3.classes.random_direction2d_mobility_model module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.random_propagation_delay_model">nepi.resources.ns3.classes.random_propagation_delay_model module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.random_propagation_loss_model">nepi.resources.ns3.classes.random_propagation_loss_model module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.random_walk2d_mobility_model">nepi.resources.ns3.classes.random_walk2d_mobility_model module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.random_waypoint_mobility_model">nepi.resources.ns3.classes.random_waypoint_mobility_model module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.range_propagation_loss_model">nepi.resources.ns3.classes.range_propagation_loss_model module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.rate_error_model">nepi.resources.ns3.classes.rate_error_model module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.receive_list_error_model">nepi.resources.ns3.classes.receive_list_error_model module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.red_queue">nepi.resources.ns3.classes.red_queue module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.rraa_wifi_manager">nepi.resources.ns3.classes.rraa_wifi_manager module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.simple_channel">nepi.resources.ns3.classes.simple_channel module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.simple_net_device">nepi.resources.ns3.classes.simple_net_device module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.single_model_spectrum_channel">nepi.resources.ns3.classes.single_model_spectrum_channel module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.six_low_pan_net_device">nepi.resources.ns3.classes.six_low_pan_net_device module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.sta_wifi_mac">nepi.resources.ns3.classes.sta_wifi_mac module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.steady_state_random_waypoint_mobility_model">nepi.resources.ns3.classes.steady_state_random_waypoint_mobility_model module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.subscriber_station_net_device">nepi.resources.ns3.classes.subscriber_station_net_device module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.tap_bridge">nepi.resources.ns3.classes.tap_bridge module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.tcp_l4protocol">nepi.resources.ns3.classes.tcp_l4protocol module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.three_log_distance_propagation_loss_model">nepi.resources.ns3.classes.three_log_distance_propagation_loss_model module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.two_ray_ground_propagation_loss_model">nepi.resources.ns3.classes.two_ray_ground_propagation_loss_model module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.uan_channel">nepi.resources.ns3.classes.uan_channel module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.udp_client">nepi.resources.ns3.classes.udp_client module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.udp_echo_client">nepi.resources.ns3.classes.udp_echo_client module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.udp_echo_server">nepi.resources.ns3.classes.udp_echo_server module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.udp_l4protocol">nepi.resources.ns3.classes.udp_l4protocol module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.udp_server">nepi.resources.ns3.classes.udp_server module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.udp_trace_client">nepi.resources.ns3.classes.udp_trace_client module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.v4ping">nepi.resources.ns3.classes.v4ping module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.virtual_net_device">nepi.resources.ns3.classes.virtual_net_device module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.waypoint_mobility_model">nepi.resources.ns3.classes.waypoint_mobility_model module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.wifi_net_device">nepi.resources.ns3.classes.wifi_net_device module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.yans_error_rate_model">nepi.resources.ns3.classes.yans_error_rate_model module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.yans_wifi_channel">nepi.resources.ns3.classes.yans_wifi_channel module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes.yans_wifi_phy">nepi.resources.ns3.classes.yans_wifi_phy module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.classes">Module contents</a></li>
+</ul>
+</li>
+</ul>
+
+  <h3>This Page</h3>
+  <ul class="this-page-menu">
+    <li><a href="../_sources/_layout/nepi.resources.ns3.classes.txt"
+           rel="nofollow">Show Source</a></li>
+  </ul>
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <div class="section" id="nepi-resources-ns3-classes-package">
+<h1>nepi.resources.ns3.classes package<a class="headerlink" href="#nepi-resources-ns3-classes-package" title="Permalink to this headline">¶</a></h1>
+<div class="section" id="submodules">
+<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline">¶</a></h2>
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.aarf_wifi_manager">
+<span id="nepi-resources-ns3-classes-aarf-wifi-manager-module"></span><h2>nepi.resources.ns3.classes.aarf_wifi_manager module<a class="headerlink" href="#module-nepi.resources.ns3.classes.aarf_wifi_manager" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.aarf_wifi_manager.NS3AarfWifiManager">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.aarf_wifi_manager.</tt><tt class="descname">NS3AarfWifiManager</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/aarf_wifi_manager.html#NS3AarfWifiManager"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.aarf_wifi_manager.NS3AarfWifiManager" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager" title="nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.aarfcd_wifi_manager">
+<span id="nepi-resources-ns3-classes-aarfcd-wifi-manager-module"></span><h2>nepi.resources.ns3.classes.aarfcd_wifi_manager module<a class="headerlink" href="#module-nepi.resources.ns3.classes.aarfcd_wifi_manager" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.aarfcd_wifi_manager.NS3AarfcdWifiManager">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.aarfcd_wifi_manager.</tt><tt class="descname">NS3AarfcdWifiManager</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/aarfcd_wifi_manager.html#NS3AarfcdWifiManager"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.aarfcd_wifi_manager.NS3AarfcdWifiManager" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager" title="nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.adhoc_wifi_mac">
+<span id="nepi-resources-ns3-classes-adhoc-wifi-mac-module"></span><h2>nepi.resources.ns3.classes.adhoc_wifi_mac module<a class="headerlink" href="#module-nepi.resources.ns3.classes.adhoc_wifi_mac" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.adhoc_wifi_mac.NS3AdhocWifiMac">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.adhoc_wifi_mac.</tt><tt class="descname">NS3AdhocWifiMac</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/adhoc_wifi_mac.html#NS3AdhocWifiMac"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.adhoc_wifi_mac.NS3AdhocWifiMac" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3wifimac.NS3BaseWifiMac" title="nepi.resources.ns3.ns3wifimac.NS3BaseWifiMac"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3wifimac.NS3BaseWifiMac</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.aloha_noack_net_device">
+<span id="nepi-resources-ns3-classes-aloha-noack-net-device-module"></span><h2>nepi.resources.ns3.classes.aloha_noack_net_device module<a class="headerlink" href="#module-nepi.resources.ns3.classes.aloha_noack_net_device" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.aloha_noack_net_device.NS3AlohaNoackNetDevice">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.aloha_noack_net_device.</tt><tt class="descname">NS3AlohaNoackNetDevice</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/aloha_noack_net_device.html#NS3AlohaNoackNetDevice"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.aloha_noack_net_device.NS3AlohaNoackNetDevice" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice" title="nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.amrr_wifi_manager">
+<span id="nepi-resources-ns3-classes-amrr-wifi-manager-module"></span><h2>nepi.resources.ns3.classes.amrr_wifi_manager module<a class="headerlink" href="#module-nepi.resources.ns3.classes.amrr_wifi_manager" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.amrr_wifi_manager.NS3AmrrWifiManager">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.amrr_wifi_manager.</tt><tt class="descname">NS3AmrrWifiManager</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/amrr_wifi_manager.html#NS3AmrrWifiManager"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.amrr_wifi_manager.NS3AmrrWifiManager" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager" title="nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.ap_wifi_mac">
+<span id="nepi-resources-ns3-classes-ap-wifi-mac-module"></span><h2>nepi.resources.ns3.classes.ap_wifi_mac module<a class="headerlink" href="#module-nepi.resources.ns3.classes.ap_wifi_mac" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.ap_wifi_mac.NS3ApWifiMac">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.ap_wifi_mac.</tt><tt class="descname">NS3ApWifiMac</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/ap_wifi_mac.html#NS3ApWifiMac"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.ap_wifi_mac.NS3ApWifiMac" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3wifimac.NS3BaseWifiMac" title="nepi.resources.ns3.ns3wifimac.NS3BaseWifiMac"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3wifimac.NS3BaseWifiMac</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.arf_wifi_manager">
+<span id="nepi-resources-ns3-classes-arf-wifi-manager-module"></span><h2>nepi.resources.ns3.classes.arf_wifi_manager module<a class="headerlink" href="#module-nepi.resources.ns3.classes.arf_wifi_manager" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.arf_wifi_manager.NS3ArfWifiManager">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.arf_wifi_manager.</tt><tt class="descname">NS3ArfWifiManager</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/arf_wifi_manager.html#NS3ArfWifiManager"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.arf_wifi_manager.NS3ArfWifiManager" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager" title="nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.arp_l3protocol">
+<span id="nepi-resources-ns3-classes-arp-l3protocol-module"></span><h2>nepi.resources.ns3.classes.arp_l3protocol module<a class="headerlink" href="#module-nepi.resources.ns3.classes.arp_l3protocol" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.arp_l3protocol.NS3ArpL3Protocol">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.arp_l3protocol.</tt><tt class="descname">NS3ArpL3Protocol</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/arp_l3protocol.html#NS3ArpL3Protocol"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.arp_l3protocol.NS3ArpL3Protocol" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3arpl3protocol.NS3BaseArpL3Protocol" title="nepi.resources.ns3.ns3arpl3protocol.NS3BaseArpL3Protocol"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3arpl3protocol.NS3BaseArpL3Protocol</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.base_station_net_device">
+<span id="nepi-resources-ns3-classes-base-station-net-device-module"></span><h2>nepi.resources.ns3.classes.base_station_net_device module<a class="headerlink" href="#module-nepi.resources.ns3.classes.base_station_net_device" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.base_station_net_device.NS3BaseStationNetDevice">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.base_station_net_device.</tt><tt class="descname">NS3BaseStationNetDevice</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/base_station_net_device.html#NS3BaseStationNetDevice"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.base_station_net_device.NS3BaseStationNetDevice" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice" title="nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.binary_error_model">
+<span id="nepi-resources-ns3-classes-binary-error-model-module"></span><h2>nepi.resources.ns3.classes.binary_error_model module<a class="headerlink" href="#module-nepi.resources.ns3.classes.binary_error_model" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.binary_error_model.NS3BinaryErrorModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.binary_error_model.</tt><tt class="descname">NS3BinaryErrorModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/binary_error_model.html#NS3BinaryErrorModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.binary_error_model.NS3BinaryErrorModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3errormodel.NS3BaseErrorModel" title="nepi.resources.ns3.ns3errormodel.NS3BaseErrorModel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3errormodel.NS3BaseErrorModel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.binary_error_sixlow_model">
+<span id="nepi-resources-ns3-classes-binary-error-sixlow-model-module"></span><h2>nepi.resources.ns3.classes.binary_error_sixlow_model module<a class="headerlink" href="#module-nepi.resources.ns3.classes.binary_error_sixlow_model" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.binary_error_sixlow_model.NS3BinaryErrorSixlowModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.binary_error_sixlow_model.</tt><tt class="descname">NS3BinaryErrorSixlowModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/binary_error_sixlow_model.html#NS3BinaryErrorSixlowModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.binary_error_sixlow_model.NS3BinaryErrorSixlowModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3errormodel.NS3BaseErrorModel" title="nepi.resources.ns3.ns3errormodel.NS3BaseErrorModel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3errormodel.NS3BaseErrorModel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.bridge_channel">
+<span id="nepi-resources-ns3-classes-bridge-channel-module"></span><h2>nepi.resources.ns3.classes.bridge_channel module<a class="headerlink" href="#module-nepi.resources.ns3.classes.bridge_channel" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.bridge_channel.NS3BridgeChannel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.bridge_channel.</tt><tt class="descname">NS3BridgeChannel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/bridge_channel.html#NS3BridgeChannel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.bridge_channel.NS3BridgeChannel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3channel.NS3BaseChannel" title="nepi.resources.ns3.ns3channel.NS3BaseChannel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3channel.NS3BaseChannel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.bridge_net_device">
+<span id="nepi-resources-ns3-classes-bridge-net-device-module"></span><h2>nepi.resources.ns3.classes.bridge_net_device module<a class="headerlink" href="#module-nepi.resources.ns3.classes.bridge_net_device" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.bridge_net_device.NS3BridgeNetDevice">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.bridge_net_device.</tt><tt class="descname">NS3BridgeNetDevice</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/bridge_net_device.html#NS3BridgeNetDevice"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.bridge_net_device.NS3BridgeNetDevice" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice" title="nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.bulk_send_application">
+<span id="nepi-resources-ns3-classes-bulk-send-application-module"></span><h2>nepi.resources.ns3.classes.bulk_send_application module<a class="headerlink" href="#module-nepi.resources.ns3.classes.bulk_send_application" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.bulk_send_application.NS3BulkSendApplication">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.bulk_send_application.</tt><tt class="descname">NS3BulkSendApplication</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/bulk_send_application.html#NS3BulkSendApplication"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.bulk_send_application.NS3BulkSendApplication" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3application.NS3BaseApplication" title="nepi.resources.ns3.ns3application.NS3BaseApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3application.NS3BaseApplication</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.burst_error_model">
+<span id="nepi-resources-ns3-classes-burst-error-model-module"></span><h2>nepi.resources.ns3.classes.burst_error_model module<a class="headerlink" href="#module-nepi.resources.ns3.classes.burst_error_model" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.burst_error_model.NS3BurstErrorModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.burst_error_model.</tt><tt class="descname">NS3BurstErrorModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/burst_error_model.html#NS3BurstErrorModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.burst_error_model.NS3BurstErrorModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3errormodel.NS3BaseErrorModel" title="nepi.resources.ns3.ns3errormodel.NS3BaseErrorModel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3errormodel.NS3BaseErrorModel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.cara_wifi_manager">
+<span id="nepi-resources-ns3-classes-cara-wifi-manager-module"></span><h2>nepi.resources.ns3.classes.cara_wifi_manager module<a class="headerlink" href="#module-nepi.resources.ns3.classes.cara_wifi_manager" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.cara_wifi_manager.NS3CaraWifiManager">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.cara_wifi_manager.</tt><tt class="descname">NS3CaraWifiManager</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/cara_wifi_manager.html#NS3CaraWifiManager"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.cara_wifi_manager.NS3CaraWifiManager" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager" title="nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.constant_acceleration_mobility_model">
+<span id="nepi-resources-ns3-classes-constant-acceleration-mobility-model-module"></span><h2>nepi.resources.ns3.classes.constant_acceleration_mobility_model module<a class="headerlink" href="#module-nepi.resources.ns3.classes.constant_acceleration_mobility_model" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.constant_acceleration_mobility_model.NS3ConstantAccelerationMobilityModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.constant_acceleration_mobility_model.</tt><tt class="descname">NS3ConstantAccelerationMobilityModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/constant_acceleration_mobility_model.html#NS3ConstantAccelerationMobilityModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.constant_acceleration_mobility_model.NS3ConstantAccelerationMobilityModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3mobilitymodel.NS3BaseMobilityModel" title="nepi.resources.ns3.ns3mobilitymodel.NS3BaseMobilityModel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3mobilitymodel.NS3BaseMobilityModel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.constant_position_mobility_model">
+<span id="nepi-resources-ns3-classes-constant-position-mobility-model-module"></span><h2>nepi.resources.ns3.classes.constant_position_mobility_model module<a class="headerlink" href="#module-nepi.resources.ns3.classes.constant_position_mobility_model" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.constant_position_mobility_model.NS3ConstantPositionMobilityModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.constant_position_mobility_model.</tt><tt class="descname">NS3ConstantPositionMobilityModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/constant_position_mobility_model.html#NS3ConstantPositionMobilityModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.constant_position_mobility_model.NS3ConstantPositionMobilityModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3mobilitymodel.NS3BaseMobilityModel" title="nepi.resources.ns3.ns3mobilitymodel.NS3BaseMobilityModel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3mobilitymodel.NS3BaseMobilityModel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.constant_rate_wifi_manager">
+<span id="nepi-resources-ns3-classes-constant-rate-wifi-manager-module"></span><h2>nepi.resources.ns3.classes.constant_rate_wifi_manager module<a class="headerlink" href="#module-nepi.resources.ns3.classes.constant_rate_wifi_manager" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.constant_rate_wifi_manager.NS3ConstantRateWifiManager">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.constant_rate_wifi_manager.</tt><tt class="descname">NS3ConstantRateWifiManager</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/constant_rate_wifi_manager.html#NS3ConstantRateWifiManager"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.constant_rate_wifi_manager.NS3ConstantRateWifiManager" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager" title="nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.constant_speed_propagation_delay_model">
+<span id="nepi-resources-ns3-classes-constant-speed-propagation-delay-model-module"></span><h2>nepi.resources.ns3.classes.constant_speed_propagation_delay_model module<a class="headerlink" href="#module-nepi.resources.ns3.classes.constant_speed_propagation_delay_model" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.constant_speed_propagation_delay_model.NS3ConstantSpeedPropagationDelayModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.constant_speed_propagation_delay_model.</tt><tt class="descname">NS3ConstantSpeedPropagationDelayModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/constant_speed_propagation_delay_model.html#NS3ConstantSpeedPropagationDelayModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.constant_speed_propagation_delay_model.NS3ConstantSpeedPropagationDelayModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3propagationdelaymodel.NS3BasePropagationDelayModel" title="nepi.resources.ns3.ns3propagationdelaymodel.NS3BasePropagationDelayModel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3propagationdelaymodel.NS3BasePropagationDelayModel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.constant_velocity_mobility_model">
+<span id="nepi-resources-ns3-classes-constant-velocity-mobility-model-module"></span><h2>nepi.resources.ns3.classes.constant_velocity_mobility_model module<a class="headerlink" href="#module-nepi.resources.ns3.classes.constant_velocity_mobility_model" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.constant_velocity_mobility_model.NS3ConstantVelocityMobilityModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.constant_velocity_mobility_model.</tt><tt class="descname">NS3ConstantVelocityMobilityModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/constant_velocity_mobility_model.html#NS3ConstantVelocityMobilityModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.constant_velocity_mobility_model.NS3ConstantVelocityMobilityModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3mobilitymodel.NS3BaseMobilityModel" title="nepi.resources.ns3.ns3mobilitymodel.NS3BaseMobilityModel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3mobilitymodel.NS3BaseMobilityModel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.cost231propagation_loss_model">
+<span id="nepi-resources-ns3-classes-cost231propagation-loss-model-module"></span><h2>nepi.resources.ns3.classes.cost231propagation_loss_model module<a class="headerlink" href="#module-nepi.resources.ns3.classes.cost231propagation_loss_model" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.cost231propagation_loss_model.NS3Cost231PropagationLossModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.cost231propagation_loss_model.</tt><tt class="descname">NS3Cost231PropagationLossModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/cost231propagation_loss_model.html#NS3Cost231PropagationLossModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.cost231propagation_loss_model.NS3Cost231PropagationLossModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel" title="nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.csma_channel">
+<span id="nepi-resources-ns3-classes-csma-channel-module"></span><h2>nepi.resources.ns3.classes.csma_channel module<a class="headerlink" href="#module-nepi.resources.ns3.classes.csma_channel" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.csma_channel.NS3CsmaChannel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.csma_channel.</tt><tt class="descname">NS3CsmaChannel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/csma_channel.html#NS3CsmaChannel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.csma_channel.NS3CsmaChannel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3channel.NS3BaseChannel" title="nepi.resources.ns3.ns3channel.NS3BaseChannel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3channel.NS3BaseChannel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.csma_net_device">
+<span id="nepi-resources-ns3-classes-csma-net-device-module"></span><h2>nepi.resources.ns3.classes.csma_net_device module<a class="headerlink" href="#module-nepi.resources.ns3.classes.csma_net_device" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.csma_net_device.NS3CsmaNetDevice">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.csma_net_device.</tt><tt class="descname">NS3CsmaNetDevice</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/csma_net_device.html#NS3CsmaNetDevice"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.csma_net_device.NS3CsmaNetDevice" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice" title="nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.drop_tail_queue">
+<span id="nepi-resources-ns3-classes-drop-tail-queue-module"></span><h2>nepi.resources.ns3.classes.drop_tail_queue module<a class="headerlink" href="#module-nepi.resources.ns3.classes.drop_tail_queue" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.drop_tail_queue.NS3DropTailQueue">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.drop_tail_queue.</tt><tt class="descname">NS3DropTailQueue</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/drop_tail_queue.html#NS3DropTailQueue"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.drop_tail_queue.NS3DropTailQueue" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3queue.NS3BaseQueue" title="nepi.resources.ns3.ns3queue.NS3BaseQueue"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3queue.NS3BaseQueue</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.dsrdsr_routing">
+<span id="nepi-resources-ns3-classes-dsrdsr-routing-module"></span><h2>nepi.resources.ns3.classes.dsrdsr_routing module<a class="headerlink" href="#module-nepi.resources.ns3.classes.dsrdsr_routing" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.dsrdsr_routing.NS3dsrDsrRouting">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.dsrdsr_routing.</tt><tt class="descname">NS3dsrDsrRouting</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/dsrdsr_routing.html#NS3dsrDsrRouting"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.dsrdsr_routing.NS3dsrDsrRouting" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3base.NS3Base" title="nepi.resources.ns3.ns3base.NS3Base"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3base.NS3Base</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.emu_net_device">
+<span id="nepi-resources-ns3-classes-emu-net-device-module"></span><h2>nepi.resources.ns3.classes.emu_net_device module<a class="headerlink" href="#module-nepi.resources.ns3.classes.emu_net_device" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.emu_net_device.NS3EmuNetDevice">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.emu_net_device.</tt><tt class="descname">NS3EmuNetDevice</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/emu_net_device.html#NS3EmuNetDevice"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.emu_net_device.NS3EmuNetDevice" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice" title="nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.error_channel">
+<span id="nepi-resources-ns3-classes-error-channel-module"></span><h2>nepi.resources.ns3.classes.error_channel module<a class="headerlink" href="#module-nepi.resources.ns3.classes.error_channel" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.error_channel.NS3ErrorChannel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.error_channel.</tt><tt class="descname">NS3ErrorChannel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/error_channel.html#NS3ErrorChannel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.error_channel.NS3ErrorChannel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3channel.NS3BaseChannel" title="nepi.resources.ns3.ns3channel.NS3BaseChannel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3channel.NS3BaseChannel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.error_channel_sixlow">
+<span id="nepi-resources-ns3-classes-error-channel-sixlow-module"></span><h2>nepi.resources.ns3.classes.error_channel_sixlow module<a class="headerlink" href="#module-nepi.resources.ns3.classes.error_channel_sixlow" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.error_channel_sixlow.NS3ErrorChannelSixlow">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.error_channel_sixlow.</tt><tt class="descname">NS3ErrorChannelSixlow</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/error_channel_sixlow.html#NS3ErrorChannelSixlow"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.error_channel_sixlow.NS3ErrorChannelSixlow" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3channel.NS3BaseChannel" title="nepi.resources.ns3.ns3channel.NS3BaseChannel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3channel.NS3BaseChannel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.error_net_device">
+<span id="nepi-resources-ns3-classes-error-net-device-module"></span><h2>nepi.resources.ns3.classes.error_net_device module<a class="headerlink" href="#module-nepi.resources.ns3.classes.error_net_device" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.error_net_device.NS3ErrorNetDevice">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.error_net_device.</tt><tt class="descname">NS3ErrorNetDevice</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/error_net_device.html#NS3ErrorNetDevice"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.error_net_device.NS3ErrorNetDevice" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice" title="nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.fd_net_device">
+<span id="nepi-resources-ns3-classes-fd-net-device-module"></span><h2>nepi.resources.ns3.classes.fd_net_device module<a class="headerlink" href="#module-nepi.resources.ns3.classes.fd_net_device" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.fd_net_device.NS3FdNetDevice">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.fd_net_device.</tt><tt class="descname">NS3FdNetDevice</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/fd_net_device.html#NS3FdNetDevice"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.fd_net_device.NS3FdNetDevice" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3fdnetdevice.NS3BaseFdNetDevice" title="nepi.resources.ns3.ns3fdnetdevice.NS3BaseFdNetDevice"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3fdnetdevice.NS3BaseFdNetDevice</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.fixed_rss_loss_model">
+<span id="nepi-resources-ns3-classes-fixed-rss-loss-model-module"></span><h2>nepi.resources.ns3.classes.fixed_rss_loss_model module<a class="headerlink" href="#module-nepi.resources.ns3.classes.fixed_rss_loss_model" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.fixed_rss_loss_model.NS3FixedRssLossModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.fixed_rss_loss_model.</tt><tt class="descname">NS3FixedRssLossModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/fixed_rss_loss_model.html#NS3FixedRssLossModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.fixed_rss_loss_model.NS3FixedRssLossModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel" title="nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.friis_propagation_loss_model">
+<span id="nepi-resources-ns3-classes-friis-propagation-loss-model-module"></span><h2>nepi.resources.ns3.classes.friis_propagation_loss_model module<a class="headerlink" href="#module-nepi.resources.ns3.classes.friis_propagation_loss_model" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.friis_propagation_loss_model.NS3FriisPropagationLossModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.friis_propagation_loss_model.</tt><tt class="descname">NS3FriisPropagationLossModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/friis_propagation_loss_model.html#NS3FriisPropagationLossModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.friis_propagation_loss_model.NS3FriisPropagationLossModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel" title="nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.gauss_markov_mobility_model">
+<span id="nepi-resources-ns3-classes-gauss-markov-mobility-model-module"></span><h2>nepi.resources.ns3.classes.gauss_markov_mobility_model module<a class="headerlink" href="#module-nepi.resources.ns3.classes.gauss_markov_mobility_model" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.gauss_markov_mobility_model.NS3GaussMarkovMobilityModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.gauss_markov_mobility_model.</tt><tt class="descname">NS3GaussMarkovMobilityModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/gauss_markov_mobility_model.html#NS3GaussMarkovMobilityModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.gauss_markov_mobility_model.NS3GaussMarkovMobilityModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3mobilitymodel.NS3BaseMobilityModel" title="nepi.resources.ns3.ns3mobilitymodel.NS3BaseMobilityModel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3mobilitymodel.NS3BaseMobilityModel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.hierarchical_mobility_model">
+<span id="nepi-resources-ns3-classes-hierarchical-mobility-model-module"></span><h2>nepi.resources.ns3.classes.hierarchical_mobility_model module<a class="headerlink" href="#module-nepi.resources.ns3.classes.hierarchical_mobility_model" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.hierarchical_mobility_model.NS3HierarchicalMobilityModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.hierarchical_mobility_model.</tt><tt class="descname">NS3HierarchicalMobilityModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/hierarchical_mobility_model.html#NS3HierarchicalMobilityModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.hierarchical_mobility_model.NS3HierarchicalMobilityModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3mobilitymodel.NS3BaseMobilityModel" title="nepi.resources.ns3.ns3mobilitymodel.NS3BaseMobilityModel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3mobilitymodel.NS3BaseMobilityModel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.hybrid_buildings_propagation_loss_model">
+<span id="nepi-resources-ns3-classes-hybrid-buildings-propagation-loss-model-module"></span><h2>nepi.resources.ns3.classes.hybrid_buildings_propagation_loss_model module<a class="headerlink" href="#module-nepi.resources.ns3.classes.hybrid_buildings_propagation_loss_model" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.hybrid_buildings_propagation_loss_model.NS3HybridBuildingsPropagationLossModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.hybrid_buildings_propagation_loss_model.</tt><tt class="descname">NS3HybridBuildingsPropagationLossModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/hybrid_buildings_propagation_loss_model.html#NS3HybridBuildingsPropagationLossModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.hybrid_buildings_propagation_loss_model.NS3HybridBuildingsPropagationLossModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel" title="nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.icmpv4l4protocol">
+<span id="nepi-resources-ns3-classes-icmpv4l4protocol-module"></span><h2>nepi.resources.ns3.classes.icmpv4l4protocol module<a class="headerlink" href="#module-nepi.resources.ns3.classes.icmpv4l4protocol" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.icmpv4l4protocol.NS3Icmpv4L4Protocol">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.icmpv4l4protocol.</tt><tt class="descname">NS3Icmpv4L4Protocol</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/icmpv4l4protocol.html#NS3Icmpv4L4Protocol"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.icmpv4l4protocol.NS3Icmpv4L4Protocol" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3icmpv4l4protocol.NS3BaseIcmpv4L4Protocol" title="nepi.resources.ns3.ns3icmpv4l4protocol.NS3BaseIcmpv4L4Protocol"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3icmpv4l4protocol.NS3BaseIcmpv4L4Protocol</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.icmpv6l4protocol">
+<span id="nepi-resources-ns3-classes-icmpv6l4protocol-module"></span><h2>nepi.resources.ns3.classes.icmpv6l4protocol module<a class="headerlink" href="#module-nepi.resources.ns3.classes.icmpv6l4protocol" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.icmpv6l4protocol.NS3Icmpv6L4Protocol">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.icmpv6l4protocol.</tt><tt class="descname">NS3Icmpv6L4Protocol</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/icmpv6l4protocol.html#NS3Icmpv6L4Protocol"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.icmpv6l4protocol.NS3Icmpv6L4Protocol" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3base.NS3Base" title="nepi.resources.ns3.ns3base.NS3Base"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3base.NS3Base</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.ideal_wifi_manager">
+<span id="nepi-resources-ns3-classes-ideal-wifi-manager-module"></span><h2>nepi.resources.ns3.classes.ideal_wifi_manager module<a class="headerlink" href="#module-nepi.resources.ns3.classes.ideal_wifi_manager" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.ideal_wifi_manager.NS3IdealWifiManager">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.ideal_wifi_manager.</tt><tt class="descname">NS3IdealWifiManager</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/ideal_wifi_manager.html#NS3IdealWifiManager"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.ideal_wifi_manager.NS3IdealWifiManager" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager" title="nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.ipv4l3protocol">
+<span id="nepi-resources-ns3-classes-ipv4l3protocol-module"></span><h2>nepi.resources.ns3.classes.ipv4l3protocol module<a class="headerlink" href="#module-nepi.resources.ns3.classes.ipv4l3protocol" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.ipv4l3protocol.NS3Ipv4L3Protocol">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.ipv4l3protocol.</tt><tt class="descname">NS3Ipv4L3Protocol</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/ipv4l3protocol.html#NS3Ipv4L3Protocol"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.ipv4l3protocol.NS3Ipv4L3Protocol" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3ipv4l3protocol.NS3BaseIpv4L3Protocol" title="nepi.resources.ns3.ns3ipv4l3protocol.NS3BaseIpv4L3Protocol"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3ipv4l3protocol.NS3BaseIpv4L3Protocol</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.itu_r1411los_propagation_loss_model">
+<span id="nepi-resources-ns3-classes-itu-r1411los-propagation-loss-model-module"></span><h2>nepi.resources.ns3.classes.itu_r1411los_propagation_loss_model module<a class="headerlink" href="#module-nepi.resources.ns3.classes.itu_r1411los_propagation_loss_model" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.itu_r1411los_propagation_loss_model.NS3ItuR1411LosPropagationLossModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.itu_r1411los_propagation_loss_model.</tt><tt class="descname">NS3ItuR1411LosPropagationLossModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/itu_r1411los_propagation_loss_model.html#NS3ItuR1411LosPropagationLossModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.itu_r1411los_propagation_loss_model.NS3ItuR1411LosPropagationLossModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel" title="nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.itu_r1411nlos_over_rooftop_propagation_loss_model">
+<span id="nepi-resources-ns3-classes-itu-r1411nlos-over-rooftop-propagation-loss-model-module"></span><h2>nepi.resources.ns3.classes.itu_r1411nlos_over_rooftop_propagation_loss_model module<a class="headerlink" href="#module-nepi.resources.ns3.classes.itu_r1411nlos_over_rooftop_propagation_loss_model" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.itu_r1411nlos_over_rooftop_propagation_loss_model.NS3ItuR1411NlosOverRooftopPropagationLossModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.itu_r1411nlos_over_rooftop_propagation_loss_model.</tt><tt class="descname">NS3ItuR1411NlosOverRooftopPropagationLossModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/itu_r1411nlos_over_rooftop_propagation_loss_model.html#NS3ItuR1411NlosOverRooftopPropagationLossModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.itu_r1411nlos_over_rooftop_propagation_loss_model.NS3ItuR1411NlosOverRooftopPropagationLossModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel" title="nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.jakes_propagation_loss_model">
+<span id="nepi-resources-ns3-classes-jakes-propagation-loss-model-module"></span><h2>nepi.resources.ns3.classes.jakes_propagation_loss_model module<a class="headerlink" href="#module-nepi.resources.ns3.classes.jakes_propagation_loss_model" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.jakes_propagation_loss_model.NS3JakesPropagationLossModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.jakes_propagation_loss_model.</tt><tt class="descname">NS3JakesPropagationLossModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/jakes_propagation_loss_model.html#NS3JakesPropagationLossModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.jakes_propagation_loss_model.NS3JakesPropagationLossModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel" title="nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.kun2600mhz_propagation_loss_model">
+<span id="nepi-resources-ns3-classes-kun2600mhz-propagation-loss-model-module"></span><h2>nepi.resources.ns3.classes.kun2600mhz_propagation_loss_model module<a class="headerlink" href="#module-nepi.resources.ns3.classes.kun2600mhz_propagation_loss_model" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.kun2600mhz_propagation_loss_model.NS3Kun2600MhzPropagationLossModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.kun2600mhz_propagation_loss_model.</tt><tt class="descname">NS3Kun2600MhzPropagationLossModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/kun2600mhz_propagation_loss_model.html#NS3Kun2600MhzPropagationLossModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.kun2600mhz_propagation_loss_model.NS3Kun2600MhzPropagationLossModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel" title="nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.list_error_model">
+<span id="nepi-resources-ns3-classes-list-error-model-module"></span><h2>nepi.resources.ns3.classes.list_error_model module<a class="headerlink" href="#module-nepi.resources.ns3.classes.list_error_model" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.list_error_model.NS3ListErrorModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.list_error_model.</tt><tt class="descname">NS3ListErrorModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/list_error_model.html#NS3ListErrorModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.list_error_model.NS3ListErrorModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3errormodel.NS3BaseErrorModel" title="nepi.resources.ns3.ns3errormodel.NS3BaseErrorModel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3errormodel.NS3BaseErrorModel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.log_distance_propagation_loss_model">
+<span id="nepi-resources-ns3-classes-log-distance-propagation-loss-model-module"></span><h2>nepi.resources.ns3.classes.log_distance_propagation_loss_model module<a class="headerlink" href="#module-nepi.resources.ns3.classes.log_distance_propagation_loss_model" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.log_distance_propagation_loss_model.NS3LogDistancePropagationLossModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.log_distance_propagation_loss_model.</tt><tt class="descname">NS3LogDistancePropagationLossModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/log_distance_propagation_loss_model.html#NS3LogDistancePropagationLossModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.log_distance_propagation_loss_model.NS3LogDistancePropagationLossModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel" title="nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.loopback_net_device">
+<span id="nepi-resources-ns3-classes-loopback-net-device-module"></span><h2>nepi.resources.ns3.classes.loopback_net_device module<a class="headerlink" href="#module-nepi.resources.ns3.classes.loopback_net_device" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.loopback_net_device.NS3LoopbackNetDevice">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.loopback_net_device.</tt><tt class="descname">NS3LoopbackNetDevice</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/loopback_net_device.html#NS3LoopbackNetDevice"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.loopback_net_device.NS3LoopbackNetDevice" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice" title="nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.lr_wpan_net_device">
+<span id="nepi-resources-ns3-classes-lr-wpan-net-device-module"></span><h2>nepi.resources.ns3.classes.lr_wpan_net_device module<a class="headerlink" href="#module-nepi.resources.ns3.classes.lr_wpan_net_device" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.lr_wpan_net_device.NS3LrWpanNetDevice">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.lr_wpan_net_device.</tt><tt class="descname">NS3LrWpanNetDevice</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/lr_wpan_net_device.html#NS3LrWpanNetDevice"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.lr_wpan_net_device.NS3LrWpanNetDevice" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice" title="nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.lte_enb_net_device">
+<span id="nepi-resources-ns3-classes-lte-enb-net-device-module"></span><h2>nepi.resources.ns3.classes.lte_enb_net_device module<a class="headerlink" href="#module-nepi.resources.ns3.classes.lte_enb_net_device" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.lte_enb_net_device.NS3LteEnbNetDevice">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.lte_enb_net_device.</tt><tt class="descname">NS3LteEnbNetDevice</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/lte_enb_net_device.html#NS3LteEnbNetDevice"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.lte_enb_net_device.NS3LteEnbNetDevice" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice" title="nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.lte_simple_net_device">
+<span id="nepi-resources-ns3-classes-lte-simple-net-device-module"></span><h2>nepi.resources.ns3.classes.lte_simple_net_device module<a class="headerlink" href="#module-nepi.resources.ns3.classes.lte_simple_net_device" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.lte_simple_net_device.NS3LteSimpleNetDevice">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.lte_simple_net_device.</tt><tt class="descname">NS3LteSimpleNetDevice</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/lte_simple_net_device.html#NS3LteSimpleNetDevice"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.lte_simple_net_device.NS3LteSimpleNetDevice" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice" title="nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.lte_ue_net_device">
+<span id="nepi-resources-ns3-classes-lte-ue-net-device-module"></span><h2>nepi.resources.ns3.classes.lte_ue_net_device module<a class="headerlink" href="#module-nepi.resources.ns3.classes.lte_ue_net_device" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.lte_ue_net_device.NS3LteUeNetDevice">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.lte_ue_net_device.</tt><tt class="descname">NS3LteUeNetDevice</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/lte_ue_net_device.html#NS3LteUeNetDevice"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.lte_ue_net_device.NS3LteUeNetDevice" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice" title="nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.matrix_propagation_loss_model">
+<span id="nepi-resources-ns3-classes-matrix-propagation-loss-model-module"></span><h2>nepi.resources.ns3.classes.matrix_propagation_loss_model module<a class="headerlink" href="#module-nepi.resources.ns3.classes.matrix_propagation_loss_model" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.matrix_propagation_loss_model.NS3MatrixPropagationLossModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.matrix_propagation_loss_model.</tt><tt class="descname">NS3MatrixPropagationLossModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/matrix_propagation_loss_model.html#NS3MatrixPropagationLossModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.matrix_propagation_loss_model.NS3MatrixPropagationLossModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel" title="nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.mesh_point_device">
+<span id="nepi-resources-ns3-classes-mesh-point-device-module"></span><h2>nepi.resources.ns3.classes.mesh_point_device module<a class="headerlink" href="#module-nepi.resources.ns3.classes.mesh_point_device" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.mesh_point_device.NS3MeshPointDevice">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.mesh_point_device.</tt><tt class="descname">NS3MeshPointDevice</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/mesh_point_device.html#NS3MeshPointDevice"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.mesh_point_device.NS3MeshPointDevice" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice" title="nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.mesh_wifi_interface_mac">
+<span id="nepi-resources-ns3-classes-mesh-wifi-interface-mac-module"></span><h2>nepi.resources.ns3.classes.mesh_wifi_interface_mac module<a class="headerlink" href="#module-nepi.resources.ns3.classes.mesh_wifi_interface_mac" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.mesh_wifi_interface_mac.NS3MeshWifiInterfaceMac">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.mesh_wifi_interface_mac.</tt><tt class="descname">NS3MeshWifiInterfaceMac</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/mesh_wifi_interface_mac.html#NS3MeshWifiInterfaceMac"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.mesh_wifi_interface_mac.NS3MeshWifiInterfaceMac" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3wifimac.NS3BaseWifiMac" title="nepi.resources.ns3.ns3wifimac.NS3BaseWifiMac"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3wifimac.NS3BaseWifiMac</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.minstrel_wifi_manager">
+<span id="nepi-resources-ns3-classes-minstrel-wifi-manager-module"></span><h2>nepi.resources.ns3.classes.minstrel_wifi_manager module<a class="headerlink" href="#module-nepi.resources.ns3.classes.minstrel_wifi_manager" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.minstrel_wifi_manager.NS3MinstrelWifiManager">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.minstrel_wifi_manager.</tt><tt class="descname">NS3MinstrelWifiManager</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/minstrel_wifi_manager.html#NS3MinstrelWifiManager"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.minstrel_wifi_manager.NS3MinstrelWifiManager" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager" title="nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.multi_model_spectrum_channel">
+<span id="nepi-resources-ns3-classes-multi-model-spectrum-channel-module"></span><h2>nepi.resources.ns3.classes.multi_model_spectrum_channel module<a class="headerlink" href="#module-nepi.resources.ns3.classes.multi_model_spectrum_channel" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.multi_model_spectrum_channel.NS3MultiModelSpectrumChannel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.multi_model_spectrum_channel.</tt><tt class="descname">NS3MultiModelSpectrumChannel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/multi_model_spectrum_channel.html#NS3MultiModelSpectrumChannel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.multi_model_spectrum_channel.NS3MultiModelSpectrumChannel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3channel.NS3BaseChannel" title="nepi.resources.ns3.ns3channel.NS3BaseChannel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3channel.NS3BaseChannel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.nakagami_propagation_loss_model">
+<span id="nepi-resources-ns3-classes-nakagami-propagation-loss-model-module"></span><h2>nepi.resources.ns3.classes.nakagami_propagation_loss_model module<a class="headerlink" href="#module-nepi.resources.ns3.classes.nakagami_propagation_loss_model" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.nakagami_propagation_loss_model.NS3NakagamiPropagationLossModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.nakagami_propagation_loss_model.</tt><tt class="descname">NS3NakagamiPropagationLossModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/nakagami_propagation_loss_model.html#NS3NakagamiPropagationLossModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.nakagami_propagation_loss_model.NS3NakagamiPropagationLossModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel" title="nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.nist_error_rate_model">
+<span id="nepi-resources-ns3-classes-nist-error-rate-model-module"></span><h2>nepi.resources.ns3.classes.nist_error_rate_model module<a class="headerlink" href="#module-nepi.resources.ns3.classes.nist_error_rate_model" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.nist_error_rate_model.NS3NistErrorRateModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.nist_error_rate_model.</tt><tt class="descname">NS3NistErrorRateModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/nist_error_rate_model.html#NS3NistErrorRateModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.nist_error_rate_model.NS3NistErrorRateModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3errorratemodel.NS3BaseErrorRateModel" title="nepi.resources.ns3.ns3errorratemodel.NS3BaseErrorRateModel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3errorratemodel.NS3BaseErrorRateModel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.node">
+<span id="nepi-resources-ns3-classes-node-module"></span><h2>nepi.resources.ns3.classes.node module<a class="headerlink" href="#module-nepi.resources.ns3.classes.node" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.node.NS3Node">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.node.</tt><tt class="descname">NS3Node</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/node.html#NS3Node"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.node.NS3Node" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3node.NS3BaseNode" title="nepi.resources.ns3.ns3node.NS3BaseNode"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3node.NS3BaseNode</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.non_communicating_net_device">
+<span id="nepi-resources-ns3-classes-non-communicating-net-device-module"></span><h2>nepi.resources.ns3.classes.non_communicating_net_device module<a class="headerlink" href="#module-nepi.resources.ns3.classes.non_communicating_net_device" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.non_communicating_net_device.NS3NonCommunicatingNetDevice">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.non_communicating_net_device.</tt><tt class="descname">NS3NonCommunicatingNetDevice</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/non_communicating_net_device.html#NS3NonCommunicatingNetDevice"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.non_communicating_net_device.NS3NonCommunicatingNetDevice" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice" title="nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.ocb_wifi_mac">
+<span id="nepi-resources-ns3-classes-ocb-wifi-mac-module"></span><h2>nepi.resources.ns3.classes.ocb_wifi_mac module<a class="headerlink" href="#module-nepi.resources.ns3.classes.ocb_wifi_mac" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.ocb_wifi_mac.NS3OcbWifiMac">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.ocb_wifi_mac.</tt><tt class="descname">NS3OcbWifiMac</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/ocb_wifi_mac.html#NS3OcbWifiMac"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.ocb_wifi_mac.NS3OcbWifiMac" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3wifimac.NS3BaseWifiMac" title="nepi.resources.ns3.ns3wifimac.NS3BaseWifiMac"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3wifimac.NS3BaseWifiMac</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.oh_buildings_propagation_loss_model">
+<span id="nepi-resources-ns3-classes-oh-buildings-propagation-loss-model-module"></span><h2>nepi.resources.ns3.classes.oh_buildings_propagation_loss_model module<a class="headerlink" href="#module-nepi.resources.ns3.classes.oh_buildings_propagation_loss_model" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.oh_buildings_propagation_loss_model.NS3OhBuildingsPropagationLossModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.oh_buildings_propagation_loss_model.</tt><tt class="descname">NS3OhBuildingsPropagationLossModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/oh_buildings_propagation_loss_model.html#NS3OhBuildingsPropagationLossModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.oh_buildings_propagation_loss_model.NS3OhBuildingsPropagationLossModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel" title="nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.okumura_hata_propagation_loss_model">
+<span id="nepi-resources-ns3-classes-okumura-hata-propagation-loss-model-module"></span><h2>nepi.resources.ns3.classes.okumura_hata_propagation_loss_model module<a class="headerlink" href="#module-nepi.resources.ns3.classes.okumura_hata_propagation_loss_model" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.okumura_hata_propagation_loss_model.NS3OkumuraHataPropagationLossModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.okumura_hata_propagation_loss_model.</tt><tt class="descname">NS3OkumuraHataPropagationLossModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/okumura_hata_propagation_loss_model.html#NS3OkumuraHataPropagationLossModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.okumura_hata_propagation_loss_model.NS3OkumuraHataPropagationLossModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel" title="nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.on_off_application">
+<span id="nepi-resources-ns3-classes-on-off-application-module"></span><h2>nepi.resources.ns3.classes.on_off_application module<a class="headerlink" href="#module-nepi.resources.ns3.classes.on_off_application" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.on_off_application.NS3OnOffApplication">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.on_off_application.</tt><tt class="descname">NS3OnOffApplication</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/on_off_application.html#NS3OnOffApplication"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.on_off_application.NS3OnOffApplication" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3application.NS3BaseApplication" title="nepi.resources.ns3.ns3application.NS3BaseApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3application.NS3BaseApplication</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.onoe_wifi_manager">
+<span id="nepi-resources-ns3-classes-onoe-wifi-manager-module"></span><h2>nepi.resources.ns3.classes.onoe_wifi_manager module<a class="headerlink" href="#module-nepi.resources.ns3.classes.onoe_wifi_manager" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.onoe_wifi_manager.NS3OnoeWifiManager">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.onoe_wifi_manager.</tt><tt class="descname">NS3OnoeWifiManager</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/onoe_wifi_manager.html#NS3OnoeWifiManager"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.onoe_wifi_manager.NS3OnoeWifiManager" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager" title="nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.packet_sink">
+<span id="nepi-resources-ns3-classes-packet-sink-module"></span><h2>nepi.resources.ns3.classes.packet_sink module<a class="headerlink" href="#module-nepi.resources.ns3.classes.packet_sink" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.packet_sink.NS3PacketSink">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.packet_sink.</tt><tt class="descname">NS3PacketSink</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/packet_sink.html#NS3PacketSink"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.packet_sink.NS3PacketSink" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3application.NS3BaseApplication" title="nepi.resources.ns3.ns3application.NS3BaseApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3application.NS3BaseApplication</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.ping6">
+<span id="nepi-resources-ns3-classes-ping6-module"></span><h2>nepi.resources.ns3.classes.ping6 module<a class="headerlink" href="#module-nepi.resources.ns3.classes.ping6" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.ping6.NS3Ping6">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.ping6.</tt><tt class="descname">NS3Ping6</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/ping6.html#NS3Ping6"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.ping6.NS3Ping6" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3application.NS3BaseApplication" title="nepi.resources.ns3.ns3application.NS3BaseApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3application.NS3BaseApplication</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.point_to_point_channel">
+<span id="nepi-resources-ns3-classes-point-to-point-channel-module"></span><h2>nepi.resources.ns3.classes.point_to_point_channel module<a class="headerlink" href="#module-nepi.resources.ns3.classes.point_to_point_channel" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.point_to_point_channel.NS3PointToPointChannel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.point_to_point_channel.</tt><tt class="descname">NS3PointToPointChannel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/point_to_point_channel.html#NS3PointToPointChannel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.point_to_point_channel.NS3PointToPointChannel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3channel.NS3BaseChannel" title="nepi.resources.ns3.ns3channel.NS3BaseChannel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3channel.NS3BaseChannel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.point_to_point_net_device">
+<span id="nepi-resources-ns3-classes-point-to-point-net-device-module"></span><h2>nepi.resources.ns3.classes.point_to_point_net_device module<a class="headerlink" href="#module-nepi.resources.ns3.classes.point_to_point_net_device" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.point_to_point_net_device.NS3PointToPointNetDevice">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.point_to_point_net_device.</tt><tt class="descname">NS3PointToPointNetDevice</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/point_to_point_net_device.html#NS3PointToPointNetDevice"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.point_to_point_net_device.NS3PointToPointNetDevice" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice" title="nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.point_to_point_remote_channel">
+<span id="nepi-resources-ns3-classes-point-to-point-remote-channel-module"></span><h2>nepi.resources.ns3.classes.point_to_point_remote_channel module<a class="headerlink" href="#module-nepi.resources.ns3.classes.point_to_point_remote_channel" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.point_to_point_remote_channel.NS3PointToPointRemoteChannel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.point_to_point_remote_channel.</tt><tt class="descname">NS3PointToPointRemoteChannel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/point_to_point_remote_channel.html#NS3PointToPointRemoteChannel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.point_to_point_remote_channel.NS3PointToPointRemoteChannel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3channel.NS3BaseChannel" title="nepi.resources.ns3.ns3channel.NS3BaseChannel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3channel.NS3BaseChannel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.radvd">
+<span id="nepi-resources-ns3-classes-radvd-module"></span><h2>nepi.resources.ns3.classes.radvd module<a class="headerlink" href="#module-nepi.resources.ns3.classes.radvd" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.radvd.NS3Radvd">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.radvd.</tt><tt class="descname">NS3Radvd</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/radvd.html#NS3Radvd"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.radvd.NS3Radvd" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3application.NS3BaseApplication" title="nepi.resources.ns3.ns3application.NS3BaseApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3application.NS3BaseApplication</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.random_direction2d_mobility_model">
+<span id="nepi-resources-ns3-classes-random-direction2d-mobility-model-module"></span><h2>nepi.resources.ns3.classes.random_direction2d_mobility_model module<a class="headerlink" href="#module-nepi.resources.ns3.classes.random_direction2d_mobility_model" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.random_direction2d_mobility_model.NS3RandomDirection2dMobilityModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.random_direction2d_mobility_model.</tt><tt class="descname">NS3RandomDirection2dMobilityModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/random_direction2d_mobility_model.html#NS3RandomDirection2dMobilityModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.random_direction2d_mobility_model.NS3RandomDirection2dMobilityModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3mobilitymodel.NS3BaseMobilityModel" title="nepi.resources.ns3.ns3mobilitymodel.NS3BaseMobilityModel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3mobilitymodel.NS3BaseMobilityModel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.random_propagation_delay_model">
+<span id="nepi-resources-ns3-classes-random-propagation-delay-model-module"></span><h2>nepi.resources.ns3.classes.random_propagation_delay_model module<a class="headerlink" href="#module-nepi.resources.ns3.classes.random_propagation_delay_model" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.random_propagation_delay_model.NS3RandomPropagationDelayModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.random_propagation_delay_model.</tt><tt class="descname">NS3RandomPropagationDelayModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/random_propagation_delay_model.html#NS3RandomPropagationDelayModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.random_propagation_delay_model.NS3RandomPropagationDelayModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3propagationdelaymodel.NS3BasePropagationDelayModel" title="nepi.resources.ns3.ns3propagationdelaymodel.NS3BasePropagationDelayModel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3propagationdelaymodel.NS3BasePropagationDelayModel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.random_propagation_loss_model">
+<span id="nepi-resources-ns3-classes-random-propagation-loss-model-module"></span><h2>nepi.resources.ns3.classes.random_propagation_loss_model module<a class="headerlink" href="#module-nepi.resources.ns3.classes.random_propagation_loss_model" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.random_propagation_loss_model.NS3RandomPropagationLossModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.random_propagation_loss_model.</tt><tt class="descname">NS3RandomPropagationLossModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/random_propagation_loss_model.html#NS3RandomPropagationLossModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.random_propagation_loss_model.NS3RandomPropagationLossModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel" title="nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.random_walk2d_mobility_model">
+<span id="nepi-resources-ns3-classes-random-walk2d-mobility-model-module"></span><h2>nepi.resources.ns3.classes.random_walk2d_mobility_model module<a class="headerlink" href="#module-nepi.resources.ns3.classes.random_walk2d_mobility_model" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.random_walk2d_mobility_model.NS3RandomWalk2dMobilityModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.random_walk2d_mobility_model.</tt><tt class="descname">NS3RandomWalk2dMobilityModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/random_walk2d_mobility_model.html#NS3RandomWalk2dMobilityModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.random_walk2d_mobility_model.NS3RandomWalk2dMobilityModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3mobilitymodel.NS3BaseMobilityModel" title="nepi.resources.ns3.ns3mobilitymodel.NS3BaseMobilityModel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3mobilitymodel.NS3BaseMobilityModel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.random_waypoint_mobility_model">
+<span id="nepi-resources-ns3-classes-random-waypoint-mobility-model-module"></span><h2>nepi.resources.ns3.classes.random_waypoint_mobility_model module<a class="headerlink" href="#module-nepi.resources.ns3.classes.random_waypoint_mobility_model" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.random_waypoint_mobility_model.NS3RandomWaypointMobilityModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.random_waypoint_mobility_model.</tt><tt class="descname">NS3RandomWaypointMobilityModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/random_waypoint_mobility_model.html#NS3RandomWaypointMobilityModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.random_waypoint_mobility_model.NS3RandomWaypointMobilityModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3mobilitymodel.NS3BaseMobilityModel" title="nepi.resources.ns3.ns3mobilitymodel.NS3BaseMobilityModel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3mobilitymodel.NS3BaseMobilityModel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.range_propagation_loss_model">
+<span id="nepi-resources-ns3-classes-range-propagation-loss-model-module"></span><h2>nepi.resources.ns3.classes.range_propagation_loss_model module<a class="headerlink" href="#module-nepi.resources.ns3.classes.range_propagation_loss_model" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.range_propagation_loss_model.NS3RangePropagationLossModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.range_propagation_loss_model.</tt><tt class="descname">NS3RangePropagationLossModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/range_propagation_loss_model.html#NS3RangePropagationLossModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.range_propagation_loss_model.NS3RangePropagationLossModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel" title="nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.rate_error_model">
+<span id="nepi-resources-ns3-classes-rate-error-model-module"></span><h2>nepi.resources.ns3.classes.rate_error_model module<a class="headerlink" href="#module-nepi.resources.ns3.classes.rate_error_model" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.rate_error_model.NS3RateErrorModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.rate_error_model.</tt><tt class="descname">NS3RateErrorModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/rate_error_model.html#NS3RateErrorModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.rate_error_model.NS3RateErrorModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3errormodel.NS3BaseErrorModel" title="nepi.resources.ns3.ns3errormodel.NS3BaseErrorModel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3errormodel.NS3BaseErrorModel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.receive_list_error_model">
+<span id="nepi-resources-ns3-classes-receive-list-error-model-module"></span><h2>nepi.resources.ns3.classes.receive_list_error_model module<a class="headerlink" href="#module-nepi.resources.ns3.classes.receive_list_error_model" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.receive_list_error_model.NS3ReceiveListErrorModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.receive_list_error_model.</tt><tt class="descname">NS3ReceiveListErrorModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/receive_list_error_model.html#NS3ReceiveListErrorModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.receive_list_error_model.NS3ReceiveListErrorModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3errormodel.NS3BaseErrorModel" title="nepi.resources.ns3.ns3errormodel.NS3BaseErrorModel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3errormodel.NS3BaseErrorModel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.red_queue">
+<span id="nepi-resources-ns3-classes-red-queue-module"></span><h2>nepi.resources.ns3.classes.red_queue module<a class="headerlink" href="#module-nepi.resources.ns3.classes.red_queue" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.red_queue.NS3RedQueue">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.red_queue.</tt><tt class="descname">NS3RedQueue</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/red_queue.html#NS3RedQueue"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.red_queue.NS3RedQueue" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3queue.NS3BaseQueue" title="nepi.resources.ns3.ns3queue.NS3BaseQueue"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3queue.NS3BaseQueue</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.rraa_wifi_manager">
+<span id="nepi-resources-ns3-classes-rraa-wifi-manager-module"></span><h2>nepi.resources.ns3.classes.rraa_wifi_manager module<a class="headerlink" href="#module-nepi.resources.ns3.classes.rraa_wifi_manager" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.rraa_wifi_manager.NS3RraaWifiManager">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.rraa_wifi_manager.</tt><tt class="descname">NS3RraaWifiManager</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/rraa_wifi_manager.html#NS3RraaWifiManager"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.rraa_wifi_manager.NS3RraaWifiManager" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager" title="nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.simple_channel">
+<span id="nepi-resources-ns3-classes-simple-channel-module"></span><h2>nepi.resources.ns3.classes.simple_channel module<a class="headerlink" href="#module-nepi.resources.ns3.classes.simple_channel" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.simple_channel.NS3SimpleChannel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.simple_channel.</tt><tt class="descname">NS3SimpleChannel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/simple_channel.html#NS3SimpleChannel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.simple_channel.NS3SimpleChannel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3channel.NS3BaseChannel" title="nepi.resources.ns3.ns3channel.NS3BaseChannel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3channel.NS3BaseChannel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.simple_net_device">
+<span id="nepi-resources-ns3-classes-simple-net-device-module"></span><h2>nepi.resources.ns3.classes.simple_net_device module<a class="headerlink" href="#module-nepi.resources.ns3.classes.simple_net_device" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.simple_net_device.NS3SimpleNetDevice">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.simple_net_device.</tt><tt class="descname">NS3SimpleNetDevice</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/simple_net_device.html#NS3SimpleNetDevice"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.simple_net_device.NS3SimpleNetDevice" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice" title="nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.single_model_spectrum_channel">
+<span id="nepi-resources-ns3-classes-single-model-spectrum-channel-module"></span><h2>nepi.resources.ns3.classes.single_model_spectrum_channel module<a class="headerlink" href="#module-nepi.resources.ns3.classes.single_model_spectrum_channel" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.single_model_spectrum_channel.NS3SingleModelSpectrumChannel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.single_model_spectrum_channel.</tt><tt class="descname">NS3SingleModelSpectrumChannel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/single_model_spectrum_channel.html#NS3SingleModelSpectrumChannel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.single_model_spectrum_channel.NS3SingleModelSpectrumChannel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3channel.NS3BaseChannel" title="nepi.resources.ns3.ns3channel.NS3BaseChannel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3channel.NS3BaseChannel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.six_low_pan_net_device">
+<span id="nepi-resources-ns3-classes-six-low-pan-net-device-module"></span><h2>nepi.resources.ns3.classes.six_low_pan_net_device module<a class="headerlink" href="#module-nepi.resources.ns3.classes.six_low_pan_net_device" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.six_low_pan_net_device.NS3SixLowPanNetDevice">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.six_low_pan_net_device.</tt><tt class="descname">NS3SixLowPanNetDevice</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/six_low_pan_net_device.html#NS3SixLowPanNetDevice"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.six_low_pan_net_device.NS3SixLowPanNetDevice" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice" title="nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.sta_wifi_mac">
+<span id="nepi-resources-ns3-classes-sta-wifi-mac-module"></span><h2>nepi.resources.ns3.classes.sta_wifi_mac module<a class="headerlink" href="#module-nepi.resources.ns3.classes.sta_wifi_mac" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.sta_wifi_mac.NS3StaWifiMac">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.sta_wifi_mac.</tt><tt class="descname">NS3StaWifiMac</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/sta_wifi_mac.html#NS3StaWifiMac"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.sta_wifi_mac.NS3StaWifiMac" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3wifimac.NS3BaseWifiMac" title="nepi.resources.ns3.ns3wifimac.NS3BaseWifiMac"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3wifimac.NS3BaseWifiMac</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.steady_state_random_waypoint_mobility_model">
+<span id="nepi-resources-ns3-classes-steady-state-random-waypoint-mobility-model-module"></span><h2>nepi.resources.ns3.classes.steady_state_random_waypoint_mobility_model module<a class="headerlink" href="#module-nepi.resources.ns3.classes.steady_state_random_waypoint_mobility_model" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.steady_state_random_waypoint_mobility_model.NS3SteadyStateRandomWaypointMobilityModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.steady_state_random_waypoint_mobility_model.</tt><tt class="descname">NS3SteadyStateRandomWaypointMobilityModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/steady_state_random_waypoint_mobility_model.html#NS3SteadyStateRandomWaypointMobilityModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.steady_state_random_waypoint_mobility_model.NS3SteadyStateRandomWaypointMobilityModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3mobilitymodel.NS3BaseMobilityModel" title="nepi.resources.ns3.ns3mobilitymodel.NS3BaseMobilityModel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3mobilitymodel.NS3BaseMobilityModel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.subscriber_station_net_device">
+<span id="nepi-resources-ns3-classes-subscriber-station-net-device-module"></span><h2>nepi.resources.ns3.classes.subscriber_station_net_device module<a class="headerlink" href="#module-nepi.resources.ns3.classes.subscriber_station_net_device" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.subscriber_station_net_device.NS3SubscriberStationNetDevice">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.subscriber_station_net_device.</tt><tt class="descname">NS3SubscriberStationNetDevice</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/subscriber_station_net_device.html#NS3SubscriberStationNetDevice"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.subscriber_station_net_device.NS3SubscriberStationNetDevice" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice" title="nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.tap_bridge">
+<span id="nepi-resources-ns3-classes-tap-bridge-module"></span><h2>nepi.resources.ns3.classes.tap_bridge module<a class="headerlink" href="#module-nepi.resources.ns3.classes.tap_bridge" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.tap_bridge.NS3TapBridge">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.tap_bridge.</tt><tt class="descname">NS3TapBridge</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/tap_bridge.html#NS3TapBridge"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.tap_bridge.NS3TapBridge" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice" title="nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.tcp_l4protocol">
+<span id="nepi-resources-ns3-classes-tcp-l4protocol-module"></span><h2>nepi.resources.ns3.classes.tcp_l4protocol module<a class="headerlink" href="#module-nepi.resources.ns3.classes.tcp_l4protocol" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.tcp_l4protocol.NS3TcpL4Protocol">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.tcp_l4protocol.</tt><tt class="descname">NS3TcpL4Protocol</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/tcp_l4protocol.html#NS3TcpL4Protocol"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.tcp_l4protocol.NS3TcpL4Protocol" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3base.NS3Base" title="nepi.resources.ns3.ns3base.NS3Base"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3base.NS3Base</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.three_log_distance_propagation_loss_model">
+<span id="nepi-resources-ns3-classes-three-log-distance-propagation-loss-model-module"></span><h2>nepi.resources.ns3.classes.three_log_distance_propagation_loss_model module<a class="headerlink" href="#module-nepi.resources.ns3.classes.three_log_distance_propagation_loss_model" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.three_log_distance_propagation_loss_model.NS3ThreeLogDistancePropagationLossModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.three_log_distance_propagation_loss_model.</tt><tt class="descname">NS3ThreeLogDistancePropagationLossModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/three_log_distance_propagation_loss_model.html#NS3ThreeLogDistancePropagationLossModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.three_log_distance_propagation_loss_model.NS3ThreeLogDistancePropagationLossModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel" title="nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.two_ray_ground_propagation_loss_model">
+<span id="nepi-resources-ns3-classes-two-ray-ground-propagation-loss-model-module"></span><h2>nepi.resources.ns3.classes.two_ray_ground_propagation_loss_model module<a class="headerlink" href="#module-nepi.resources.ns3.classes.two_ray_ground_propagation_loss_model" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.two_ray_ground_propagation_loss_model.NS3TwoRayGroundPropagationLossModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.two_ray_ground_propagation_loss_model.</tt><tt class="descname">NS3TwoRayGroundPropagationLossModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/two_ray_ground_propagation_loss_model.html#NS3TwoRayGroundPropagationLossModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.two_ray_ground_propagation_loss_model.NS3TwoRayGroundPropagationLossModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel" title="nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.uan_channel">
+<span id="nepi-resources-ns3-classes-uan-channel-module"></span><h2>nepi.resources.ns3.classes.uan_channel module<a class="headerlink" href="#module-nepi.resources.ns3.classes.uan_channel" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.uan_channel.NS3UanChannel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.uan_channel.</tt><tt class="descname">NS3UanChannel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/uan_channel.html#NS3UanChannel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.uan_channel.NS3UanChannel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3channel.NS3BaseChannel" title="nepi.resources.ns3.ns3channel.NS3BaseChannel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3channel.NS3BaseChannel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.udp_client">
+<span id="nepi-resources-ns3-classes-udp-client-module"></span><h2>nepi.resources.ns3.classes.udp_client module<a class="headerlink" href="#module-nepi.resources.ns3.classes.udp_client" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.udp_client.NS3UdpClient">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.udp_client.</tt><tt class="descname">NS3UdpClient</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/udp_client.html#NS3UdpClient"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.udp_client.NS3UdpClient" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3application.NS3BaseApplication" title="nepi.resources.ns3.ns3application.NS3BaseApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3application.NS3BaseApplication</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.udp_echo_client">
+<span id="nepi-resources-ns3-classes-udp-echo-client-module"></span><h2>nepi.resources.ns3.classes.udp_echo_client module<a class="headerlink" href="#module-nepi.resources.ns3.classes.udp_echo_client" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.udp_echo_client.NS3UdpEchoClient">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.udp_echo_client.</tt><tt class="descname">NS3UdpEchoClient</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/udp_echo_client.html#NS3UdpEchoClient"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.udp_echo_client.NS3UdpEchoClient" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3application.NS3BaseApplication" title="nepi.resources.ns3.ns3application.NS3BaseApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3application.NS3BaseApplication</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.udp_echo_server">
+<span id="nepi-resources-ns3-classes-udp-echo-server-module"></span><h2>nepi.resources.ns3.classes.udp_echo_server module<a class="headerlink" href="#module-nepi.resources.ns3.classes.udp_echo_server" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.udp_echo_server.NS3UdpEchoServer">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.udp_echo_server.</tt><tt class="descname">NS3UdpEchoServer</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/udp_echo_server.html#NS3UdpEchoServer"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.udp_echo_server.NS3UdpEchoServer" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3application.NS3BaseApplication" title="nepi.resources.ns3.ns3application.NS3BaseApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3application.NS3BaseApplication</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.udp_l4protocol">
+<span id="nepi-resources-ns3-classes-udp-l4protocol-module"></span><h2>nepi.resources.ns3.classes.udp_l4protocol module<a class="headerlink" href="#module-nepi.resources.ns3.classes.udp_l4protocol" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.udp_l4protocol.NS3UdpL4Protocol">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.udp_l4protocol.</tt><tt class="descname">NS3UdpL4Protocol</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/udp_l4protocol.html#NS3UdpL4Protocol"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.udp_l4protocol.NS3UdpL4Protocol" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3base.NS3Base" title="nepi.resources.ns3.ns3base.NS3Base"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3base.NS3Base</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.udp_server">
+<span id="nepi-resources-ns3-classes-udp-server-module"></span><h2>nepi.resources.ns3.classes.udp_server module<a class="headerlink" href="#module-nepi.resources.ns3.classes.udp_server" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.udp_server.NS3UdpServer">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.udp_server.</tt><tt class="descname">NS3UdpServer</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/udp_server.html#NS3UdpServer"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.udp_server.NS3UdpServer" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3application.NS3BaseApplication" title="nepi.resources.ns3.ns3application.NS3BaseApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3application.NS3BaseApplication</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.udp_trace_client">
+<span id="nepi-resources-ns3-classes-udp-trace-client-module"></span><h2>nepi.resources.ns3.classes.udp_trace_client module<a class="headerlink" href="#module-nepi.resources.ns3.classes.udp_trace_client" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.udp_trace_client.NS3UdpTraceClient">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.udp_trace_client.</tt><tt class="descname">NS3UdpTraceClient</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/udp_trace_client.html#NS3UdpTraceClient"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.udp_trace_client.NS3UdpTraceClient" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3application.NS3BaseApplication" title="nepi.resources.ns3.ns3application.NS3BaseApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3application.NS3BaseApplication</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.v4ping">
+<span id="nepi-resources-ns3-classes-v4ping-module"></span><h2>nepi.resources.ns3.classes.v4ping module<a class="headerlink" href="#module-nepi.resources.ns3.classes.v4ping" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.v4ping.NS3V4Ping">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.v4ping.</tt><tt class="descname">NS3V4Ping</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/v4ping.html#NS3V4Ping"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.v4ping.NS3V4Ping" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3application.NS3BaseApplication" title="nepi.resources.ns3.ns3application.NS3BaseApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3application.NS3BaseApplication</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.virtual_net_device">
+<span id="nepi-resources-ns3-classes-virtual-net-device-module"></span><h2>nepi.resources.ns3.classes.virtual_net_device module<a class="headerlink" href="#module-nepi.resources.ns3.classes.virtual_net_device" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.virtual_net_device.NS3VirtualNetDevice">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.virtual_net_device.</tt><tt class="descname">NS3VirtualNetDevice</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/virtual_net_device.html#NS3VirtualNetDevice"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.virtual_net_device.NS3VirtualNetDevice" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice" title="nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.waypoint_mobility_model">
+<span id="nepi-resources-ns3-classes-waypoint-mobility-model-module"></span><h2>nepi.resources.ns3.classes.waypoint_mobility_model module<a class="headerlink" href="#module-nepi.resources.ns3.classes.waypoint_mobility_model" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.waypoint_mobility_model.NS3WaypointMobilityModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.waypoint_mobility_model.</tt><tt class="descname">NS3WaypointMobilityModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/waypoint_mobility_model.html#NS3WaypointMobilityModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.waypoint_mobility_model.NS3WaypointMobilityModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3mobilitymodel.NS3BaseMobilityModel" title="nepi.resources.ns3.ns3mobilitymodel.NS3BaseMobilityModel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3mobilitymodel.NS3BaseMobilityModel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.wifi_net_device">
+<span id="nepi-resources-ns3-classes-wifi-net-device-module"></span><h2>nepi.resources.ns3.classes.wifi_net_device module<a class="headerlink" href="#module-nepi.resources.ns3.classes.wifi_net_device" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.wifi_net_device.NS3WifiNetDevice">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.wifi_net_device.</tt><tt class="descname">NS3WifiNetDevice</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/wifi_net_device.html#NS3WifiNetDevice"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.wifi_net_device.NS3WifiNetDevice" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3wifinetdevice.NS3BaseWifiNetDevice" title="nepi.resources.ns3.ns3wifinetdevice.NS3BaseWifiNetDevice"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3wifinetdevice.NS3BaseWifiNetDevice</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.yans_error_rate_model">
+<span id="nepi-resources-ns3-classes-yans-error-rate-model-module"></span><h2>nepi.resources.ns3.classes.yans_error_rate_model module<a class="headerlink" href="#module-nepi.resources.ns3.classes.yans_error_rate_model" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.yans_error_rate_model.NS3YansErrorRateModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.yans_error_rate_model.</tt><tt class="descname">NS3YansErrorRateModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/yans_error_rate_model.html#NS3YansErrorRateModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.yans_error_rate_model.NS3YansErrorRateModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3errorratemodel.NS3BaseErrorRateModel" title="nepi.resources.ns3.ns3errorratemodel.NS3BaseErrorRateModel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3errorratemodel.NS3BaseErrorRateModel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.yans_wifi_channel">
+<span id="nepi-resources-ns3-classes-yans-wifi-channel-module"></span><h2>nepi.resources.ns3.classes.yans_wifi_channel module<a class="headerlink" href="#module-nepi.resources.ns3.classes.yans_wifi_channel" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.yans_wifi_channel.NS3YansWifiChannel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.yans_wifi_channel.</tt><tt class="descname">NS3YansWifiChannel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/yans_wifi_channel.html#NS3YansWifiChannel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.yans_wifi_channel.NS3YansWifiChannel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3wifichannel.NS3BaseWifiChannel" title="nepi.resources.ns3.ns3wifichannel.NS3BaseWifiChannel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3wifichannel.NS3BaseWifiChannel</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes.yans_wifi_phy">
+<span id="nepi-resources-ns3-classes-yans-wifi-phy-module"></span><h2>nepi.resources.ns3.classes.yans_wifi_phy module<a class="headerlink" href="#module-nepi.resources.ns3.classes.yans_wifi_phy" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.classes.yans_wifi_phy.NS3YansWifiPhy">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.classes.yans_wifi_phy.</tt><tt class="descname">NS3YansWifiPhy</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/classes/yans_wifi_phy.html#NS3YansWifiPhy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.classes.yans_wifi_phy.NS3YansWifiPhy" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.ns3.html#nepi.resources.ns3.ns3wifiphy.NS3BaseWifiPhy" title="nepi.resources.ns3.ns3wifiphy.NS3BaseWifiPhy"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3wifiphy.NS3BaseWifiPhy</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.classes">
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-nepi.resources.ns3.classes" title="Permalink to this headline">¶</a></h2>
+</div>
+</div>
+
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_layout/nepi.resources.ns3.html b/doc/sphinx/_build/html/_layout/nepi.resources.ns3.html
new file mode 100644 (file)
index 0000000..5add2fc
--- /dev/null
@@ -0,0 +1,1239 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3 package &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../_static/jquery.js"></script>
+    <script type="text/javascript" src="../_static/underscore.js"></script>
+    <script type="text/javascript" src="../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+  <h3><a href="../index.html">Table Of Contents</a></h3>
+  <ul>
+<li><a class="reference internal" href="#">nepi.resources.ns3 package</a><ul>
+<li><a class="reference internal" href="#subpackages">Subpackages</a></li>
+<li><a class="reference internal" href="#submodules">Submodules</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.ns3application">nepi.resources.ns3.ns3application module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.ns3arpl3protocol">nepi.resources.ns3.ns3arpl3protocol module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.ns3base">nepi.resources.ns3.ns3base module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.ns3ccndceapplication">nepi.resources.ns3.ns3ccndceapplication module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.ns3channel">nepi.resources.ns3.ns3channel module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.ns3client">nepi.resources.ns3.ns3client module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.ns3dceapplication">nepi.resources.ns3.ns3dceapplication module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.ns3dcehelper">nepi.resources.ns3.ns3dcehelper module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.ns3errormodel">nepi.resources.ns3.ns3errormodel module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.ns3errorratemodel">nepi.resources.ns3.ns3errorratemodel module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.ns3fdnetdevice">nepi.resources.ns3.ns3fdnetdevice module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.ns3icmpv4l4protocol">nepi.resources.ns3.ns3icmpv4l4protocol module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.ns3ipv4l3protocol">nepi.resources.ns3.ns3ipv4l3protocol module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.ns3mobilitymodel">nepi.resources.ns3.ns3mobilitymodel module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.ns3netdevice">nepi.resources.ns3.ns3netdevice module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.ns3node">nepi.resources.ns3.ns3node module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.ns3pipechanel">nepi.resources.ns3.ns3pipechanel module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.ns3propagationdelaymodel">nepi.resources.ns3.ns3propagationdelaymodel module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.ns3propagationlossmodel">nepi.resources.ns3.ns3propagationlossmodel module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.ns3queue">nepi.resources.ns3.ns3queue module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.ns3route">nepi.resources.ns3.ns3route module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.ns3server">nepi.resources.ns3.ns3server module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.ns3simulation">nepi.resources.ns3.ns3simulation module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.ns3wifichannel">nepi.resources.ns3.ns3wifichannel module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.ns3wifimac">nepi.resources.ns3.ns3wifimac module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.ns3wifinetdevice">nepi.resources.ns3.ns3wifinetdevice module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.ns3wifiphy">nepi.resources.ns3.ns3wifiphy module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.ns3wifiremotestationmanager">nepi.resources.ns3.ns3wifiremotestationmanager module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.ns3wrapper">nepi.resources.ns3.ns3wrapper module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.ns3wrapper_debug">nepi.resources.ns3.ns3wrapper_debug module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3.resource_manager_generator">nepi.resources.ns3.resource_manager_generator module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.ns3">Module contents</a></li>
+</ul>
+</li>
+</ul>
+
+  <h3>This Page</h3>
+  <ul class="this-page-menu">
+    <li><a href="../_sources/_layout/nepi.resources.ns3.txt"
+           rel="nofollow">Show Source</a></li>
+  </ul>
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <div class="section" id="nepi-resources-ns3-package">
+<h1>nepi.resources.ns3 package<a class="headerlink" href="#nepi-resources-ns3-package" title="Permalink to this headline">¶</a></h1>
+<div class="section" id="subpackages">
+<h2>Subpackages<a class="headerlink" href="#subpackages" title="Permalink to this headline">¶</a></h2>
+<div class="toctree-wrapper compound">
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="nepi.resources.ns3.classes.html">nepi.resources.ns3.classes package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#submodules">Submodules</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.aarf_wifi_manager">nepi.resources.ns3.classes.aarf_wifi_manager module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.aarfcd_wifi_manager">nepi.resources.ns3.classes.aarfcd_wifi_manager module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.adhoc_wifi_mac">nepi.resources.ns3.classes.adhoc_wifi_mac module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.aloha_noack_net_device">nepi.resources.ns3.classes.aloha_noack_net_device module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.amrr_wifi_manager">nepi.resources.ns3.classes.amrr_wifi_manager module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.ap_wifi_mac">nepi.resources.ns3.classes.ap_wifi_mac module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.arf_wifi_manager">nepi.resources.ns3.classes.arf_wifi_manager module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.arp_l3protocol">nepi.resources.ns3.classes.arp_l3protocol module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.base_station_net_device">nepi.resources.ns3.classes.base_station_net_device module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.binary_error_model">nepi.resources.ns3.classes.binary_error_model module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.binary_error_sixlow_model">nepi.resources.ns3.classes.binary_error_sixlow_model module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.bridge_channel">nepi.resources.ns3.classes.bridge_channel module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.bridge_net_device">nepi.resources.ns3.classes.bridge_net_device module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.bulk_send_application">nepi.resources.ns3.classes.bulk_send_application module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.burst_error_model">nepi.resources.ns3.classes.burst_error_model module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.cara_wifi_manager">nepi.resources.ns3.classes.cara_wifi_manager module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.constant_acceleration_mobility_model">nepi.resources.ns3.classes.constant_acceleration_mobility_model module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.constant_position_mobility_model">nepi.resources.ns3.classes.constant_position_mobility_model module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.constant_rate_wifi_manager">nepi.resources.ns3.classes.constant_rate_wifi_manager module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.constant_speed_propagation_delay_model">nepi.resources.ns3.classes.constant_speed_propagation_delay_model module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.constant_velocity_mobility_model">nepi.resources.ns3.classes.constant_velocity_mobility_model module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.cost231propagation_loss_model">nepi.resources.ns3.classes.cost231propagation_loss_model module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.csma_channel">nepi.resources.ns3.classes.csma_channel module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.csma_net_device">nepi.resources.ns3.classes.csma_net_device module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.drop_tail_queue">nepi.resources.ns3.classes.drop_tail_queue module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.dsrdsr_routing">nepi.resources.ns3.classes.dsrdsr_routing module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.emu_net_device">nepi.resources.ns3.classes.emu_net_device module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.error_channel">nepi.resources.ns3.classes.error_channel module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.error_channel_sixlow">nepi.resources.ns3.classes.error_channel_sixlow module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.error_net_device">nepi.resources.ns3.classes.error_net_device module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.fd_net_device">nepi.resources.ns3.classes.fd_net_device module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.fixed_rss_loss_model">nepi.resources.ns3.classes.fixed_rss_loss_model module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.friis_propagation_loss_model">nepi.resources.ns3.classes.friis_propagation_loss_model module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.gauss_markov_mobility_model">nepi.resources.ns3.classes.gauss_markov_mobility_model module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.hierarchical_mobility_model">nepi.resources.ns3.classes.hierarchical_mobility_model module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.hybrid_buildings_propagation_loss_model">nepi.resources.ns3.classes.hybrid_buildings_propagation_loss_model module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.icmpv4l4protocol">nepi.resources.ns3.classes.icmpv4l4protocol module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.icmpv6l4protocol">nepi.resources.ns3.classes.icmpv6l4protocol module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.ideal_wifi_manager">nepi.resources.ns3.classes.ideal_wifi_manager module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.ipv4l3protocol">nepi.resources.ns3.classes.ipv4l3protocol module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.itu_r1411los_propagation_loss_model">nepi.resources.ns3.classes.itu_r1411los_propagation_loss_model module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.itu_r1411nlos_over_rooftop_propagation_loss_model">nepi.resources.ns3.classes.itu_r1411nlos_over_rooftop_propagation_loss_model module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.jakes_propagation_loss_model">nepi.resources.ns3.classes.jakes_propagation_loss_model module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.kun2600mhz_propagation_loss_model">nepi.resources.ns3.classes.kun2600mhz_propagation_loss_model module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.list_error_model">nepi.resources.ns3.classes.list_error_model module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.log_distance_propagation_loss_model">nepi.resources.ns3.classes.log_distance_propagation_loss_model module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.loopback_net_device">nepi.resources.ns3.classes.loopback_net_device module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.lr_wpan_net_device">nepi.resources.ns3.classes.lr_wpan_net_device module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.lte_enb_net_device">nepi.resources.ns3.classes.lte_enb_net_device module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.lte_simple_net_device">nepi.resources.ns3.classes.lte_simple_net_device module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.lte_ue_net_device">nepi.resources.ns3.classes.lte_ue_net_device module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.matrix_propagation_loss_model">nepi.resources.ns3.classes.matrix_propagation_loss_model module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.mesh_point_device">nepi.resources.ns3.classes.mesh_point_device module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.mesh_wifi_interface_mac">nepi.resources.ns3.classes.mesh_wifi_interface_mac module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.minstrel_wifi_manager">nepi.resources.ns3.classes.minstrel_wifi_manager module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.multi_model_spectrum_channel">nepi.resources.ns3.classes.multi_model_spectrum_channel module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.nakagami_propagation_loss_model">nepi.resources.ns3.classes.nakagami_propagation_loss_model module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.nist_error_rate_model">nepi.resources.ns3.classes.nist_error_rate_model module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.node">nepi.resources.ns3.classes.node module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.non_communicating_net_device">nepi.resources.ns3.classes.non_communicating_net_device module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.ocb_wifi_mac">nepi.resources.ns3.classes.ocb_wifi_mac module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.oh_buildings_propagation_loss_model">nepi.resources.ns3.classes.oh_buildings_propagation_loss_model module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.okumura_hata_propagation_loss_model">nepi.resources.ns3.classes.okumura_hata_propagation_loss_model module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.on_off_application">nepi.resources.ns3.classes.on_off_application module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.onoe_wifi_manager">nepi.resources.ns3.classes.onoe_wifi_manager module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.packet_sink">nepi.resources.ns3.classes.packet_sink module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.ping6">nepi.resources.ns3.classes.ping6 module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.point_to_point_channel">nepi.resources.ns3.classes.point_to_point_channel module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.point_to_point_net_device">nepi.resources.ns3.classes.point_to_point_net_device module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.point_to_point_remote_channel">nepi.resources.ns3.classes.point_to_point_remote_channel module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.radvd">nepi.resources.ns3.classes.radvd module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.random_direction2d_mobility_model">nepi.resources.ns3.classes.random_direction2d_mobility_model module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.random_propagation_delay_model">nepi.resources.ns3.classes.random_propagation_delay_model module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.random_propagation_loss_model">nepi.resources.ns3.classes.random_propagation_loss_model module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.random_walk2d_mobility_model">nepi.resources.ns3.classes.random_walk2d_mobility_model module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.random_waypoint_mobility_model">nepi.resources.ns3.classes.random_waypoint_mobility_model module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.range_propagation_loss_model">nepi.resources.ns3.classes.range_propagation_loss_model module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.rate_error_model">nepi.resources.ns3.classes.rate_error_model module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.receive_list_error_model">nepi.resources.ns3.classes.receive_list_error_model module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.red_queue">nepi.resources.ns3.classes.red_queue module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.rraa_wifi_manager">nepi.resources.ns3.classes.rraa_wifi_manager module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.simple_channel">nepi.resources.ns3.classes.simple_channel module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.simple_net_device">nepi.resources.ns3.classes.simple_net_device module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.single_model_spectrum_channel">nepi.resources.ns3.classes.single_model_spectrum_channel module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.six_low_pan_net_device">nepi.resources.ns3.classes.six_low_pan_net_device module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.sta_wifi_mac">nepi.resources.ns3.classes.sta_wifi_mac module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.steady_state_random_waypoint_mobility_model">nepi.resources.ns3.classes.steady_state_random_waypoint_mobility_model module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.subscriber_station_net_device">nepi.resources.ns3.classes.subscriber_station_net_device module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.tap_bridge">nepi.resources.ns3.classes.tap_bridge module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.tcp_l4protocol">nepi.resources.ns3.classes.tcp_l4protocol module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.three_log_distance_propagation_loss_model">nepi.resources.ns3.classes.three_log_distance_propagation_loss_model module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.two_ray_ground_propagation_loss_model">nepi.resources.ns3.classes.two_ray_ground_propagation_loss_model module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.uan_channel">nepi.resources.ns3.classes.uan_channel module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.udp_client">nepi.resources.ns3.classes.udp_client module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.udp_echo_client">nepi.resources.ns3.classes.udp_echo_client module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.udp_echo_server">nepi.resources.ns3.classes.udp_echo_server module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.udp_l4protocol">nepi.resources.ns3.classes.udp_l4protocol module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.udp_server">nepi.resources.ns3.classes.udp_server module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.udp_trace_client">nepi.resources.ns3.classes.udp_trace_client module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.v4ping">nepi.resources.ns3.classes.v4ping module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.virtual_net_device">nepi.resources.ns3.classes.virtual_net_device module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.waypoint_mobility_model">nepi.resources.ns3.classes.waypoint_mobility_model module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.wifi_net_device">nepi.resources.ns3.classes.wifi_net_device module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.yans_error_rate_model">nepi.resources.ns3.classes.yans_error_rate_model module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.yans_wifi_channel">nepi.resources.ns3.classes.yans_wifi_channel module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.yans_wifi_phy">nepi.resources.ns3.classes.yans_wifi_phy module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes">Module contents</a></li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<div class="section" id="submodules">
+<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline">¶</a></h2>
+</div>
+<div class="section" id="module-nepi.resources.ns3.ns3application">
+<span id="nepi-resources-ns3-ns3application-module"></span><h2>nepi.resources.ns3.ns3application module<a class="headerlink" href="#module-nepi.resources.ns3.ns3application" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.ns3application.NS3BaseApplication">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.ns3application.</tt><tt class="descname">NS3BaseApplication</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3application.html#NS3BaseApplication"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3application.NS3BaseApplication" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.ns3.ns3base.NS3Base" title="nepi.resources.ns3.ns3base.NS3Base"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3base.NS3Base</span></tt></a></p>
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3application.NS3BaseApplication.do_start">
+<tt class="descname">do_start</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3application.html#NS3BaseApplication.do_start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3application.NS3BaseApplication.do_start" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3application.NS3BaseApplication.do_stop">
+<tt class="descname">do_stop</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3application.html#NS3BaseApplication.do_stop"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3application.NS3BaseApplication.do_stop" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3application.NS3BaseApplication.node">
+<tt class="descname">node</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3application.html#NS3BaseApplication.node"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3application.NS3BaseApplication.node" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3application.NS3BaseApplication.state">
+<tt class="descname">state</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3application.html#NS3BaseApplication.state"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3application.NS3BaseApplication.state" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.ns3arpl3protocol">
+<span id="nepi-resources-ns3-ns3arpl3protocol-module"></span><h2>nepi.resources.ns3.ns3arpl3protocol module<a class="headerlink" href="#module-nepi.resources.ns3.ns3arpl3protocol" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.ns3arpl3protocol.NS3BaseArpL3Protocol">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.ns3arpl3protocol.</tt><tt class="descname">NS3BaseArpL3Protocol</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3arpl3protocol.html#NS3BaseArpL3Protocol"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3arpl3protocol.NS3BaseArpL3Protocol" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.ns3.ns3base.NS3Base" title="nepi.resources.ns3.ns3base.NS3Base"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3base.NS3Base</span></tt></a></p>
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3arpl3protocol.NS3BaseArpL3Protocol.node">
+<tt class="descname">node</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3arpl3protocol.html#NS3BaseArpL3Protocol.node"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3arpl3protocol.NS3BaseArpL3Protocol.node" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.ns3base">
+<span id="nepi-resources-ns3-ns3base-module"></span><h2>nepi.resources.ns3.ns3base module<a class="headerlink" href="#module-nepi.resources.ns3.ns3base" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.ns3base.NS3Base">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.ns3base.</tt><tt class="descname">NS3Base</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3base.html#NS3Base"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3base.NS3Base" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.execution.html#nepi.execution.resource.ResourceManager" title="nepi.execution.resource.ResourceManager"><tt class="xref py py-class docutils literal"><span class="pre">nepi.execution.resource.ResourceManager</span></tt></a></p>
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3base.NS3Base.connected">
+<tt class="descname">connected</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3base.html#NS3Base.connected"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3base.NS3Base.connected" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3base.NS3Base.do_deploy">
+<tt class="descname">do_deploy</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3base.html#NS3Base.do_deploy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3base.NS3Base.do_deploy" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3base.NS3Base.do_provision">
+<tt class="descname">do_provision</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3base.html#NS3Base.do_provision"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3base.NS3Base.do_provision" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3base.NS3Base.do_start">
+<tt class="descname">do_start</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3base.html#NS3Base.do_start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3base.NS3Base.do_start" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3base.NS3Base.do_stop">
+<tt class="descname">do_stop</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3base.html#NS3Base.do_stop"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3base.NS3Base.do_stop" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3base.NS3Base.get">
+<tt class="descname">get</tt><big>(</big><em>name</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3base.html#NS3Base.get"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3base.NS3Base.get" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3base.NS3Base.node">
+<tt class="descname">node</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3base.html#NS3Base.node"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3base.NS3Base.node" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3base.NS3Base.set">
+<tt class="descname">set</tt><big>(</big><em>name</em>, <em>value</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3base.html#NS3Base.set"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3base.NS3Base.set" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3base.NS3Base.simulation">
+<tt class="descname">simulation</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3base.html#NS3Base.simulation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3base.NS3Base.simulation" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3base.NS3Base.state">
+<tt class="descname">state</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3base.html#NS3Base.state"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3base.NS3Base.state" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3base.NS3Base.trace">
+<tt class="descname">trace</tt><big>(</big><em>name</em>, <em>attr='all'</em>, <em>block=512</em>, <em>offset=0</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3base.html#NS3Base.trace"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3base.NS3Base.trace" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3base.NS3Base.uuid">
+<tt class="descname">uuid</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3base.html#NS3Base.uuid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3base.NS3Base.uuid" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.ns3ccndceapplication">
+<span id="nepi-resources-ns3-ns3ccndceapplication-module"></span><h2>nepi.resources.ns3.ns3ccndceapplication module<a class="headerlink" href="#module-nepi.resources.ns3.ns3ccndceapplication" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.ns3ccndceapplication.NS3BaseCCNDceApplication">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.ns3ccndceapplication.</tt><tt class="descname">NS3BaseCCNDceApplication</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3ccndceapplication.html#NS3BaseCCNDceApplication"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3ccndceapplication.NS3BaseCCNDceApplication" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.ns3.ns3dceapplication.NS3BaseDceApplication" title="nepi.resources.ns3.ns3dceapplication.NS3BaseDceApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3dceapplication.NS3BaseDceApplication</span></tt></a></p>
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3ccndceapplication.NS3BaseCCNDceApplication.ccn_client_helper_uuid">
+<tt class="descname">ccn_client_helper_uuid</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3ccndceapplication.html#NS3BaseCCNDceApplication.ccn_client_helper_uuid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3ccndceapplication.NS3BaseCCNDceApplication.ccn_client_helper_uuid" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3ccndceapplication.NS3BaseCCNDceApplication.ccn_client_lock">
+<tt class="descname">ccn_client_lock</tt><em class="property"> = &lt;thread.lock object at 0x7f0290310f90&gt;</em><a class="headerlink" href="#nepi.resources.ns3.ns3ccndceapplication.NS3BaseCCNDceApplication.ccn_client_lock" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.ns3channel">
+<span id="nepi-resources-ns3-ns3channel-module"></span><h2>nepi.resources.ns3.ns3channel module<a class="headerlink" href="#module-nepi.resources.ns3.ns3channel" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.ns3channel.NS3BaseChannel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.ns3channel.</tt><tt class="descname">NS3BaseChannel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3channel.html#NS3BaseChannel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3channel.NS3BaseChannel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.ns3.ns3base.NS3Base" title="nepi.resources.ns3.ns3base.NS3Base"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3base.NS3Base</span></tt></a></p>
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3channel.NS3BaseChannel.devices">
+<tt class="descname">devices</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3channel.html#NS3BaseChannel.devices"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3channel.NS3BaseChannel.devices" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3channel.NS3BaseChannel.simulation">
+<tt class="descname">simulation</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3channel.html#NS3BaseChannel.simulation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3channel.NS3BaseChannel.simulation" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.ns3client">
+<span id="nepi-resources-ns3-ns3client-module"></span><h2>nepi.resources.ns3.ns3client module<a class="headerlink" href="#module-nepi.resources.ns3.ns3client" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.ns3client.NS3Client">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.ns3client.</tt><tt class="descname">NS3Client</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3client.html#NS3Client"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3client.NS3Client" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference external" href="http://docs.python.org/library/functions.html#object" title="(in Python v2.7)"><tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></a></p>
+<p>Common Interface for NS3 client classes</p>
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3client.NS3Client.create">
+<tt class="descname">create</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3client.html#NS3Client.create"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3client.NS3Client.create" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3client.NS3Client.factory">
+<tt class="descname">factory</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3client.html#NS3Client.factory"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3client.NS3Client.factory" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3client.NS3Client.flush">
+<tt class="descname">flush</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3client.html#NS3Client.flush"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3client.NS3Client.flush" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3client.NS3Client.get">
+<tt class="descname">get</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3client.html#NS3Client.get"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3client.NS3Client.get" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3client.NS3Client.invoke">
+<tt class="descname">invoke</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3client.html#NS3Client.invoke"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3client.NS3Client.invoke" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3client.NS3Client.set">
+<tt class="descname">set</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3client.html#NS3Client.set"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3client.NS3Client.set" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3client.NS3Client.shutdown">
+<tt class="descname">shutdown</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3client.html#NS3Client.shutdown"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3client.NS3Client.shutdown" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3client.NS3Client.start">
+<tt class="descname">start</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3client.html#NS3Client.start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3client.NS3Client.start" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3client.NS3Client.stop">
+<tt class="descname">stop</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3client.html#NS3Client.stop"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3client.NS3Client.stop" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.ns3dceapplication">
+<span id="nepi-resources-ns3-ns3dceapplication-module"></span><h2>nepi.resources.ns3.ns3dceapplication module<a class="headerlink" href="#module-nepi.resources.ns3.ns3dceapplication" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.ns3dceapplication.NS3BaseDceApplication">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.ns3dceapplication.</tt><tt class="descname">NS3BaseDceApplication</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3dceapplication.html#NS3BaseDceApplication"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3dceapplication.NS3BaseDceApplication" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.ns3.ns3application.NS3BaseApplication" title="nepi.resources.ns3.ns3application.NS3BaseApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3application.NS3BaseApplication</span></tt></a></p>
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3dceapplication.NS3BaseDceApplication.do_start">
+<tt class="descname">do_start</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3dceapplication.html#NS3BaseDceApplication.do_start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3dceapplication.NS3BaseDceApplication.do_start" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3dceapplication.NS3BaseDceApplication.do_stop">
+<tt class="descname">do_stop</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3dceapplication.html#NS3BaseDceApplication.do_stop"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3dceapplication.NS3BaseDceApplication.do_stop" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3dceapplication.NS3BaseDceApplication.pid">
+<tt class="descname">pid</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3dceapplication.html#NS3BaseDceApplication.pid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3dceapplication.NS3BaseDceApplication.pid" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3dceapplication.NS3BaseDceApplication.trace">
+<tt class="descname">trace</tt><big>(</big><em>name</em>, <em>attr='all'</em>, <em>block=512</em>, <em>offset=0</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3dceapplication.html#NS3BaseDceApplication.trace"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3dceapplication.NS3BaseDceApplication.trace" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.ns3dcehelper">
+<span id="nepi-resources-ns3-ns3dcehelper-module"></span><h2>nepi.resources.ns3.ns3dcehelper module<a class="headerlink" href="#module-nepi.resources.ns3.ns3dcehelper" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.ns3dcehelper.NS3DceHelper">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.ns3dcehelper.</tt><tt class="descname">NS3DceHelper</tt><big>(</big><em>simulation</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3dcehelper.html#NS3DceHelper"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3dcehelper.NS3DceHelper" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference external" href="http://docs.python.org/library/functions.html#object" title="(in Python v2.7)"><tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></a></p>
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3dcehelper.NS3DceHelper.dce_application_lock">
+<tt class="descname">dce_application_lock</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3dcehelper.html#NS3DceHelper.dce_application_lock"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3dcehelper.NS3DceHelper.dce_application_lock" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3dcehelper.NS3DceHelper.dce_application_uuid">
+<tt class="descname">dce_application_uuid</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3dcehelper.html#NS3DceHelper.dce_application_uuid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3dcehelper.NS3DceHelper.dce_application_uuid" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3dcehelper.NS3DceHelper.dce_manager_lock">
+<tt class="descname">dce_manager_lock</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3dcehelper.html#NS3DceHelper.dce_manager_lock"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3dcehelper.NS3DceHelper.dce_manager_lock" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3dcehelper.NS3DceHelper.dce_manager_uuid">
+<tt class="descname">dce_manager_uuid</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3dcehelper.html#NS3DceHelper.dce_manager_uuid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3dcehelper.NS3DceHelper.dce_manager_uuid" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.ns3errormodel">
+<span id="nepi-resources-ns3-ns3errormodel-module"></span><h2>nepi.resources.ns3.ns3errormodel module<a class="headerlink" href="#module-nepi.resources.ns3.ns3errormodel" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.ns3errormodel.NS3BaseErrorModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.ns3errormodel.</tt><tt class="descname">NS3BaseErrorModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3errormodel.html#NS3BaseErrorModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3errormodel.NS3BaseErrorModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.ns3.ns3base.NS3Base" title="nepi.resources.ns3.ns3base.NS3Base"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3base.NS3Base</span></tt></a></p>
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3errormodel.NS3BaseErrorModel.device">
+<tt class="descname">device</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3errormodel.html#NS3BaseErrorModel.device"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3errormodel.NS3BaseErrorModel.device" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.ns3errorratemodel">
+<span id="nepi-resources-ns3-ns3errorratemodel-module"></span><h2>nepi.resources.ns3.ns3errorratemodel module<a class="headerlink" href="#module-nepi.resources.ns3.ns3errorratemodel" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.ns3errorratemodel.NS3BaseErrorRateModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.ns3errorratemodel.</tt><tt class="descname">NS3BaseErrorRateModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3errorratemodel.html#NS3BaseErrorRateModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3errorratemodel.NS3BaseErrorRateModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.ns3.ns3base.NS3Base" title="nepi.resources.ns3.ns3base.NS3Base"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3base.NS3Base</span></tt></a></p>
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3errorratemodel.NS3BaseErrorRateModel.node">
+<tt class="descname">node</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3errorratemodel.html#NS3BaseErrorRateModel.node"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3errorratemodel.NS3BaseErrorRateModel.node" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3errorratemodel.NS3BaseErrorRateModel.phy">
+<tt class="descname">phy</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3errorratemodel.html#NS3BaseErrorRateModel.phy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3errorratemodel.NS3BaseErrorRateModel.phy" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.ns3fdnetdevice">
+<span id="nepi-resources-ns3-ns3fdnetdevice-module"></span><h2>nepi.resources.ns3.ns3fdnetdevice module<a class="headerlink" href="#module-nepi.resources.ns3.ns3fdnetdevice" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.ns3fdnetdevice.NS3BaseFdNetDevice">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.ns3fdnetdevice.</tt><tt class="descname">NS3BaseFdNetDevice</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3fdnetdevice.html#NS3BaseFdNetDevice"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3fdnetdevice.NS3BaseFdNetDevice" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice" title="nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice</span></tt></a></p>
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3fdnetdevice.NS3BaseFdNetDevice.recv_fd">
+<tt class="descname">recv_fd</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3fdnetdevice.html#NS3BaseFdNetDevice.recv_fd"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3fdnetdevice.NS3BaseFdNetDevice.recv_fd" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.ns3icmpv4l4protocol">
+<span id="nepi-resources-ns3-ns3icmpv4l4protocol-module"></span><h2>nepi.resources.ns3.ns3icmpv4l4protocol module<a class="headerlink" href="#module-nepi.resources.ns3.ns3icmpv4l4protocol" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.ns3icmpv4l4protocol.NS3BaseIcmpv4L4Protocol">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.ns3icmpv4l4protocol.</tt><tt class="descname">NS3BaseIcmpv4L4Protocol</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3icmpv4l4protocol.html#NS3BaseIcmpv4L4Protocol"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3icmpv4l4protocol.NS3BaseIcmpv4L4Protocol" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.ns3.ns3base.NS3Base" title="nepi.resources.ns3.ns3base.NS3Base"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3base.NS3Base</span></tt></a></p>
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3icmpv4l4protocol.NS3BaseIcmpv4L4Protocol.node">
+<tt class="descname">node</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3icmpv4l4protocol.html#NS3BaseIcmpv4L4Protocol.node"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3icmpv4l4protocol.NS3BaseIcmpv4L4Protocol.node" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.ns3ipv4l3protocol">
+<span id="nepi-resources-ns3-ns3ipv4l3protocol-module"></span><h2>nepi.resources.ns3.ns3ipv4l3protocol module<a class="headerlink" href="#module-nepi.resources.ns3.ns3ipv4l3protocol" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.ns3ipv4l3protocol.NS3BaseIpv4L3Protocol">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.ns3ipv4l3protocol.</tt><tt class="descname">NS3BaseIpv4L3Protocol</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3ipv4l3protocol.html#NS3BaseIpv4L3Protocol"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3ipv4l3protocol.NS3BaseIpv4L3Protocol" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.ns3.ns3base.NS3Base" title="nepi.resources.ns3.ns3base.NS3Base"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3base.NS3Base</span></tt></a></p>
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3ipv4l3protocol.NS3BaseIpv4L3Protocol.node">
+<tt class="descname">node</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3ipv4l3protocol.html#NS3BaseIpv4L3Protocol.node"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3ipv4l3protocol.NS3BaseIpv4L3Protocol.node" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.ns3mobilitymodel">
+<span id="nepi-resources-ns3-ns3mobilitymodel-module"></span><h2>nepi.resources.ns3.ns3mobilitymodel module<a class="headerlink" href="#module-nepi.resources.ns3.ns3mobilitymodel" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.ns3mobilitymodel.NS3BaseMobilityModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.ns3mobilitymodel.</tt><tt class="descname">NS3BaseMobilityModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3mobilitymodel.html#NS3BaseMobilityModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3mobilitymodel.NS3BaseMobilityModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.ns3.ns3base.NS3Base" title="nepi.resources.ns3.ns3base.NS3Base"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3base.NS3Base</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.ns3netdevice">
+<span id="nepi-resources-ns3-ns3netdevice-module"></span><h2>nepi.resources.ns3.ns3netdevice module<a class="headerlink" href="#module-nepi.resources.ns3.ns3netdevice" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.ns3netdevice.</tt><tt class="descname">NS3BaseNetDevice</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3netdevice.html#NS3BaseNetDevice"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.ns3.ns3base.NS3Base" title="nepi.resources.ns3.ns3base.NS3Base"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3base.NS3Base</span></tt></a></p>
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice.ascii_helper_uuid">
+<tt class="descname">ascii_helper_uuid</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3netdevice.html#NS3BaseNetDevice.ascii_helper_uuid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice.ascii_helper_uuid" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice.channel">
+<tt class="descname">channel</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3netdevice.html#NS3BaseNetDevice.channel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice.channel" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice.device_helper_uuid">
+<tt class="descname">device_helper_uuid</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3netdevice.html#NS3BaseNetDevice.device_helper_uuid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice.device_helper_uuid" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice.node">
+<tt class="descname">node</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3netdevice.html#NS3BaseNetDevice.node"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice.node" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice.queue">
+<tt class="descname">queue</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3netdevice.html#NS3BaseNetDevice.queue"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice.queue" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.ns3node">
+<span id="nepi-resources-ns3-ns3node-module"></span><h2>nepi.resources.ns3.ns3node module<a class="headerlink" href="#module-nepi.resources.ns3.ns3node" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.ns3node.NS3BaseNode">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.ns3node.</tt><tt class="descname">NS3BaseNode</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3node.html#NS3BaseNode"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3node.NS3BaseNode" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.ns3.ns3base.NS3Base" title="nepi.resources.ns3.ns3base.NS3Base"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3base.NS3Base</span></tt></a></p>
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3node.NS3BaseNode.arp">
+<tt class="descname">arp</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3node.html#NS3BaseNode.arp"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3node.NS3BaseNode.arp" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3node.NS3BaseNode.dceapplications">
+<tt class="descname">dceapplications</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3node.html#NS3BaseNode.dceapplications"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3node.NS3BaseNode.dceapplications" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3node.NS3BaseNode.devices">
+<tt class="descname">devices</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3node.html#NS3BaseNode.devices"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3node.NS3BaseNode.devices" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3node.NS3BaseNode.ipv4">
+<tt class="descname">ipv4</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3node.html#NS3BaseNode.ipv4"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3node.NS3BaseNode.ipv4" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3node.NS3BaseNode.mobility">
+<tt class="descname">mobility</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3node.html#NS3BaseNode.mobility"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3node.NS3BaseNode.mobility" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3node.NS3BaseNode.node_id">
+<tt class="descname">node_id</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3node.html#NS3BaseNode.node_id"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3node.NS3BaseNode.node_id" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3node.NS3BaseNode.simulation">
+<tt class="descname">simulation</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3node.html#NS3BaseNode.simulation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3node.NS3BaseNode.simulation" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.ns3pipechanel">
+<span id="nepi-resources-ns3-ns3pipechanel-module"></span><h2>nepi.resources.ns3.ns3pipechanel module<a class="headerlink" href="#module-nepi.resources.ns3.ns3pipechanel" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.ns3pipechanel.NS3BasePipeChannel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.ns3pipechanel.</tt><tt class="descname">NS3BasePipeChannel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3pipechanel.html#NS3BasePipeChannel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3pipechanel.NS3BasePipeChannel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.ns3.ns3base.NS3Base" title="nepi.resources.ns3.ns3base.NS3Base"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3base.NS3Base</span></tt></a></p>
+<p>Interconnects two FdNetDevices with a PIPE</p>
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3pipechanel.NS3BasePipeChannel.devices">
+<tt class="descname">devices</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3pipechanel.html#NS3BasePipeChannel.devices"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3pipechanel.NS3BasePipeChannel.devices" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3pipechanel.NS3BasePipeChannel.node">
+<tt class="descname">node</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3pipechanel.html#NS3BasePipeChannel.node"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3pipechanel.NS3BasePipeChannel.node" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.ns3propagationdelaymodel">
+<span id="nepi-resources-ns3-ns3propagationdelaymodel-module"></span><h2>nepi.resources.ns3.ns3propagationdelaymodel module<a class="headerlink" href="#module-nepi.resources.ns3.ns3propagationdelaymodel" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.ns3propagationdelaymodel.NS3BasePropagationDelayModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.ns3propagationdelaymodel.</tt><tt class="descname">NS3BasePropagationDelayModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3propagationdelaymodel.html#NS3BasePropagationDelayModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3propagationdelaymodel.NS3BasePropagationDelayModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.ns3.ns3base.NS3Base" title="nepi.resources.ns3.ns3base.NS3Base"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3base.NS3Base</span></tt></a></p>
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3propagationdelaymodel.NS3BasePropagationDelayModel.channel">
+<tt class="descname">channel</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3propagationdelaymodel.html#NS3BasePropagationDelayModel.channel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3propagationdelaymodel.NS3BasePropagationDelayModel.channel" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3propagationdelaymodel.NS3BasePropagationDelayModel.simulation">
+<tt class="descname">simulation</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3propagationdelaymodel.html#NS3BasePropagationDelayModel.simulation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3propagationdelaymodel.NS3BasePropagationDelayModel.simulation" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.ns3propagationlossmodel">
+<span id="nepi-resources-ns3-ns3propagationlossmodel-module"></span><h2>nepi.resources.ns3.ns3propagationlossmodel module<a class="headerlink" href="#module-nepi.resources.ns3.ns3propagationlossmodel" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.ns3propagationlossmodel.</tt><tt class="descname">NS3BasePropagationLossModel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3propagationlossmodel.html#NS3BasePropagationLossModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.ns3.ns3base.NS3Base" title="nepi.resources.ns3.ns3base.NS3Base"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3base.NS3Base</span></tt></a></p>
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel.channel">
+<tt class="descname">channel</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3propagationlossmodel.html#NS3BasePropagationLossModel.channel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel.channel" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel.simulation">
+<tt class="descname">simulation</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3propagationlossmodel.html#NS3BasePropagationLossModel.simulation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel.simulation" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.ns3queue">
+<span id="nepi-resources-ns3-ns3queue-module"></span><h2>nepi.resources.ns3.ns3queue module<a class="headerlink" href="#module-nepi.resources.ns3.ns3queue" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.ns3queue.NS3BaseQueue">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.ns3queue.</tt><tt class="descname">NS3BaseQueue</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3queue.html#NS3BaseQueue"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3queue.NS3BaseQueue" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.ns3.ns3base.NS3Base" title="nepi.resources.ns3.ns3base.NS3Base"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3base.NS3Base</span></tt></a></p>
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3queue.NS3BaseQueue.device">
+<tt class="descname">device</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3queue.html#NS3BaseQueue.device"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3queue.NS3BaseQueue.device" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3queue.NS3BaseQueue.node">
+<tt class="descname">node</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3queue.html#NS3BaseQueue.node"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3queue.NS3BaseQueue.node" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.ns3route">
+<span id="nepi-resources-ns3-ns3route-module"></span><h2>nepi.resources.ns3.ns3route module<a class="headerlink" href="#module-nepi.resources.ns3.ns3route" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.ns3route.NS3Route">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.ns3route.</tt><tt class="descname">NS3Route</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3route.html#NS3Route"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3route.NS3Route" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.ns3.ns3base.NS3Base" title="nepi.resources.ns3.ns3base.NS3Base"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3base.NS3Base</span></tt></a></p>
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3route.NS3Route.node">
+<tt class="descname">node</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3route.html#NS3Route.node"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3route.NS3Route.node" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.ns3server">
+<span id="nepi-resources-ns3-ns3server-module"></span><h2>nepi.resources.ns3.ns3server module<a class="headerlink" href="#module-nepi.resources.ns3.ns3server" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.ns3server.NS3WrapperMessage">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.ns3server.</tt><tt class="descname">NS3WrapperMessage</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3server.html#NS3WrapperMessage"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3server.NS3WrapperMessage" title="Permalink to this definition">¶</a></dt>
+<dd><dl class="attribute">
+<dt id="nepi.resources.ns3.ns3server.NS3WrapperMessage.CREATE">
+<tt class="descname">CREATE</tt><em class="property"> = 'CREATE'</em><a class="headerlink" href="#nepi.resources.ns3.ns3server.NS3WrapperMessage.CREATE" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3server.NS3WrapperMessage.FACTORY">
+<tt class="descname">FACTORY</tt><em class="property"> = 'FACTORY'</em><a class="headerlink" href="#nepi.resources.ns3.ns3server.NS3WrapperMessage.FACTORY" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3server.NS3WrapperMessage.FLUSH">
+<tt class="descname">FLUSH</tt><em class="property"> = 'FLUSH'</em><a class="headerlink" href="#nepi.resources.ns3.ns3server.NS3WrapperMessage.FLUSH" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3server.NS3WrapperMessage.GET">
+<tt class="descname">GET</tt><em class="property"> = 'GET'</em><a class="headerlink" href="#nepi.resources.ns3.ns3server.NS3WrapperMessage.GET" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3server.NS3WrapperMessage.INVOKE">
+<tt class="descname">INVOKE</tt><em class="property"> = 'INVOKE'</em><a class="headerlink" href="#nepi.resources.ns3.ns3server.NS3WrapperMessage.INVOKE" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3server.NS3WrapperMessage.SET">
+<tt class="descname">SET</tt><em class="property"> = 'SET'</em><a class="headerlink" href="#nepi.resources.ns3.ns3server.NS3WrapperMessage.SET" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3server.NS3WrapperMessage.SHUTDOWN">
+<tt class="descname">SHUTDOWN</tt><em class="property"> = 'SHUTDOWN'</em><a class="headerlink" href="#nepi.resources.ns3.ns3server.NS3WrapperMessage.SHUTDOWN" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3server.NS3WrapperMessage.START">
+<tt class="descname">START</tt><em class="property"> = 'START'</em><a class="headerlink" href="#nepi.resources.ns3.ns3server.NS3WrapperMessage.START" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3server.NS3WrapperMessage.STOP">
+<tt class="descname">STOP</tt><em class="property"> = 'STOP'</em><a class="headerlink" href="#nepi.resources.ns3.ns3server.NS3WrapperMessage.STOP" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+<dl class="function">
+<dt id="nepi.resources.ns3.ns3server.close_socket">
+<tt class="descclassname">nepi.resources.ns3.ns3server.</tt><tt class="descname">close_socket</tt><big>(</big><em>sock</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3server.html#close_socket"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3server.close_socket" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="function">
+<dt id="nepi.resources.ns3.ns3server.get_options">
+<tt class="descclassname">nepi.resources.ns3.ns3server.</tt><tt class="descname">get_options</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3server.html#get_options"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3server.get_options" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="function">
+<dt id="nepi.resources.ns3.ns3server.handle_message">
+<tt class="descclassname">nepi.resources.ns3.ns3server.</tt><tt class="descname">handle_message</tt><big>(</big><em>ns3_wrapper</em>, <em>msg_type</em>, <em>args</em>, <em>kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3server.html#handle_message"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3server.handle_message" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="function">
+<dt id="nepi.resources.ns3.ns3server.open_socket">
+<tt class="descclassname">nepi.resources.ns3.ns3server.</tt><tt class="descname">open_socket</tt><big>(</big><em>socket_name</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3server.html#open_socket"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3server.open_socket" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="function">
+<dt id="nepi.resources.ns3.ns3server.recv_msg">
+<tt class="descclassname">nepi.resources.ns3.ns3server.</tt><tt class="descname">recv_msg</tt><big>(</big><em>conn</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3server.html#recv_msg"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3server.recv_msg" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="function">
+<dt id="nepi.resources.ns3.ns3server.run_server">
+<tt class="descclassname">nepi.resources.ns3.ns3server.</tt><tt class="descname">run_server</tt><big>(</big><em>socket_name</em>, <em>level=20</em>, <em>ns_log=None</em>, <em>enable_dump=False</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3server.html#run_server"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3server.run_server" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="function">
+<dt id="nepi.resources.ns3.ns3server.send_reply">
+<tt class="descclassname">nepi.resources.ns3.ns3server.</tt><tt class="descname">send_reply</tt><big>(</big><em>conn</em>, <em>reply</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3server.html#send_reply"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3server.send_reply" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.ns3simulation">
+<span id="nepi-resources-ns3-ns3simulation-module"></span><h2>nepi.resources.ns3.ns3simulation module<a class="headerlink" href="#module-nepi.resources.ns3.ns3simulation" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.ns3simulation.NS3Simulation">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.ns3simulation.</tt><tt class="descname">NS3Simulation</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3simulation.html#NS3Simulation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3simulation.NS3Simulation" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference external" href="http://docs.python.org/library/functions.html#object" title="(in Python v2.7)"><tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></a></p>
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3simulation.NS3Simulation.client">
+<tt class="descname">client</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3simulation.html#NS3Simulation.client"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3simulation.NS3Simulation.client" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3simulation.NS3Simulation.create">
+<tt class="descname">create</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3simulation.html#NS3Simulation.create"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3simulation.NS3Simulation.create" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3simulation.NS3Simulation.factory">
+<tt class="descname">factory</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3simulation.html#NS3Simulation.factory"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3simulation.NS3Simulation.factory" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3simulation.NS3Simulation.flush">
+<tt class="descname">flush</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3simulation.html#NS3Simulation.flush"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3simulation.NS3Simulation.flush" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3simulation.NS3Simulation.invoke">
+<tt class="descname">invoke</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3simulation.html#NS3Simulation.invoke"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3simulation.NS3Simulation.invoke" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3simulation.NS3Simulation.ns3_get">
+<tt class="descname">ns3_get</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3simulation.html#NS3Simulation.ns3_get"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3simulation.NS3Simulation.ns3_get" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3simulation.NS3Simulation.ns3_set">
+<tt class="descname">ns3_set</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3simulation.html#NS3Simulation.ns3_set"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3simulation.NS3Simulation.ns3_set" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3simulation.NS3Simulation.shutdown">
+<tt class="descname">shutdown</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3simulation.html#NS3Simulation.shutdown"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3simulation.NS3Simulation.shutdown" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3simulation.NS3Simulation.start">
+<tt class="descname">start</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3simulation.html#NS3Simulation.start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3simulation.NS3Simulation.start" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3simulation.NS3Simulation.stop">
+<tt class="descname">stop</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3simulation.html#NS3Simulation.stop"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3simulation.NS3Simulation.stop" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.ns3wifichannel">
+<span id="nepi-resources-ns3-ns3wifichannel-module"></span><h2>nepi.resources.ns3.ns3wifichannel module<a class="headerlink" href="#module-nepi.resources.ns3.ns3wifichannel" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.ns3wifichannel.NS3BaseWifiChannel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.ns3wifichannel.</tt><tt class="descname">NS3BaseWifiChannel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wifichannel.html#NS3BaseWifiChannel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wifichannel.NS3BaseWifiChannel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.ns3.ns3base.NS3Base" title="nepi.resources.ns3.ns3base.NS3Base"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3base.NS3Base</span></tt></a></p>
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3wifichannel.NS3BaseWifiChannel.phys">
+<tt class="descname">phys</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wifichannel.html#NS3BaseWifiChannel.phys"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wifichannel.NS3BaseWifiChannel.phys" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3wifichannel.NS3BaseWifiChannel.simulation">
+<tt class="descname">simulation</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wifichannel.html#NS3BaseWifiChannel.simulation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wifichannel.NS3BaseWifiChannel.simulation" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.ns3wifimac">
+<span id="nepi-resources-ns3-ns3wifimac-module"></span><h2>nepi.resources.ns3.ns3wifimac module<a class="headerlink" href="#module-nepi.resources.ns3.ns3wifimac" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.ns3wifimac.NS3BaseWifiMac">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.ns3wifimac.</tt><tt class="descname">NS3BaseWifiMac</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wifimac.html#NS3BaseWifiMac"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wifimac.NS3BaseWifiMac" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.ns3.ns3base.NS3Base" title="nepi.resources.ns3.ns3base.NS3Base"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3base.NS3Base</span></tt></a></p>
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3wifimac.NS3BaseWifiMac.device">
+<tt class="descname">device</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wifimac.html#NS3BaseWifiMac.device"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wifimac.NS3BaseWifiMac.device" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3wifimac.NS3BaseWifiMac.node">
+<tt class="descname">node</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wifimac.html#NS3BaseWifiMac.node"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wifimac.NS3BaseWifiMac.node" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.ns3wifinetdevice">
+<span id="nepi-resources-ns3-ns3wifinetdevice-module"></span><h2>nepi.resources.ns3.ns3wifinetdevice module<a class="headerlink" href="#module-nepi.resources.ns3.ns3wifinetdevice" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.ns3wifinetdevice.NS3BaseWifiNetDevice">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.ns3wifinetdevice.</tt><tt class="descname">NS3BaseWifiNetDevice</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wifinetdevice.html#NS3BaseWifiNetDevice"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wifinetdevice.NS3BaseWifiNetDevice" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice" title="nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.ns3wifiphy">
+<span id="nepi-resources-ns3-ns3wifiphy-module"></span><h2>nepi.resources.ns3.ns3wifiphy module<a class="headerlink" href="#module-nepi.resources.ns3.ns3wifiphy" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.ns3wifiphy.NS3BaseWifiPhy">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.ns3wifiphy.</tt><tt class="descname">NS3BaseWifiPhy</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wifiphy.html#NS3BaseWifiPhy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wifiphy.NS3BaseWifiPhy" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.ns3.ns3base.NS3Base" title="nepi.resources.ns3.ns3base.NS3Base"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3base.NS3Base</span></tt></a></p>
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3wifiphy.NS3BaseWifiPhy.channel">
+<tt class="descname">channel</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wifiphy.html#NS3BaseWifiPhy.channel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wifiphy.NS3BaseWifiPhy.channel" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3wifiphy.NS3BaseWifiPhy.device">
+<tt class="descname">device</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wifiphy.html#NS3BaseWifiPhy.device"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wifiphy.NS3BaseWifiPhy.device" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3wifiphy.NS3BaseWifiPhy.node">
+<tt class="descname">node</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wifiphy.html#NS3BaseWifiPhy.node"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wifiphy.NS3BaseWifiPhy.node" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.ns3wifiremotestationmanager">
+<span id="nepi-resources-ns3-ns3wifiremotestationmanager-module"></span><h2>nepi.resources.ns3.ns3wifiremotestationmanager module<a class="headerlink" href="#module-nepi.resources.ns3.ns3wifiremotestationmanager" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.ns3wifiremotestationmanager.</tt><tt class="descname">NS3BaseWifiRemoteStationManager</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wifiremotestationmanager.html#NS3BaseWifiRemoteStationManager"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.ns3.ns3base.NS3Base" title="nepi.resources.ns3.ns3base.NS3Base"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.ns3.ns3base.NS3Base</span></tt></a></p>
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager.device">
+<tt class="descname">device</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wifiremotestationmanager.html#NS3BaseWifiRemoteStationManager.device"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager.device" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager.node">
+<tt class="descname">node</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wifiremotestationmanager.html#NS3BaseWifiRemoteStationManager.node"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager.node" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.ns3wrapper">
+<span id="nepi-resources-ns3-ns3wrapper-module"></span><h2>nepi.resources.ns3.ns3wrapper module<a class="headerlink" href="#module-nepi.resources.ns3.ns3wrapper" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.ns3wrapper.NS3Wrapper">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.ns3wrapper.</tt><tt class="descname">NS3Wrapper</tt><big>(</big><em>loglevel=20</em>, <em>enable_dump=False</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wrapper.html#NS3Wrapper"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wrapper.NS3Wrapper" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference external" href="http://docs.python.org/library/functions.html#object" title="(in Python v2.7)"><tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></a></p>
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3wrapper.NS3Wrapper.allowed_types">
+<tt class="descname">allowed_types</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wrapper.html#NS3Wrapper.allowed_types"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wrapper.NS3Wrapper.allowed_types" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3wrapper.NS3Wrapper.create">
+<tt class="descname">create</tt><big>(</big><em>clazzname</em>, <em>*args</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wrapper.html#NS3Wrapper.create"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wrapper.NS3Wrapper.create" title="Permalink to this definition">¶</a></dt>
+<dd><p>This method should be used to construct ns-3 objects that
+do not have a TypeId (e.g. Values)</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3wrapper.NS3Wrapper.debuger">
+<tt class="descname">debuger</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wrapper.html#NS3Wrapper.debuger"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wrapper.NS3Wrapper.debuger" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3wrapper.NS3Wrapper.factory">
+<tt class="descname">factory</tt><big>(</big><em>type_name</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wrapper.html#NS3Wrapper.factory"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wrapper.NS3Wrapper.factory" title="Permalink to this definition">¶</a></dt>
+<dd><p>This method should be used to construct ns-3 objects
+that have a TypeId and related introspection information</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3wrapper.NS3Wrapper.get">
+<tt class="descname">get</tt><big>(</big><em>uuid</em>, <em>name</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wrapper.html#NS3Wrapper.get"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wrapper.NS3Wrapper.get" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3wrapper.NS3Wrapper.get_object">
+<tt class="descname">get_object</tt><big>(</big><em>uuid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wrapper.html#NS3Wrapper.get_object"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wrapper.NS3Wrapper.get_object" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3wrapper.NS3Wrapper.invoke">
+<tt class="descname">invoke</tt><big>(</big><em>uuid</em>, <em>operation</em>, <em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wrapper.html#NS3Wrapper.invoke"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wrapper.NS3Wrapper.invoke" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3wrapper.NS3Wrapper.is_finished">
+<tt class="descname">is_finished</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wrapper.html#NS3Wrapper.is_finished"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wrapper.NS3Wrapper.is_finished" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3wrapper.NS3Wrapper.is_running">
+<tt class="descname">is_running</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wrapper.html#NS3Wrapper.is_running"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wrapper.NS3Wrapper.is_running" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3wrapper.NS3Wrapper.is_started">
+<tt class="descname">is_started</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wrapper.html#NS3Wrapper.is_started"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wrapper.NS3Wrapper.is_started" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3wrapper.NS3Wrapper.logger">
+<tt class="descname">logger</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wrapper.html#NS3Wrapper.logger"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wrapper.NS3Wrapper.logger" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3wrapper.NS3Wrapper.make_uuid">
+<tt class="descname">make_uuid</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wrapper.html#NS3Wrapper.make_uuid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wrapper.NS3Wrapper.make_uuid" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3wrapper.NS3Wrapper.ns3">
+<tt class="descname">ns3</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wrapper.html#NS3Wrapper.ns3"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wrapper.NS3Wrapper.ns3" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3wrapper.NS3Wrapper.replace_args">
+<tt class="descname">replace_args</tt><big>(</big><em>args</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wrapper.html#NS3Wrapper.replace_args"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wrapper.NS3Wrapper.replace_args" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3wrapper.NS3Wrapper.replace_kwargs">
+<tt class="descname">replace_kwargs</tt><big>(</big><em>kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wrapper.html#NS3Wrapper.replace_kwargs"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wrapper.NS3Wrapper.replace_kwargs" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3wrapper.NS3Wrapper.set">
+<tt class="descname">set</tt><big>(</big><em>uuid</em>, <em>name</em>, <em>value</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wrapper.html#NS3Wrapper.set"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wrapper.NS3Wrapper.set" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3wrapper.NS3Wrapper.shutdown">
+<tt class="descname">shutdown</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wrapper.html#NS3Wrapper.shutdown"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wrapper.NS3Wrapper.shutdown" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3wrapper.NS3Wrapper.start">
+<tt class="descname">start</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wrapper.html#NS3Wrapper.start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wrapper.NS3Wrapper.start" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3wrapper.NS3Wrapper.stop">
+<tt class="descname">stop</tt><big>(</big><em>time=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wrapper.html#NS3Wrapper.stop"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wrapper.NS3Wrapper.stop" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+<dl class="function">
+<dt id="nepi.resources.ns3.ns3wrapper.load_ns3_libraries">
+<tt class="descclassname">nepi.resources.ns3.ns3wrapper.</tt><tt class="descname">load_ns3_libraries</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wrapper.html#load_ns3_libraries"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wrapper.load_ns3_libraries" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="function">
+<dt id="nepi.resources.ns3.ns3wrapper.load_ns3_module">
+<tt class="descclassname">nepi.resources.ns3.ns3wrapper.</tt><tt class="descname">load_ns3_module</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wrapper.html#load_ns3_module"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wrapper.load_ns3_module" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.ns3wrapper_debug">
+<span id="nepi-resources-ns3-ns3wrapper-debug-module"></span><h2>nepi.resources.ns3.ns3wrapper_debug module<a class="headerlink" href="#module-nepi.resources.ns3.ns3wrapper_debug" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger">
+<em class="property">class </em><tt class="descclassname">nepi.resources.ns3.ns3wrapper_debug.</tt><tt class="descname">NS3WrapperDebuger</tt><big>(</big><em>enabled</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wrapper_debug.html#NS3WrapperDebuger"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference external" href="http://docs.python.org/library/functions.html#object" title="(in Python v2.7)"><tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></a></p>
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.dump_create">
+<tt class="descname">dump_create</tt><big>(</big><em>uuid</em>, <em>clazzname</em>, <em>args</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wrapper_debug.html#NS3WrapperDebuger.dump_create"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.dump_create" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.dump_factory">
+<tt class="descname">dump_factory</tt><big>(</big><em>uuid</em>, <em>type_name</em>, <em>kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wrapper_debug.html#NS3WrapperDebuger.dump_factory"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.dump_factory" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.dump_get">
+<tt class="descname">dump_get</tt><big>(</big><em>uuid</em>, <em>name</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wrapper_debug.html#NS3WrapperDebuger.dump_get"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.dump_get" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.dump_header">
+<tt class="descname">dump_header</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wrapper_debug.html#NS3WrapperDebuger.dump_header"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.dump_header" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.dump_invoke">
+<tt class="descname">dump_invoke</tt><big>(</big><em>newuuid</em>, <em>uuid</em>, <em>operation</em>, <em>args</em>, <em>kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wrapper_debug.html#NS3WrapperDebuger.dump_invoke"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.dump_invoke" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.dump_set">
+<tt class="descname">dump_set</tt><big>(</big><em>uuid</em>, <em>name</em>, <em>value</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wrapper_debug.html#NS3WrapperDebuger.dump_set"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.dump_set" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.dump_shutdown">
+<tt class="descname">dump_shutdown</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wrapper_debug.html#NS3WrapperDebuger.dump_shutdown"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.dump_shutdown" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.dump_start">
+<tt class="descname">dump_start</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wrapper_debug.html#NS3WrapperDebuger.dump_start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.dump_start" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.dump_stop">
+<tt class="descname">dump_stop</tt><big>(</big><em>time=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wrapper_debug.html#NS3WrapperDebuger.dump_stop"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.dump_stop" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.dump_to_script">
+<tt class="descname">dump_to_script</tt><big>(</big><em>command</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wrapper_debug.html#NS3WrapperDebuger.dump_to_script"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.dump_to_script" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.enabled">
+<tt class="descname">enabled</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wrapper_debug.html#NS3WrapperDebuger.enabled"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.enabled" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.format_args">
+<tt class="descname">format_args</tt><big>(</big><em>args</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wrapper_debug.html#NS3WrapperDebuger.format_args"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.format_args" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.format_kwargs">
+<tt class="descname">format_kwargs</tt><big>(</big><em>kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wrapper_debug.html#NS3WrapperDebuger.format_kwargs"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.format_kwargs" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.format_value">
+<tt class="descname">format_value</tt><big>(</big><em>value</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wrapper_debug.html#NS3WrapperDebuger.format_value"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.format_value" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.script_path">
+<tt class="descname">script_path</tt><a class="reference internal" href="../_modules/nepi/resources/ns3/ns3wrapper_debug.html#NS3WrapperDebuger.script_path"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.script_path" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3.resource_manager_generator">
+<span id="nepi-resources-ns3-resource-manager-generator-module"></span><h2>nepi.resources.ns3.resource_manager_generator module<a class="headerlink" href="#module-nepi.resources.ns3.resource_manager_generator" title="Permalink to this headline">¶</a></h2>
+<dl class="function">
+<dt id="nepi.resources.ns3.resource_manager_generator.create_ns3_rms">
+<tt class="descclassname">nepi.resources.ns3.resource_manager_generator.</tt><tt class="descname">create_ns3_rms</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/resource_manager_generator.html#create_ns3_rms"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.resource_manager_generator.create_ns3_rms" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="function">
+<dt id="nepi.resources.ns3.resource_manager_generator.select_base_class">
+<tt class="descclassname">nepi.resources.ns3.resource_manager_generator.</tt><tt class="descname">select_base_class</tt><big>(</big><em>ns3</em>, <em>tid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/resource_manager_generator.html#select_base_class"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.resource_manager_generator.select_base_class" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="function">
+<dt id="nepi.resources.ns3.resource_manager_generator.template_attributes">
+<tt class="descclassname">nepi.resources.ns3.resource_manager_generator.</tt><tt class="descname">template_attributes</tt><big>(</big><em>ns3</em>, <em>tid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/resource_manager_generator.html#template_attributes"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.resource_manager_generator.template_attributes" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="function">
+<dt id="nepi.resources.ns3.resource_manager_generator.template_traces">
+<tt class="descclassname">nepi.resources.ns3.resource_manager_generator.</tt><tt class="descname">template_traces</tt><big>(</big><em>ns3</em>, <em>tid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/ns3/resource_manager_generator.html#template_traces"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.ns3.resource_manager_generator.template_traces" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.ns3">
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-nepi.resources.ns3" title="Permalink to this headline">¶</a></h2>
+</div>
+</div>
+
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_layout/nepi.resources.omf.html b/doc/sphinx/_build/html/_layout/nepi.resources.omf.html
new file mode 100644 (file)
index 0000000..c4353be
--- /dev/null
@@ -0,0 +1,1597 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.omf package &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../_static/jquery.js"></script>
+    <script type="text/javascript" src="../_static/underscore.js"></script>
+    <script type="text/javascript" src="../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+  <h3><a href="../index.html">Table Of Contents</a></h3>
+  <ul>
+<li><a class="reference internal" href="#">nepi.resources.omf package</a><ul>
+<li><a class="reference internal" href="#submodules">Submodules</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.omf.application">nepi.resources.omf.application module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.omf.channel">nepi.resources.omf.channel module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.omf.interface">nepi.resources.omf.interface module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.omf.messages_5_4">nepi.resources.omf.messages_5_4 module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.omf.messages_6">nepi.resources.omf.messages_6 module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.omf.node">nepi.resources.omf.node module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.omf.omf5_api">nepi.resources.omf.omf5_api module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.omf.omf6_api">nepi.resources.omf.omf6_api module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.omf.omf6_parser">nepi.resources.omf.omf6_parser module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.omf.omf_api_factory">nepi.resources.omf.omf_api_factory module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.omf.omf_client">nepi.resources.omf.omf_client module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.omf.omf_resource">nepi.resources.omf.omf_resource module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.omf.wilabt_node">nepi.resources.omf.wilabt_node module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.omf">Module contents</a></li>
+</ul>
+</li>
+</ul>
+
+  <h3>This Page</h3>
+  <ul class="this-page-menu">
+    <li><a href="../_sources/_layout/nepi.resources.omf.txt"
+           rel="nofollow">Show Source</a></li>
+  </ul>
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <div class="section" id="nepi-resources-omf-package">
+<h1>nepi.resources.omf package<a class="headerlink" href="#nepi-resources-omf-package" title="Permalink to this headline">¶</a></h1>
+<div class="section" id="submodules">
+<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline">¶</a></h2>
+</div>
+<div class="section" id="module-nepi.resources.omf.application">
+<span id="nepi-resources-omf-application-module"></span><h2>nepi.resources.omf.application module<a class="headerlink" href="#module-nepi.resources.omf.application" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.omf.application.OMFApplication">
+<em class="property">class </em><tt class="descclassname">nepi.resources.omf.application.</tt><tt class="descname">OMFApplication</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/application.html#OMFApplication"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.application.OMFApplication" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.omf.omf_resource.OMFResource" title="nepi.resources.omf.omf_resource.OMFResource"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.omf.omf_resource.OMFResource</span></tt></a></p>
+<dl class="class">
+<dt>
+<tt class="descname">Class Args :</tt></dt>
+<dd><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>ec</strong> (<em>ExperimentController</em>) &#8211; The Experiment controller</li>
+<li><strong>guid</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; guid of the RM</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.application.OMFApplication.add_set_hook">
+<tt class="descname">add_set_hook</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/application.html#OMFApplication.add_set_hook"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.application.OMFApplication.add_set_hook" title="Permalink to this definition">¶</a></dt>
+<dd><p>Initialize the hooks for OMF 5.4 only</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.application.OMFApplication.check_deploy">
+<tt class="descname">check_deploy</tt><big>(</big><em>cid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/application.html#OMFApplication.check_deploy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.application.OMFApplication.check_deploy" title="Permalink to this definition">¶</a></dt>
+<dd><p>Check, through the mail box in the parser, 
+if the confirmation of the creation has been received</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>cid</strong> &#8211; the id of the original message</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.application.OMFApplication.check_release">
+<tt class="descname">check_release</tt><big>(</big><em>cid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/application.html#OMFApplication.check_release"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.application.OMFApplication.check_release" title="Permalink to this definition">¶</a></dt>
+<dd><p>Check, through the mail box in the parser, 
+if the confirmation of the release has been received</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>cid</strong> &#8211; the id of the original message</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.application.OMFApplication.check_start">
+<tt class="descname">check_start</tt><big>(</big><em>uid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/application.html#OMFApplication.check_start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.application.OMFApplication.check_start" title="Permalink to this definition">¶</a></dt>
+<dd><p>Check, through the mail box in the parser, 
+if the confirmation of the start has been received</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>uid</strong> &#8211; the id of the original message</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.application.OMFApplication.do_deploy">
+<tt class="descname">do_deploy</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/application.html#OMFApplication.do_deploy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.application.OMFApplication.do_deploy" title="Permalink to this definition">¶</a></dt>
+<dd><p>Deploy the RM. It means nothing special for an application 
+for now (later it will be upload sources, ...)
+It becomes DEPLOYED after the topic for the application has been created</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.application.OMFApplication.do_release">
+<tt class="descname">do_release</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/application.html#OMFApplication.do_release"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.application.OMFApplication.do_release" title="Permalink to this definition">¶</a></dt>
+<dd><p>Clean the RM at the end of the experiment and release the API.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.application.OMFApplication.do_start">
+<tt class="descname">do_start</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/application.html#OMFApplication.do_start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.application.OMFApplication.do_start" title="Permalink to this definition">¶</a></dt>
+<dd><p>Start the RM. It means : Send Xmpp Message Using OMF protocol 
+to execute the application.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.application.OMFApplication.do_stop">
+<tt class="descname">do_stop</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/application.html#OMFApplication.do_stop"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.application.OMFApplication.do_stop" title="Permalink to this definition">¶</a></dt>
+<dd><p>Stop the RM. It means : Send Xmpp Message Using OMF protocol to 
+kill the application. 
+State is set to STOPPED after the message is sent.</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.omf.application.OMFApplication.exp_id">
+<tt class="descname">exp_id</tt><a class="reference internal" href="../_modules/nepi/resources/omf/application.html#OMFApplication.exp_id"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.application.OMFApplication.exp_id" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.omf.application.OMFApplication.node">
+<tt class="descname">node</tt><a class="reference internal" href="../_modules/nepi/resources/omf/application.html#OMFApplication.node"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.application.OMFApplication.node" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.application.OMFApplication.stdin_hook">
+<tt class="descname">stdin_hook</tt><big>(</big><em>old_value</em>, <em>new_value</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/application.html#OMFApplication.stdin_hook"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.application.OMFApplication.stdin_hook" title="Permalink to this definition">¶</a></dt>
+<dd><p>Set a hook to the stdin attribute in order to send a message at each time
+the value of this parameter is changed. Used ofr OMF 5.4 only</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.application.OMFApplication.trace">
+<tt class="descname">trace</tt><big>(</big><em>name</em>, <em>attr='all'</em>, <em>block=512</em>, <em>offset=0</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/application.html#OMFApplication.trace"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.application.OMFApplication.trace" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.application.OMFApplication.valid_connection">
+<tt class="descname">valid_connection</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/application.html#OMFApplication.valid_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.application.OMFApplication.valid_connection" title="Permalink to this definition">¶</a></dt>
+<dd><p>Check if the connection with the guid in parameter is possible. 
+Only meaningful connections are allowed.</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>guid</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; Guid of RM it will be connected</td>
+</tr>
+<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body">Boolean</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.omf.channel">
+<span id="nepi-resources-omf-channel-module"></span><h2>nepi.resources.omf.channel module<a class="headerlink" href="#module-nepi.resources.omf.channel" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.omf.channel.OMFChannel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.omf.channel.</tt><tt class="descname">OMFChannel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/channel.html#OMFChannel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.channel.OMFChannel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.omf.omf_resource.OMFResource" title="nepi.resources.omf.omf_resource.OMFResource"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.omf.omf_resource.OMFResource</span></tt></a></p>
+<dl class="class">
+<dt>
+<tt class="descname">Class Args :</tt></dt>
+<dd><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>ec</strong> (<em>ExperimentController</em>) &#8211; The Experiment controller</li>
+<li><strong>guid</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; guid of the RM</li>
+<li><strong>creds</strong> (<a class="reference external" href="http://docs.python.org/library/stdtypes.html#dict" title="(in Python v2.7)"><em>dict</em></a>) &#8211; Credentials to communicate with the rm (XmppClient for OMF)</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.omf.channel.OMFChannel.ChannelToFreq">
+<tt class="descname">ChannelToFreq</tt><em class="property"> = {'11': '2462', '10': '2457', '13': '2472', '12': '2467', '1': '2412', '3': '2422', '2': '2417', '5': '2432', '4': '2427', '7': '2442', '6': '2437', '9': '2452', '8': '2447'}</em><a class="headerlink" href="#nepi.resources.omf.channel.OMFChannel.ChannelToFreq" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.channel.OMFChannel.do_deploy">
+<tt class="descname">do_deploy</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/channel.html#OMFChannel.do_deploy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.channel.OMFChannel.do_deploy" title="Permalink to this definition">¶</a></dt>
+<dd><p>Deploy the RM. It means : Get the xmpp client and send messages 
+using OMF 5.4 or 6 protocol to configure the channel.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.channel.OMFChannel.do_release">
+<tt class="descname">do_release</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/channel.html#OMFChannel.do_release"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.channel.OMFChannel.do_release" title="Permalink to this definition">¶</a></dt>
+<dd><p>Clean the RM at the end of the experiment and release the API</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.omf.channel.OMFChannel.exp_id">
+<tt class="descname">exp_id</tt><a class="reference internal" href="../_modules/nepi/resources/omf/channel.html#OMFChannel.exp_id"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.channel.OMFChannel.exp_id" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.channel.OMFChannel.get_frequency">
+<tt class="descname">get_frequency</tt><big>(</big><em>channel</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/channel.html#OMFChannel.get_frequency"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.channel.OMFChannel.get_frequency" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the frequency of a specific channel number</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.channel.OMFChannel.valid_connection">
+<tt class="descname">valid_connection</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/channel.html#OMFChannel.valid_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.channel.OMFChannel.valid_connection" title="Permalink to this definition">¶</a></dt>
+<dd><p>Check if the connection with the guid in parameter is possible.
+Only meaningful connections are allowed.</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>guid</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; Guid of the current RM</td>
+</tr>
+<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body">Boolean</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.omf.interface">
+<span id="nepi-resources-omf-interface-module"></span><h2>nepi.resources.omf.interface module<a class="headerlink" href="#module-nepi.resources.omf.interface" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.omf.interface.OMFWifiInterface">
+<em class="property">class </em><tt class="descclassname">nepi.resources.omf.interface.</tt><tt class="descname">OMFWifiInterface</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/interface.html#OMFWifiInterface"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.interface.OMFWifiInterface" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.omf.omf_resource.OMFResource" title="nepi.resources.omf.omf_resource.OMFResource"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.omf.omf_resource.OMFResource</span></tt></a></p>
+<dl class="class">
+<dt>
+<tt class="descname">Class Args :</tt></dt>
+<dd><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>ec</strong> (<em>ExperimentController</em>) &#8211; The Experiment controller</li>
+<li><strong>guid</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; guid of the RM</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.omf.interface.OMFWifiInterface.channel">
+<tt class="descname">channel</tt><a class="reference internal" href="../_modules/nepi/resources/omf/interface.html#OMFWifiInterface.channel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.interface.OMFWifiInterface.channel" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.interface.OMFWifiInterface.check_deploy">
+<tt class="descname">check_deploy</tt><big>(</big><em>cid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/interface.html#OMFWifiInterface.check_deploy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.interface.OMFWifiInterface.check_deploy" title="Permalink to this definition">¶</a></dt>
+<dd><p>Check, through the mail box in the parser, 
+if the confirmation of the creation has been received</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>cid</strong> &#8211; the id of the original message</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.interface.OMFWifiInterface.check_release">
+<tt class="descname">check_release</tt><big>(</big><em>cid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/interface.html#OMFWifiInterface.check_release"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.interface.OMFWifiInterface.check_release" title="Permalink to this definition">¶</a></dt>
+<dd><p>Check, through the mail box in the parser, 
+if the confirmation of the release has been received</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>cid</strong> &#8211; the id of the original message</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.interface.OMFWifiInterface.configure_iface">
+<tt class="descname">configure_iface</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/interface.html#OMFWifiInterface.configure_iface"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.interface.OMFWifiInterface.configure_iface" title="Permalink to this definition">¶</a></dt>
+<dd><p>Configure the interface without the ip</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.interface.OMFWifiInterface.configure_ip">
+<tt class="descname">configure_ip</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/interface.html#OMFWifiInterface.configure_ip"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.interface.OMFWifiInterface.configure_ip" title="Permalink to this definition">¶</a></dt>
+<dd><p>Configure the ip of the interface</p>
+<p>CELL ID shraing problem. By putting th ip at the end of the configuration, 
+each node use the same channel and can then share the same CELL ID.
+In the second case, the channel is defined at the end and the node don&#8217;t
+share a common CELL ID and can not communicate.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.interface.OMFWifiInterface.configure_on_omf5">
+<tt class="descname">configure_on_omf5</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/interface.html#OMFWifiInterface.configure_on_omf5"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.interface.OMFWifiInterface.configure_on_omf5" title="Permalink to this definition">¶</a></dt>
+<dd><p>Method to configure the wifi interface when OMF 5.4 is used.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.interface.OMFWifiInterface.configure_on_omf6">
+<tt class="descname">configure_on_omf6</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/interface.html#OMFWifiInterface.configure_on_omf6"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.interface.OMFWifiInterface.configure_on_omf6" title="Permalink to this definition">¶</a></dt>
+<dd><p>Method to configure the wifi interface when OMF 6 is used.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.interface.OMFWifiInterface.do_deploy">
+<tt class="descname">do_deploy</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/interface.html#OMFWifiInterface.do_deploy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.interface.OMFWifiInterface.do_deploy" title="Permalink to this definition">¶</a></dt>
+<dd><p>Deploy the RM. It means : Get the xmpp client and send messages 
+using OMF 5.4 or 6 protocol to configure the interface.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.interface.OMFWifiInterface.do_release">
+<tt class="descname">do_release</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/interface.html#OMFWifiInterface.do_release"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.interface.OMFWifiInterface.do_release" title="Permalink to this definition">¶</a></dt>
+<dd><p>Clean the RM at the end of the experiment and release the API</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.omf.interface.OMFWifiInterface.exp_id">
+<tt class="descname">exp_id</tt><a class="reference internal" href="../_modules/nepi/resources/omf/interface.html#OMFWifiInterface.exp_id"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.interface.OMFWifiInterface.exp_id" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.omf.interface.OMFWifiInterface.node">
+<tt class="descname">node</tt><a class="reference internal" href="../_modules/nepi/resources/omf/interface.html#OMFWifiInterface.node"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.interface.OMFWifiInterface.node" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.interface.OMFWifiInterface.valid_connection">
+<tt class="descname">valid_connection</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/interface.html#OMFWifiInterface.valid_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.interface.OMFWifiInterface.valid_connection" title="Permalink to this definition">¶</a></dt>
+<dd><p>Check if the connection with the guid in parameter is possible. 
+Only meaningful connections are allowed.</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>guid</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; Guid of the current RM</td>
+</tr>
+<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body">Boolean</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.omf.messages_5_4">
+<span id="nepi-resources-omf-messages-5-4-module"></span><h2>nepi.resources.omf.messages_5_4 module<a class="headerlink" href="#module-nepi.resources.omf.messages_5_4" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.omf.messages_5_4.MessageHandler">
+<em class="property">class </em><tt class="descclassname">nepi.resources.omf.messages_5_4.</tt><tt class="descname">MessageHandler</tt><big>(</big><em>sliceid</em>, <em>expid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/messages_5_4.html#MessageHandler"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.messages_5_4.MessageHandler" title="Permalink to this definition">¶</a></dt>
+<dd><dl class="class">
+<dt>
+<tt class="descname">Class Args :</tt></dt>
+<dd><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>sliceid</strong> &#8211; Slice Name (= Xmpp Slice)</li>
+<li><strong>expid</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Experiment ID (= Xmpp User)</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<div class="admonition note">
+<p class="first admonition-title">Note</p>
+<p class="last">This class is used only for OMF 5.4 Protocol and is going to become unused</p>
+</div>
+<dl class="method">
+<dt id="nepi.resources.omf.messages_5_4.MessageHandler.alias_function">
+<tt class="descname">alias_function</tt><big>(</big><em>name</em>, <em>target</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/messages_5_4.html#MessageHandler.alias_function"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.messages_5_4.MessageHandler.alias_function" title="Permalink to this definition">¶</a></dt>
+<dd><p>Build an Alias Message</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>name</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Name of the new alias</li>
+<li><strong>target</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Hrn of the target node (ex : omf.plexus.wlab17)</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.messages_5_4.MessageHandler.configure_function">
+<tt class="descname">configure_function</tt><big>(</big><em>target</em>, <em>value</em>, <em>path</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/messages_5_4.html#MessageHandler.configure_function"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.messages_5_4.MessageHandler.configure_function" title="Permalink to this definition">¶</a></dt>
+<dd><p>Build a Configure Message</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>target</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Hrn of the target node (ex : omf.plexus.wlab17)</li>
+<li><strong>value</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; guid of the RM</li>
+<li><strong>path</strong> (<a class="reference external" href="http://docs.python.org/library/stdtypes.html#dict" title="(in Python v2.7)"><em>dict</em></a>) &#8211; Path of the element to configure (ex : net/w0/channel)</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.messages_5_4.MessageHandler.enroll_function">
+<tt class="descname">enroll_function</tt><big>(</big><em>enrollkey</em>, <em>image</em>, <em>index</em>, <em>target</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/messages_5_4.html#MessageHandler.enroll_function"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.messages_5_4.MessageHandler.enroll_function" title="Permalink to this definition">¶</a></dt>
+<dd><p>Build an Enroll Message</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>enrollkey</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Type of enrollment (= 1)</li>
+<li><strong>image</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Image (= * when all the nodes are concerned)</li>
+<li><strong>index</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Index (= 1 in general)</li>
+<li><strong>target</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Hrn of the target node (ex : omf.plexus.wlab17)</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.messages_5_4.MessageHandler.execute_function">
+<tt class="descname">execute_function</tt><big>(</big><em>target</em>, <em>appid</em>, <em>cmdlineargs</em>, <em>path</em>, <em>env</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/messages_5_4.html#MessageHandler.execute_function"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.messages_5_4.MessageHandler.execute_function" title="Permalink to this definition">¶</a></dt>
+<dd><p>Build an Execute Message</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>target</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Hrn of the target node (ex : omf.plexus.wlab17)</li>
+<li><strong>appid</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Application id</li>
+<li><strong>cmdlineargs</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Arguments of the application</li>
+<li><strong>path</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Path of the application</li>
+<li><strong>env</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Environment variables</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.messages_5_4.MessageHandler.exit_function">
+<tt class="descname">exit_function</tt><big>(</big><em>target</em>, <em>appid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/messages_5_4.html#MessageHandler.exit_function"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.messages_5_4.MessageHandler.exit_function" title="Permalink to this definition">¶</a></dt>
+<dd><p>Build an Exit Message</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>target</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Hrn of the target node (ex : omf.plexus.wlab17)</li>
+<li><strong>appid</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Application id (ex : vlc#1)</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.messages_5_4.MessageHandler.log_function">
+<tt class="descname">log_function</tt><big>(</big><em>level</em>, <em>logger</em>, <em>level_name</em>, <em>data</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/messages_5_4.html#MessageHandler.log_function"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.messages_5_4.MessageHandler.log_function" title="Permalink to this definition">¶</a></dt>
+<dd><p>Build a Log Message</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>level</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Level of logging</li>
+<li><strong>logger</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Element publishing the log</li>
+<li><strong>level_name</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Name of the level (ex : INFO)</li>
+<li><strong>data</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Content to publish</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.messages_5_4.MessageHandler.newexp_function">
+<tt class="descname">newexp_function</tt><big>(</big><em>experimentid</em>, <em>address</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/messages_5_4.html#MessageHandler.newexp_function"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.messages_5_4.MessageHandler.newexp_function" title="Permalink to this definition">¶</a></dt>
+<dd><p>Build a NewExp Message</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>experimentid</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Id of the new experiment</li>
+<li><strong>address</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Adress of the destination set of nodes</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.messages_5_4.MessageHandler.noop_function">
+<tt class="descname">noop_function</tt><big>(</big><em>target</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/messages_5_4.html#MessageHandler.noop_function"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.messages_5_4.MessageHandler.noop_function" title="Permalink to this definition">¶</a></dt>
+<dd><p>Build a Noop Message</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>target</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Hrn of the target node (ex : omf.plexus.wlab17)</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.messages_5_4.MessageHandler.stdin_function">
+<tt class="descname">stdin_function</tt><big>(</big><em>target</em>, <em>value</em>, <em>appid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/messages_5_4.html#MessageHandler.stdin_function"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.messages_5_4.MessageHandler.stdin_function" title="Permalink to this definition">¶</a></dt>
+<dd><p>Build an Execute Message</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>value</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; parameter that go in the stdin</li>
+<li><strong>target</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Hrn of the target node (ex : omf.plexus.wlab17)</li>
+<li><strong>appid</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Application id</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.omf.messages_6">
+<span id="nepi-resources-omf-messages-6-module"></span><h2>nepi.resources.omf.messages_6 module<a class="headerlink" href="#module-nepi.resources.omf.messages_6" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.omf.messages_6.MessageHandler">
+<em class="property">class </em><tt class="descclassname">nepi.resources.omf.messages_6.</tt><tt class="descname">MessageHandler</tt><a class="reference internal" href="../_modules/nepi/resources/omf/messages_6.html#MessageHandler"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.messages_6.MessageHandler" title="Permalink to this definition">¶</a></dt>
+<dd><dl class="class">
+<dt>
+<tt class="descname">Class Args :</tt></dt>
+<dd><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>sliceid</strong> &#8211; Slice Name (= Xmpp Slice)</li>
+<li><strong>expid</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Experiment ID (= Xmpp User)</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<div class="admonition note">
+<p class="first admonition-title">Note</p>
+<p class="last">This class is used only for OMF 5.4 Protocol and is going to become unused</p>
+</div>
+<dl class="method">
+<dt id="nepi.resources.omf.messages_6.MessageHandler.configure_function">
+<tt class="descname">configure_function</tt><big>(</big><em>msg_id</em>, <em>src</em>, <em>timestamp</em>, <em>props=None</em>, <em>guards=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/messages_6.html#MessageHandler.configure_function"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.messages_6.MessageHandler.configure_function" title="Permalink to this definition">¶</a></dt>
+<dd><p>Build a configure message</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>msg_id</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Id of the message</li>
+<li><strong>src</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Src node that send the message (jabber source)</li>
+<li><strong>timestamp</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Unix Timestamp</li>
+<li><strong>props</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#list" title="(in Python v2.7)"><em>list</em></a>) &#8211; List of properties</li>
+<li><strong>guards</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#list" title="(in Python v2.7)"><em>list</em></a>) &#8211; list of guards (assertions for properties)</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.messages_6.MessageHandler.create_function">
+<tt class="descname">create_function</tt><big>(</big><em>msg_id</em>, <em>src</em>, <em>rtype</em>, <em>timestamp</em>, <em>props=None</em>, <em>guards=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/messages_6.html#MessageHandler.create_function"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.messages_6.MessageHandler.create_function" title="Permalink to this definition">¶</a></dt>
+<dd><p>Build a create message</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>msg_id</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Id of the message</li>
+<li><strong>src</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Src node that send the message (jabber source)</li>
+<li><strong>rtype</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Type of the object</li>
+<li><strong>timestamp</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Unix Timestamp</li>
+<li><strong>props</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#list" title="(in Python v2.7)"><em>list</em></a>) &#8211; List of properties</li>
+<li><strong>guards</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#list" title="(in Python v2.7)"><em>list</em></a>) &#8211; list of guards (assertions for properties)</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.messages_6.MessageHandler.release_function">
+<tt class="descname">release_function</tt><big>(</big><em>msg_id</em>, <em>src</em>, <em>timestamp</em>, <em>res_id=None</em>, <em>props=None</em>, <em>guards=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/messages_6.html#MessageHandler.release_function"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.messages_6.MessageHandler.release_function" title="Permalink to this definition">¶</a></dt>
+<dd><p>Build a release message</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>msg_id</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Id of the message</li>
+<li><strong>src</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Src node that send the message (jabber source)</li>
+<li><strong>timestamp</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Unix Timestamp</li>
+<li><strong>res_id</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Id of the release resource</li>
+<li><strong>props</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#list" title="(in Python v2.7)"><em>list</em></a>) &#8211; List of properties</li>
+<li><strong>guards</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#list" title="(in Python v2.7)"><em>list</em></a>) &#8211; list of guards (assertions for properties)</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.messages_6.MessageHandler.request_function">
+<tt class="descname">request_function</tt><big>(</big><em>msg_id</em>, <em>src</em>, <em>timestamp</em>, <em>props=None</em>, <em>guards=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/messages_6.html#MessageHandler.request_function"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.messages_6.MessageHandler.request_function" title="Permalink to this definition">¶</a></dt>
+<dd><p>Build a request message</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>msg_id</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Id of the message</li>
+<li><strong>src</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Src node that send the message (jabber source)</li>
+<li><strong>timestamp</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Unix Timestamp</li>
+<li><strong>props</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#list" title="(in Python v2.7)"><em>list</em></a>) &#8211; List of properties</li>
+<li><strong>guards</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#list" title="(in Python v2.7)"><em>list</em></a>) &#8211; list of guards (assertions for properties)</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.omf.node">
+<span id="nepi-resources-omf-node-module"></span><h2>nepi.resources.omf.node module<a class="headerlink" href="#module-nepi.resources.omf.node" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.omf.node.OMFNode">
+<em class="property">class </em><tt class="descclassname">nepi.resources.omf.node.</tt><tt class="descname">OMFNode</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/node.html#OMFNode"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.node.OMFNode" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.omf.omf_resource.OMFResource" title="nepi.resources.omf.omf_resource.OMFResource"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.omf.omf_resource.OMFResource</span></tt></a></p>
+<dl class="class">
+<dt>
+<tt class="descname">Class Args :</tt></dt>
+<dd><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>ec</strong> (<em>ExperimentController</em>) &#8211; The Experiment controller</li>
+<li><strong>guid</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; guid of the RM</li>
+<li><strong>creds</strong> (<a class="reference external" href="http://docs.python.org/library/stdtypes.html#dict" title="(in Python v2.7)"><em>dict</em></a>) &#8211; Credentials to communicate with the rm (XmppClient for OMF)</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.node.OMFNode.do_deploy">
+<tt class="descname">do_deploy</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/node.html#OMFNode.do_deploy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.node.OMFNode.do_deploy" title="Permalink to this definition">¶</a></dt>
+<dd><p>Deploy the RM. It means : Send Xmpp Message Using OMF protocol 
+to enroll the node into the experiment.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.node.OMFNode.do_release">
+<tt class="descname">do_release</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/node.html#OMFNode.do_release"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.node.OMFNode.do_release" title="Permalink to this definition">¶</a></dt>
+<dd><p>Clean the RM at the end of the experiment by unenrolling
+the node from the topic</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.omf.node.OMFNode.exp_id">
+<tt class="descname">exp_id</tt><a class="reference internal" href="../_modules/nepi/resources/omf/node.html#OMFNode.exp_id"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.node.OMFNode.exp_id" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.node.OMFNode.valid_connection">
+<tt class="descname">valid_connection</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/node.html#OMFNode.valid_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.node.OMFNode.valid_connection" title="Permalink to this definition">¶</a></dt>
+<dd><p>Check if the connection with the guid in parameter is possible. 
+Only meaningful connections are allowed.</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>guid</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; Guid of the current RM</td>
+</tr>
+<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body">Boolean</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.omf.omf5_api">
+<span id="nepi-resources-omf-omf5-api-module"></span><h2>nepi.resources.omf.omf5_api module<a class="headerlink" href="#module-nepi.resources.omf.omf5_api" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.omf.omf5_api.OMF5API">
+<em class="property">class </em><tt class="descclassname">nepi.resources.omf.omf5_api.</tt><tt class="descname">OMF5API</tt><big>(</big><em>host</em>, <em>slice</em>, <em>port</em>, <em>password</em>, <em>xmpp_root=None</em>, <em>exp_id=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf5_api.html#OMF5API"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf5_api.OMF5API" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.util.html#nepi.util.logger.Logger" title="nepi.util.logger.Logger"><tt class="xref py py-class docutils literal"><span class="pre">nepi.util.logger.Logger</span></tt></a></p>
+<dl class="class">
+<dt>
+<tt class="descname">Class Args :</tt></dt>
+<dd><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>host</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Xmpp Server</li>
+<li><strong>slice</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Xmpp Slice</li>
+<li><strong>port</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Xmpp Port</li>
+<li><strong>password</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Xmpp password</li>
+<li><strong>xmpp_root</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Root of the Xmpp Topic Architecture</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<div class="admonition note">
+<p class="first admonition-title">Note</p>
+<p class="last">This class is the implementation of an OMF 5.4 API. 
+Since the version 5.4.1, the Topic Architecture start with OMF_5.4 
+instead of OMF used for OMF5.3</p>
+</div>
+<dl class="method">
+<dt id="nepi.resources.omf.omf5_api.OMF5API.configure">
+<tt class="descname">configure</tt><big>(</big><em>hostname</em>, <em>attribute</em>, <em>value</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf5_api.html#OMF5API.configure"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf5_api.OMF5API.configure" title="Permalink to this definition">¶</a></dt>
+<dd><p>Configure attribute on the node</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>hostname</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Full hrn of the node</li>
+<li><strong>attribute</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Attribute that need to be configured (
+often written as /net/wX/attribute, with X the interface number)</li>
+<li><strong>value</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Value of the attribute</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.omf5_api.OMF5API.delete">
+<tt class="descname">delete</tt><big>(</big><em>hostname</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf5_api.html#OMF5API.delete"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf5_api.OMF5API.delete" title="Permalink to this definition">¶</a></dt>
+<dd><p>Delete the topic corresponding to the hostname for this session</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>hostname</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Full hrn of the node</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.omf5_api.OMF5API.disconnect">
+<tt class="descname">disconnect</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf5_api.html#OMF5API.disconnect"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf5_api.OMF5API.disconnect" title="Permalink to this definition">¶</a></dt>
+<dd><p>Delete the session and logger topics. Then disconnect</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.omf5_api.OMF5API.enroll_host">
+<tt class="descname">enroll_host</tt><big>(</big><em>hostname</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf5_api.html#OMF5API.enroll_host"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf5_api.OMF5API.enroll_host" title="Permalink to this definition">¶</a></dt>
+<dd><dl class="docutils">
+<dt>Create and Subscribe to the session topic and the resources</dt>
+<dd>corresponding to the hostname</dd>
+</dl>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>hostname</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Full hrn of the node</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.omf5_api.OMF5API.execute">
+<tt class="descname">execute</tt><big>(</big><em>hostname</em>, <em>app_id</em>, <em>arguments</em>, <em>path</em>, <em>env</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf5_api.html#OMF5API.execute"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf5_api.OMF5API.execute" title="Permalink to this definition">¶</a></dt>
+<dd><p>Execute command on the node</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>hostname</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Full hrn of the node</li>
+<li><strong>app_id</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Application Id (Any id that represents in a unique 
+way the application)</li>
+<li><strong>arguments</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Arguments of the application</li>
+<li><strong>path</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Path of the application</li>
+<li><strong>env</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Environnement values for the application</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.omf5_api.OMF5API.exit">
+<tt class="descname">exit</tt><big>(</big><em>hostname</em>, <em>app_id</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf5_api.html#OMF5API.exit"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf5_api.OMF5API.exit" title="Permalink to this definition">¶</a></dt>
+<dd><p>Kill an application started with OMF</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>hostname</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Full hrn of the node</li>
+<li><strong>app_id</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Application Id of the application you want to stop</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.omf5_api.OMF5API.release">
+<tt class="descname">release</tt><big>(</big><em>hostname</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf5_api.html#OMF5API.release"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf5_api.OMF5API.release" title="Permalink to this definition">¶</a></dt>
+<dd><p>Delete the session and logger topics. Then disconnect</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.omf5_api.OMF5API.send_stdin">
+<tt class="descname">send_stdin</tt><big>(</big><em>hostname</em>, <em>value</em>, <em>app_id</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf5_api.html#OMF5API.send_stdin"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf5_api.OMF5API.send_stdin" title="Permalink to this definition">¶</a></dt>
+<dd><p>Send to the stdin of the application the value</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>hostname</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Full hrn of the node</li>
+<li><strong>appid</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Application Id (Any id that represents in a unique 
+way the application)</li>
+<li><strong>value</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; parameter to execute in the stdin of the application</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.omf.omf6_api">
+<span id="nepi-resources-omf-omf6-api-module"></span><h2>nepi.resources.omf.omf6_api module<a class="headerlink" href="#module-nepi.resources.omf.omf6_api" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.omf.omf6_api.OMF6API">
+<em class="property">class </em><tt class="descclassname">nepi.resources.omf.omf6_api.</tt><tt class="descname">OMF6API</tt><big>(</big><em>server</em>, <em>user='nepi'</em>, <em>port='5222'</em>, <em>password='1234'</em>, <em>exp_id=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf6_api.html#OMF6API"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf6_api.OMF6API" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.util.html#nepi.util.logger.Logger" title="nepi.util.logger.Logger"><tt class="xref py py-class docutils literal"><span class="pre">nepi.util.logger.Logger</span></tt></a></p>
+<dl class="class">
+<dt>
+<tt class="descname">Class Args :</tt></dt>
+<dd><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>server</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Xmpp Server</li>
+<li><strong>user</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Xmpp User</li>
+<li><strong>port</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Xmpp Port</li>
+<li><strong>password</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Xmpp password</li>
+<li><strong>xmpp_root</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Root of the Xmpp Topic Architecture</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<div class="admonition note">
+<p class="first admonition-title">Note</p>
+<p class="last">This class is the implementation of an OMF 5.4 API. 
+Since the version 5.4.1, the Topic Architecture start with OMF_5.4 
+instead of OMF used for OMF5.3</p>
+</div>
+<dl class="method">
+<dt id="nepi.resources.omf.omf6_api.OMF6API.check_mailbox">
+<tt class="descname">check_mailbox</tt><big>(</big><em>itype</em>, <em>attr</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf6_api.html#OMF6API.check_mailbox"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf6_api.OMF6API.check_mailbox" title="Permalink to this definition">¶</a></dt>
+<dd><p>Check the mail box</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>itype</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; type of mail</li>
+<li><strong>attr</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; value wanted</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.omf6_api.OMF6API.check_ready">
+<tt class="descname">check_ready</tt><big>(</big><em>xmpp</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf6_api.html#OMF6API.check_ready"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf6_api.OMF6API.check_ready" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.omf6_api.OMF6API.create_and_enroll_topic">
+<tt class="descname">create_and_enroll_topic</tt><big>(</big><em>topic</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf6_api.html#OMF6API.create_and_enroll_topic"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf6_api.OMF6API.create_and_enroll_topic" title="Permalink to this definition">¶</a></dt>
+<dd><dl class="docutils">
+<dt>Create and Subscribe to the session topic and the resources</dt>
+<dd>corresponding to the hostname</dd>
+</dl>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>hostname</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Full hrn of the node</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.omf6_api.OMF6API.disconnect">
+<tt class="descname">disconnect</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf6_api.html#OMF6API.disconnect"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf6_api.OMF6API.disconnect" title="Permalink to this definition">¶</a></dt>
+<dd><p>Delete the session and logger topics. Then disconnect</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.omf6_api.OMF6API.enroll_topic">
+<tt class="descname">enroll_topic</tt><big>(</big><em>topic</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf6_api.html#OMF6API.enroll_topic"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf6_api.OMF6API.enroll_topic" title="Permalink to this definition">¶</a></dt>
+<dd><p>Create and Subscribe to the session topic and the resources
+corresponding to the hostname</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.omf6_api.OMF6API.frcp_configure">
+<tt class="descname">frcp_configure</tt><big>(</big><em>topic</em>, <em>props=None</em>, <em>guards=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf6_api.html#OMF6API.frcp_configure"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf6_api.OMF6API.frcp_configure" title="Permalink to this definition">¶</a></dt>
+<dd><p>Publish a configure message</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.omf6_api.OMF6API.frcp_create">
+<tt class="descname">frcp_create</tt><big>(</big><em>msg_id</em>, <em>topic</em>, <em>rtype</em>, <em>props=None</em>, <em>guards=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf6_api.html#OMF6API.frcp_create"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf6_api.OMF6API.frcp_create" title="Permalink to this definition">¶</a></dt>
+<dd><p>Publish a create message</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.omf6_api.OMF6API.frcp_inform">
+<tt class="descname">frcp_inform</tt><big>(</big><em>topic</em>, <em>cid</em>, <em>itype</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf6_api.html#OMF6API.frcp_inform"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf6_api.OMF6API.frcp_inform" title="Permalink to this definition">¶</a></dt>
+<dd><p>Publish an inform message</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.omf6_api.OMF6API.frcp_release">
+<tt class="descname">frcp_release</tt><big>(</big><em>msg_id</em>, <em>parent</em>, <em>child</em>, <em>res_id=None</em>, <em>props=None</em>, <em>guards=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf6_api.html#OMF6API.frcp_release"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf6_api.OMF6API.frcp_release" title="Permalink to this definition">¶</a></dt>
+<dd><p>Publish a release message</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.omf6_api.OMF6API.frcp_request">
+<tt class="descname">frcp_request</tt><big>(</big><em>topic</em>, <em>props=None</em>, <em>guards=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf6_api.html#OMF6API.frcp_request"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf6_api.OMF6API.frcp_request" title="Permalink to this definition">¶</a></dt>
+<dd><p>Execute command on the node</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.omf6_api.OMF6API.unenroll_topic">
+<tt class="descname">unenroll_topic</tt><big>(</big><em>topic</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf6_api.html#OMF6API.unenroll_topic"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf6_api.OMF6API.unenroll_topic" title="Permalink to this definition">¶</a></dt>
+<dd><p>Create and Subscribe to the session topic and the resources
+corresponding to the hostname</p>
+</dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.omf.omf6_parser">
+<span id="nepi-resources-omf-omf6-parser-module"></span><h2>nepi.resources.omf.omf6_parser module<a class="headerlink" href="#module-nepi.resources.omf.omf6_parser" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.omf.omf6_parser.OMF6Parser">
+<em class="property">class </em><tt class="descclassname">nepi.resources.omf.omf6_parser.</tt><tt class="descname">OMF6Parser</tt><a class="reference internal" href="../_modules/nepi/resources/omf/omf6_parser.html#OMF6Parser"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf6_parser.OMF6Parser" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.util.html#nepi.util.logger.Logger" title="nepi.util.logger.Logger"><tt class="xref py py-class docutils literal"><span class="pre">nepi.util.logger.Logger</span></tt></a></p>
+<dl class="class">
+<dt>
+<tt class="descname">Class Args :</tt></dt>
+<dd><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>jid</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Jabber Id (= Xmpp Slice + Date)</li>
+<li><strong>password</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Jabber Password (= Xmpp Password)</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<div class="admonition note">
+<p class="first admonition-title">Note</p>
+<p class="last">This class is an XMPP Client with customized method</p>
+</div>
+<dl class="method">
+<dt id="nepi.resources.omf.omf6_parser.OMF6Parser.check_mailbox">
+<tt class="descname">check_mailbox</tt><big>(</big><em>itype</em>, <em>attr</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf6_parser.html#OMF6Parser.check_mailbox"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf6_parser.OMF6Parser.check_mailbox" title="Permalink to this definition">¶</a></dt>
+<dd><p>Check the mail box</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>itype</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; type of mail</li>
+<li><strong>attr</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; value wanted</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.omf6_parser.OMF6Parser.handle">
+<tt class="descname">handle</tt><big>(</big><em>iq</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf6_parser.html#OMF6Parser.handle"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf6_parser.OMF6Parser.handle" title="Permalink to this definition">¶</a></dt>
+<dd><p>Check the mail box</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>iq</strong> &#8211; message received</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.omf6_parser.OMF6Parser.init_mailbox">
+<tt class="descname">init_mailbox</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf6_parser.html#OMF6Parser.init_mailbox"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf6_parser.OMF6Parser.init_mailbox" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.omf.omf_api_factory">
+<span id="nepi-resources-omf-omf-api-factory-module"></span><h2>nepi.resources.omf.omf_api_factory module<a class="headerlink" href="#module-nepi.resources.omf.omf_api_factory" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.omf.omf_api_factory.OMFAPIFactory">
+<em class="property">class </em><tt class="descclassname">nepi.resources.omf.omf_api_factory.</tt><tt class="descname">OMFAPIFactory</tt><a class="reference internal" href="../_modules/nepi/resources/omf/omf_api_factory.html#OMFAPIFactory"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf_api_factory.OMFAPIFactory" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference external" href="http://docs.python.org/library/functions.html#object" title="(in Python v2.7)"><tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></a></p>
+<div class="admonition note">
+<p class="first admonition-title">Note</p>
+<p class="last">It allows the different RM to use the same xmpp client if they use 
+the same credentials.  For the moment, it is focused on XMPP.</p>
+</div>
+<dl class="classmethod">
+<dt id="nepi.resources.omf.omf_api_factory.OMFAPIFactory.create_api">
+<em class="property">classmethod </em><tt class="descname">create_api</tt><big>(</big><em>version</em>, <em>server</em>, <em>user</em>, <em>port</em>, <em>password</em>, <em>exp_id</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf_api_factory.html#OMFAPIFactory.create_api"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf_api_factory.OMFAPIFactory.create_api" title="Permalink to this definition">¶</a></dt>
+<dd><p>Create an OMF API if this one doesn&#8217;t exist yet with this credentials</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>version</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; OMF Version. Either 5 or 6</li>
+<li><strong>server</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Xmpp Server Adress</li>
+<li><strong>user</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Xmpp User</li>
+<li><strong>port</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Xmpp Port (Default : 5222)</li>
+<li><strong>password</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Xmpp Password</li>
+<li><strong>exp_id</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Id of the experiment</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="classmethod">
+<dt id="nepi.resources.omf.omf_api_factory.OMFAPIFactory.get_api">
+<em class="property">classmethod </em><tt class="descname">get_api</tt><big>(</big><em>version</em>, <em>server</em>, <em>user</em>, <em>port</em>, <em>password</em>, <em>exp_id=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf_api_factory.html#OMFAPIFactory.get_api"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf_api_factory.OMFAPIFactory.get_api" title="Permalink to this definition">¶</a></dt>
+<dd><p>Get an OMF Api</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>version</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; OMF Version. Either 5 or 6</li>
+<li><strong>server</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Xmpp Server Adress</li>
+<li><strong>user</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Xmpp User</li>
+<li><strong>port</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Xmpp Port (Default : 5222)</li>
+<li><strong>password</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Xmpp Password</li>
+<li><strong>exp_id</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Id of the experiment</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.omf.omf_api_factory.OMFAPIFactory.lock">
+<tt class="descname">lock</tt><em class="property"> = &lt;thread.lock object at 0x7f028fc193b0&gt;</em><a class="headerlink" href="#nepi.resources.omf.omf_api_factory.OMFAPIFactory.lock" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="classmethod">
+<dt id="nepi.resources.omf.omf_api_factory.OMFAPIFactory.release_api">
+<em class="property">classmethod </em><tt class="descname">release_api</tt><big>(</big><em>version</em>, <em>server</em>, <em>user</em>, <em>port</em>, <em>password</em>, <em>exp_id=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf_api_factory.html#OMFAPIFactory.release_api"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf_api_factory.OMFAPIFactory.release_api" title="Permalink to this definition">¶</a></dt>
+<dd><p>Release an OMF API with this credentials</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>version</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; OMF Version. Either 5 or 6</li>
+<li><strong>server</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Xmpp Server Adress</li>
+<li><strong>user</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Xmpp User</li>
+<li><strong>port</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Xmpp Port (Default : 5222)</li>
+<li><strong>password</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Xmpp Password</li>
+<li><strong>exp_id</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Id of the experiment</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.omf.omf_client">
+<span id="nepi-resources-omf-omf-client-module"></span><h2>nepi.resources.omf.omf_client module<a class="headerlink" href="#module-nepi.resources.omf.omf_client" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.omf.omf_client.BaseOMFClient">
+<em class="property">class </em><tt class="descclassname">nepi.resources.omf.omf_client.</tt><tt class="descname">BaseOMFClient</tt><big>(</big><em>jid</em>, <em>password</em>, <em>ssl=False</em>, <em>plugin_config={}</em>, <em>plugin_whitelist=[]</em>, <em>escape_quotes=True</em>, <em>sasl_mech=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf_client.html#BaseOMFClient"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf_client.BaseOMFClient" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">sleekxmpp.clientxmpp.ClientXMPP</span></tt></p>
+</dd></dl>
+
+<dl class="class">
+<dt id="nepi.resources.omf.omf_client.OMFClient">
+<em class="property">class </em><tt class="descclassname">nepi.resources.omf.omf_client.</tt><tt class="descname">OMFClient</tt><big>(</big><em>jid</em>, <em>password</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf_client.html#OMFClient"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf_client.OMFClient" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.omf.omf_client.BaseOMFClient" title="nepi.resources.omf.omf_client.BaseOMFClient"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.omf.omf_client.BaseOMFClient</span></tt></a>, <a class="reference internal" href="nepi.util.html#nepi.util.logger.Logger" title="nepi.util.logger.Logger"><tt class="xref py py-class docutils literal"><span class="pre">nepi.util.logger.Logger</span></tt></a></p>
+<dl class="class">
+<dt>
+<tt class="descname">Class Args :</tt></dt>
+<dd><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>jid</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Jabber Id (= Xmpp Slice + Date)</li>
+<li><strong>password</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Jabber Password (= Xmpp Password)</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<div class="admonition note">
+<p class="first admonition-title">Note</p>
+<p class="last">This class is an XMPP Client with customized method</p>
+</div>
+<dl class="method">
+<dt id="nepi.resources.omf.omf_client.OMFClient.check_mailbox">
+<tt class="descname">check_mailbox</tt><big>(</big><em>itype</em>, <em>attr</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf_client.html#OMFClient.check_mailbox"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf_client.OMFClient.check_mailbox" title="Permalink to this definition">¶</a></dt>
+<dd><p>Check the mail box</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>itype</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; type of mail</li>
+<li><strong>attr</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; value wanted</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.omf_client.OMFClient.create">
+<tt class="descname">create</tt><big>(</big><em>node</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf_client.html#OMFClient.create"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf_client.OMFClient.create" title="Permalink to this definition">¶</a></dt>
+<dd><p>Create the topic corresponding to the node</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>node</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Name of the topic, corresponding to the node (ex : omf.plexus.wlab17)</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.omf_client.OMFClient.delete">
+<tt class="descname">delete</tt><big>(</big><em>node</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf_client.html#OMFClient.delete"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf_client.OMFClient.delete" title="Permalink to this definition">¶</a></dt>
+<dd><p>Delete the topic corresponding to the node</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>node</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Name of the topic, corresponding to the node (ex : omf.plexus.wlab17)</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.omf_client.OMFClient.get">
+<tt class="descname">get</tt><big>(</big><em>data</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf_client.html#OMFClient.get"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf_client.OMFClient.get" title="Permalink to this definition">¶</a></dt>
+<dd><p>Get the item</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>data</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; data from which the items will be get back</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.omf_client.OMFClient.handle_omf_message">
+<tt class="descname">handle_omf_message</tt><big>(</big><em>iq</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf_client.html#OMFClient.handle_omf_message"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf_client.OMFClient.handle_omf_message" title="Permalink to this definition">¶</a></dt>
+<dd><p>Handle published/received message</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>iq</strong> (<em>Iq Stanza</em>) &#8211; Stanzas that is currently published/received</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.omf_client.OMFClient.nodes">
+<tt class="descname">nodes</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf_client.html#OMFClient.nodes"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf_client.OMFClient.nodes" title="Permalink to this definition">¶</a></dt>
+<dd><p>Get all the nodes of the Xmppp Server.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.omf_client.OMFClient.publish">
+<tt class="descname">publish</tt><big>(</big><em>data</em>, <em>node</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf_client.html#OMFClient.publish"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf_client.OMFClient.publish" title="Permalink to this definition">¶</a></dt>
+<dd><p>Publish the data to the corresponding topic</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>data</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Data that will be published</li>
+<li><strong>node</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Name of the topic</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.omf_client.OMFClient.purge">
+<tt class="descname">purge</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf_client.html#OMFClient.purge"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf_client.OMFClient.purge" title="Permalink to this definition">¶</a></dt>
+<dd><p>Purge the information in the server</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.omf.omf_client.OMFClient.ready">
+<tt class="descname">ready</tt><a class="reference internal" href="../_modules/nepi/resources/omf/omf_client.html#OMFClient.ready"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf_client.OMFClient.ready" title="Permalink to this definition">¶</a></dt>
+<dd><p>Check if the client is ready</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.omf_client.OMFClient.register">
+<tt class="descname">register</tt><big>(</big><em>iq</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf_client.html#OMFClient.register"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf_client.OMFClient.register" title="Permalink to this definition">¶</a></dt>
+<dd><p>Register to the Xmppp Server. This function is called directly by the sleekXmpp library</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.omf_client.OMFClient.retract">
+<tt class="descname">retract</tt><big>(</big><em>data</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf_client.html#OMFClient.retract"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf_client.OMFClient.retract" title="Permalink to this definition">¶</a></dt>
+<dd><p>Retract the item</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>data</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; data from which the item will be retracted</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.omf_client.OMFClient.start">
+<tt class="descname">start</tt><big>(</big><em>event</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf_client.html#OMFClient.start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf_client.OMFClient.start" title="Permalink to this definition">¶</a></dt>
+<dd><p>Send presence to the Xmppp Server. This function is called directly by the sleekXmpp library</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.omf_client.OMFClient.subscribe">
+<tt class="descname">subscribe</tt><big>(</big><em>node</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf_client.html#OMFClient.subscribe"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf_client.OMFClient.subscribe" title="Permalink to this definition">¶</a></dt>
+<dd><p>Subscribe to a topic</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>node</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Name of the topic</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.omf_client.OMFClient.subscriptions">
+<tt class="descname">subscriptions</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf_client.html#OMFClient.subscriptions"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf_client.OMFClient.subscriptions" title="Permalink to this definition">¶</a></dt>
+<dd><p>Get all the subscriptions of the Xmppp Server.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.omf_client.OMFClient.unregister">
+<tt class="descname">unregister</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf_client.html#OMFClient.unregister"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf_client.OMFClient.unregister" title="Permalink to this definition">¶</a></dt>
+<dd><p>Unregister from the Xmppp Server.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.omf_client.OMFClient.unsubscribe">
+<tt class="descname">unsubscribe</tt><big>(</big><em>node</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf_client.html#OMFClient.unsubscribe"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf_client.OMFClient.unsubscribe" title="Permalink to this definition">¶</a></dt>
+<dd><p>Unsubscribe to a topic</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>node</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Name of the topic</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.omf.omf_resource">
+<span id="nepi-resources-omf-omf-resource-module"></span><h2>nepi.resources.omf.omf_resource module<a class="headerlink" href="#module-nepi.resources.omf.omf_resource" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.omf.omf_resource.OMFResource">
+<em class="property">class </em><tt class="descclassname">nepi.resources.omf.omf_resource.</tt><tt class="descname">OMFResource</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/omf_resource.html#OMFResource"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf_resource.OMFResource" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.execution.html#nepi.execution.resource.ResourceManager" title="nepi.execution.resource.ResourceManager"><tt class="xref py py-class docutils literal"><span class="pre">nepi.execution.resource.ResourceManager</span></tt></a></p>
+<p>Generic resource gathering XMPP credential information and common methods
+for OMF nodes, channels, applications, etc.</p>
+</dd></dl>
+
+<dl class="class">
+<dt id="nepi.resources.omf.omf_resource.ResourceGateway">
+<em class="property">class </em><tt class="descclassname">nepi.resources.omf.omf_resource.</tt><tt class="descname">ResourceGateway</tt><a class="reference internal" href="../_modules/nepi/resources/omf/omf_resource.html#ResourceGateway"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.omf_resource.ResourceGateway" title="Permalink to this definition">¶</a></dt>
+<dd><p>Dictionary used to set OMF gateway depending on Testbed information.</p>
+<dl class="attribute">
+<dt id="nepi.resources.omf.omf_resource.ResourceGateway.AMtoGateway">
+<tt class="descname">AMtoGateway</tt><em class="property"> = {'nitlab.inf.uth.gr': 'nitlab.inf.uth.gr', 'nicta': '??.??.??', 'am.wilab2.ilabt.iminds.be': 'ops.wilab2.ilabt.iminds.be'}</em><a class="headerlink" href="#nepi.resources.omf.omf_resource.ResourceGateway.AMtoGateway" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.omf.omf_resource.ResourceGateway.TestbedtoGateway">
+<tt class="descname">TestbedtoGateway</tt><em class="property"> = {'wilabt': 'ops.wilab2.ilabt.iminds.be', 'nicta': '??.??.??', 'nitos': 'nitlab.inf.uth.gr'}</em><a class="headerlink" href="#nepi.resources.omf.omf_resource.ResourceGateway.TestbedtoGateway" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.omf.wilabt_node">
+<span id="nepi-resources-omf-wilabt-node-module"></span><h2>nepi.resources.omf.wilabt_node module<a class="headerlink" href="#module-nepi.resources.omf.wilabt_node" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.omf.wilabt_node.WilabtSfaNode">
+<em class="property">class </em><tt class="descclassname">nepi.resources.omf.wilabt_node.</tt><tt class="descname">WilabtSfaNode</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/wilabt_node.html#WilabtSfaNode"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.wilabt_node.WilabtSfaNode" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.omf.node.OMFNode" title="nepi.resources.omf.node.OMFNode"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.omf.node.OMFNode</span></tt></a></p>
+<dl class="method">
+<dt id="nepi.resources.omf.wilabt_node.WilabtSfaNode.do_deploy">
+<tt class="descname">do_deploy</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/wilabt_node.html#WilabtSfaNode.do_deploy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.wilabt_node.WilabtSfaNode.do_deploy" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.wilabt_node.WilabtSfaNode.do_discover">
+<tt class="descname">do_discover</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/wilabt_node.html#WilabtSfaNode.do_discover"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.wilabt_node.WilabtSfaNode.do_discover" title="Permalink to this definition">¶</a></dt>
+<dd><p>Based on the attributes defined by the user, discover the suitable 
+node for provision.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.wilabt_node.WilabtSfaNode.do_provision">
+<tt class="descname">do_provision</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/wilabt_node.html#WilabtSfaNode.do_provision"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.wilabt_node.WilabtSfaNode.do_provision" title="Permalink to this definition">¶</a></dt>
+<dd><p>Add node to user&#8217;s slice and verifing that the node is functioning
+correctly. Check ssh, omf rc running, hostname, file system.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.wilabt_node.WilabtSfaNode.do_release">
+<tt class="descname">do_release</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/wilabt_node.html#WilabtSfaNode.do_release"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.wilabt_node.WilabtSfaNode.do_release" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.wilabt_node.WilabtSfaNode.execute">
+<tt class="descname">execute</tt><big>(</big><em>command</em>, <em>sudo=False</em>, <em>env=None</em>, <em>tty=False</em>, <em>forward_x11=False</em>, <em>retry=3</em>, <em>connect_timeout=30</em>, <em>strict_host_checking=False</em>, <em>persistent=True</em>, <em>blocking=True</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/wilabt_node.html#WilabtSfaNode.execute"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.wilabt_node.WilabtSfaNode.execute" title="Permalink to this definition">¶</a></dt>
+<dd><p>Notice that this invocation will block until the
+execution finishes. If this is not the desired behavior,
+use &#8216;run&#8217; instead.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.wilabt_node.WilabtSfaNode.fail_discovery">
+<tt class="descname">fail_discovery</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/wilabt_node.html#WilabtSfaNode.fail_discovery"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.wilabt_node.WilabtSfaNode.fail_discovery" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.wilabt_node.WilabtSfaNode.fail_node_not_alive">
+<tt class="descname">fail_node_not_alive</tt><big>(</big><em>host=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/wilabt_node.html#WilabtSfaNode.fail_node_not_alive"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.wilabt_node.WilabtSfaNode.fail_node_not_alive" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.wilabt_node.WilabtSfaNode.fail_node_not_available">
+<tt class="descname">fail_node_not_available</tt><big>(</big><em>host</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/wilabt_node.html#WilabtSfaNode.fail_node_not_available"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.wilabt_node.WilabtSfaNode.fail_node_not_available" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.wilabt_node.WilabtSfaNode.fail_not_enough_nodes">
+<tt class="descname">fail_not_enough_nodes</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/wilabt_node.html#WilabtSfaNode.fail_not_enough_nodes"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.wilabt_node.WilabtSfaNode.fail_not_enough_nodes" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.wilabt_node.WilabtSfaNode.fail_sfaapi">
+<tt class="descname">fail_sfaapi</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/wilabt_node.html#WilabtSfaNode.fail_sfaapi"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.wilabt_node.WilabtSfaNode.fail_sfaapi" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.omf.wilabt_node.WilabtSfaNode.sfaapi">
+<tt class="descname">sfaapi</tt><a class="reference internal" href="../_modules/nepi/resources/omf/wilabt_node.html#WilabtSfaNode.sfaapi"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.wilabt_node.WilabtSfaNode.sfaapi" title="Permalink to this definition">¶</a></dt>
+<dd><p>Property to instanciate the SFA API based in sfi client.
+For each SFA method called this instance is used.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.omf.wilabt_node.WilabtSfaNode.valid_connection">
+<tt class="descname">valid_connection</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/omf/wilabt_node.html#WilabtSfaNode.valid_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.omf.wilabt_node.WilabtSfaNode.valid_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.omf">
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-nepi.resources.omf" title="Permalink to this headline">¶</a></h2>
+</div>
+</div>
+
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_layout/nepi.resources.planetlab.html b/doc/sphinx/_build/html/_layout/nepi.resources.planetlab.html
new file mode 100644 (file)
index 0000000..8477bca
--- /dev/null
@@ -0,0 +1,629 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.planetlab package &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../_static/jquery.js"></script>
+    <script type="text/javascript" src="../_static/underscore.js"></script>
+    <script type="text/javascript" src="../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+  <h3><a href="../index.html">Table Of Contents</a></h3>
+  <ul>
+<li><a class="reference internal" href="#">nepi.resources.planetlab package</a><ul>
+<li><a class="reference internal" href="#subpackages">Subpackages</a></li>
+<li><a class="reference internal" href="#submodules">Submodules</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.planetlab.node">nepi.resources.planetlab.node module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.planetlab.plcapi">nepi.resources.planetlab.plcapi module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.planetlab.sfa_node">nepi.resources.planetlab.sfa_node module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.planetlab.tap">nepi.resources.planetlab.tap module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.planetlab.tun">nepi.resources.planetlab.tun module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.planetlab.vroute">nepi.resources.planetlab.vroute module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.planetlab">Module contents</a></li>
+</ul>
+</li>
+</ul>
+
+  <h3>This Page</h3>
+  <ul class="this-page-menu">
+    <li><a href="../_sources/_layout/nepi.resources.planetlab.txt"
+           rel="nofollow">Show Source</a></li>
+  </ul>
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <div class="section" id="nepi-resources-planetlab-package">
+<h1>nepi.resources.planetlab package<a class="headerlink" href="#nepi-resources-planetlab-package" title="Permalink to this headline">¶</a></h1>
+<div class="section" id="subpackages">
+<h2>Subpackages<a class="headerlink" href="#subpackages" title="Permalink to this headline">¶</a></h2>
+<div class="toctree-wrapper compound">
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="nepi.resources.planetlab.ns3.html">nepi.resources.planetlab.ns3 package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.planetlab.ns3.html#submodules">Submodules</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.planetlab.ns3.html#module-nepi.resources.planetlab.ns3.fdudptunnel">nepi.resources.planetlab.ns3.fdudptunnel module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.planetlab.ns3.html#module-nepi.resources.planetlab.ns3.tuntapfdlink">nepi.resources.planetlab.ns3.tuntapfdlink module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.planetlab.ns3.html#module-nepi.resources.planetlab.ns3">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="nepi.resources.planetlab.openvswitch.html">nepi.resources.planetlab.openvswitch package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.planetlab.openvswitch.html#submodules">Submodules</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.planetlab.openvswitch.html#module-nepi.resources.planetlab.openvswitch.ovs">nepi.resources.planetlab.openvswitch.ovs module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.planetlab.openvswitch.html#module-nepi.resources.planetlab.openvswitch.ovsport">nepi.resources.planetlab.openvswitch.ovsport module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.resources.planetlab.openvswitch.html#module-nepi.resources.planetlab.openvswitch">Module contents</a></li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<div class="section" id="submodules">
+<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline">¶</a></h2>
+</div>
+<div class="section" id="module-nepi.resources.planetlab.node">
+<span id="nepi-resources-planetlab-node-module"></span><h2>nepi.resources.planetlab.node module<a class="headerlink" href="#module-nepi.resources.planetlab.node" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.planetlab.node.PlanetlabNode">
+<em class="property">class </em><tt class="descclassname">nepi.resources.planetlab.node.</tt><tt class="descname">PlanetlabNode</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/node.html#PlanetlabNode"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.node.PlanetlabNode" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode" title="nepi.resources.linux.node.LinuxNode"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.node.LinuxNode</span></tt></a></p>
+<dl class="method">
+<dt id="nepi.resources.planetlab.node.PlanetlabNode.do_discover">
+<tt class="descname">do_discover</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/node.html#PlanetlabNode.do_discover"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.node.PlanetlabNode.do_discover" title="Permalink to this definition">¶</a></dt>
+<dd><p>Based on the attributes defined by the user, discover the suitable 
+nodes for provision.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.node.PlanetlabNode.do_provision">
+<tt class="descname">do_provision</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/node.html#PlanetlabNode.do_provision"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.node.PlanetlabNode.do_provision" title="Permalink to this definition">¶</a></dt>
+<dd><p>Add node to user&#8217;s slice after verifing that the node is functioning
+correctly</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.node.PlanetlabNode.do_release">
+<tt class="descname">do_release</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/node.html#PlanetlabNode.do_release"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.node.PlanetlabNode.do_release" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.node.PlanetlabNode.fail_discovery">
+<tt class="descname">fail_discovery</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/node.html#PlanetlabNode.fail_discovery"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.node.PlanetlabNode.fail_discovery" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.node.PlanetlabNode.fail_node_not_alive">
+<tt class="descname">fail_node_not_alive</tt><big>(</big><em>hostname=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/node.html#PlanetlabNode.fail_node_not_alive"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.node.PlanetlabNode.fail_node_not_alive" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.node.PlanetlabNode.fail_node_not_available">
+<tt class="descname">fail_node_not_available</tt><big>(</big><em>hostname</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/node.html#PlanetlabNode.fail_node_not_available"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.node.PlanetlabNode.fail_node_not_available" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.node.PlanetlabNode.fail_not_enough_nodes">
+<tt class="descname">fail_not_enough_nodes</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/node.html#PlanetlabNode.fail_not_enough_nodes"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.node.PlanetlabNode.fail_not_enough_nodes" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.node.PlanetlabNode.fail_plapi">
+<tt class="descname">fail_plapi</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/node.html#PlanetlabNode.fail_plapi"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.node.PlanetlabNode.fail_plapi" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.planetlab.node.PlanetlabNode.lock">
+<tt class="descname">lock</tt><em class="property"> = &lt;thread.lock object at 0x7f028fc19a70&gt;</em><a class="headerlink" href="#nepi.resources.planetlab.node.PlanetlabNode.lock" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.planetlab.node.PlanetlabNode.plapi">
+<tt class="descname">plapi</tt><a class="reference internal" href="../_modules/nepi/resources/planetlab/node.html#PlanetlabNode.plapi"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.node.PlanetlabNode.plapi" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.node.PlanetlabNode.valid_connection">
+<tt class="descname">valid_connection</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/node.html#PlanetlabNode.valid_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.node.PlanetlabNode.valid_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.planetlab.plcapi">
+<span id="nepi-resources-planetlab-plcapi-module"></span><h2>nepi.resources.planetlab.plcapi module<a class="headerlink" href="#module-nepi.resources.planetlab.plcapi" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.planetlab.plcapi.PLCAPI">
+<em class="property">class </em><tt class="descclassname">nepi.resources.planetlab.plcapi.</tt><tt class="descname">PLCAPI</tt><big>(</big><em>username</em>, <em>password</em>, <em>hostname</em>, <em>urlpattern</em>, <em>ec</em>, <em>proxy</em>, <em>session_key=None</em>, <em>local_peer='PLE'</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/plcapi.html#PLCAPI"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.plcapi.PLCAPI" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference external" href="http://docs.python.org/library/functions.html#object" title="(in Python v2.7)"><tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></a></p>
+<dl class="method">
+<dt id="nepi.resources.planetlab.plcapi.PLCAPI.add_slice_nodes">
+<tt class="descname">add_slice_nodes</tt><big>(</big><em>slicename</em>, <em>nodes</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/plcapi.html#PLCAPI.add_slice_nodes"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.plcapi.PLCAPI.add_slice_nodes" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.planetlab.plcapi.PLCAPI.api">
+<tt class="descname">api</tt><a class="reference internal" href="../_modules/nepi/resources/planetlab/plcapi.html#PLCAPI.api"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.plcapi.PLCAPI.api" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.plcapi.PLCAPI.blacklist_host">
+<tt class="descname">blacklist_host</tt><big>(</big><em>node_id</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/plcapi.html#PLCAPI.blacklist_host"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.plcapi.PLCAPI.blacklist_host" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.plcapi.PLCAPI.blacklisted">
+<tt class="descname">blacklisted</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/plcapi.html#PLCAPI.blacklisted"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.plcapi.PLCAPI.blacklisted" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.plcapi.PLCAPI.delete_slice_node">
+<tt class="descname">delete_slice_node</tt><big>(</big><em>slice_id_or_name</em>, <em>node_id_or_hostname</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/plcapi.html#PLCAPI.delete_slice_node"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.plcapi.PLCAPI.delete_slice_node" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.plcapi.PLCAPI.finish_multicall">
+<tt class="descname">finish_multicall</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/plcapi.html#PLCAPI.finish_multicall"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.plcapi.PLCAPI.finish_multicall" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.plcapi.PLCAPI.get_interfaces">
+<tt class="descname">get_interfaces</tt><big>(</big><em>interface_id_or_ip=None</em>, <em>fields=None</em>, <em>**kw</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/plcapi.html#PLCAPI.get_interfaces"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.plcapi.PLCAPI.get_interfaces" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.plcapi.PLCAPI.get_node_flavour">
+<tt class="descname">get_node_flavour</tt><big>(</big><em>node</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/plcapi.html#PLCAPI.get_node_flavour"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.plcapi.PLCAPI.get_node_flavour" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns detailed information on a given node&#8217;s flavour,
+i.e. its base installation.</p>
+<p>This depends on the global PLC settings in the PLC_FLAVOUR area,
+optionnally overridden by any of the following tags if set on that node:
+&#8216;arch&#8217;, &#8216;pldistro&#8217;, &#8216;fcdistro&#8217;, &#8216;deployment&#8217;, &#8216;extensions&#8217;</p>
+<p>Params:</p>
+<blockquote>
+<div><ul>
+<li><dl class="first docutils">
+<dt>node <span class="classifier-delimiter">:</span> <span class="classifier">int or string</span></dt>
+<dd><ul class="first last simple">
+<li>int, Node identifier</li>
+<li>string, Fully qualified hostname</li>
+</ul>
+</dd>
+</dl>
+</li>
+</ul>
+</div></blockquote>
+<p>Returns:</p>
+<blockquote>
+<div><dl class="docutils">
+<dt>struct</dt>
+<dd><ul class="first last simple">
+<li>extensions : array of string, extensions to add to the base install</li>
+<li>fcdistro : string, the fcdistro this node should be based upon</li>
+<li>nodefamily : string, the nodefamily this node should be based upon</li>
+<li>plain : boolean, use plain bootstrapfs image if set (for tests)</li>
+</ul>
+</dd>
+</dl>
+</div></blockquote>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.plcapi.PLCAPI.get_node_info">
+<tt class="descname">get_node_info</tt><big>(</big><em>node_id</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/plcapi.html#PLCAPI.get_node_info"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.plcapi.PLCAPI.get_node_info" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.plcapi.PLCAPI.get_node_tags">
+<tt class="descname">get_node_tags</tt><big>(</big><em>node_tag_id=None</em>, <em>fields=None</em>, <em>**kw</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/plcapi.html#PLCAPI.get_node_tags"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.plcapi.PLCAPI.get_node_tags" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.plcapi.PLCAPI.get_nodes">
+<tt class="descname">get_nodes</tt><big>(</big><em>node_id_or_name=None</em>, <em>fields=None</em>, <em>**kw</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/plcapi.html#PLCAPI.get_nodes"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.plcapi.PLCAPI.get_nodes" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns an array of structs containing details about nodes. 
+If node_id_or_name is specified and is an array of node identifiers
+or hostnames,  or the filters keyword argument with struct of node
+attributes, or node attributes by keyword argument,
+only nodes matching the filter will be returned.</p>
+<p>If fields is specified, only the specified details will be returned. 
+NOTE that if fields is unspecified, the complete set of native fields are
+returned, which DOES NOT include tags at this time.</p>
+<p>Some fields may only be viewed by admins.</p>
+<p>Special params:</p>
+<blockquote>
+<div><p>fields: an optional list of fields to retrieve. The default is all.</p>
+<dl class="docutils">
+<dt>filters: an optional mapping with custom filters, which is the only</dt>
+<dd>way to support complex filters like negation and numeric comparisons.</dd>
+<dt>peer: a string (or sequence of strings) with the name(s) of peers</dt>
+<dd>to filter - or None for local nodes.</dd>
+</dl>
+</div></blockquote>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.plcapi.PLCAPI.get_slice_id">
+<tt class="descname">get_slice_id</tt><big>(</big><em>slicename</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/plcapi.html#PLCAPI.get_slice_id"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.plcapi.PLCAPI.get_slice_id" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.plcapi.PLCAPI.get_slice_nodes">
+<tt class="descname">get_slice_nodes</tt><big>(</big><em>slicename</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/plcapi.html#PLCAPI.get_slice_nodes"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.plcapi.PLCAPI.get_slice_nodes" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.plcapi.PLCAPI.get_slice_tags">
+<tt class="descname">get_slice_tags</tt><big>(</big><em>slice_tag_id=None</em>, <em>fields=None</em>, <em>**kw</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/plcapi.html#PLCAPI.get_slice_tags"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.plcapi.PLCAPI.get_slice_tags" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.plcapi.PLCAPI.get_slice_vnet_sys_tag">
+<tt class="descname">get_slice_vnet_sys_tag</tt><big>(</big><em>slicename</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/plcapi.html#PLCAPI.get_slice_vnet_sys_tag"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.plcapi.PLCAPI.get_slice_vnet_sys_tag" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.plcapi.PLCAPI.get_slices">
+<tt class="descname">get_slices</tt><big>(</big><em>slice_id_or_name=None</em>, <em>fields=None</em>, <em>**kw</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/plcapi.html#PLCAPI.get_slices"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.plcapi.PLCAPI.get_slices" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.planetlab.plcapi.PLCAPI.mcapi">
+<tt class="descname">mcapi</tt><a class="reference internal" href="../_modules/nepi/resources/planetlab/plcapi.html#PLCAPI.mcapi"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.plcapi.PLCAPI.mcapi" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.planetlab.plcapi.PLCAPI.network_types">
+<tt class="descname">network_types</tt><a class="reference internal" href="../_modules/nepi/resources/planetlab/plcapi.html#PLCAPI.network_types"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.plcapi.PLCAPI.network_types" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.planetlab.plcapi.PLCAPI.peer_map">
+<tt class="descname">peer_map</tt><a class="reference internal" href="../_modules/nepi/resources/planetlab/plcapi.html#PLCAPI.peer_map"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.plcapi.PLCAPI.peer_map" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.plcapi.PLCAPI.release">
+<tt class="descname">release</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/plcapi.html#PLCAPI.release"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.plcapi.PLCAPI.release" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.plcapi.PLCAPI.reserve_host">
+<tt class="descname">reserve_host</tt><big>(</big><em>node_id</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/plcapi.html#PLCAPI.reserve_host"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.plcapi.PLCAPI.reserve_host" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.plcapi.PLCAPI.reserved">
+<tt class="descname">reserved</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/plcapi.html#PLCAPI.reserved"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.plcapi.PLCAPI.reserved" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.plcapi.PLCAPI.start_multicall">
+<tt class="descname">start_multicall</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/plcapi.html#PLCAPI.start_multicall"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.plcapi.PLCAPI.start_multicall" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.plcapi.PLCAPI.test">
+<tt class="descname">test</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/plcapi.html#PLCAPI.test"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.plcapi.PLCAPI.test" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.plcapi.PLCAPI.unblacklist_host">
+<tt class="descname">unblacklist_host</tt><big>(</big><em>node_id</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/plcapi.html#PLCAPI.unblacklist_host"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.plcapi.PLCAPI.unblacklist_host" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.plcapi.PLCAPI.unreserve_host">
+<tt class="descname">unreserve_host</tt><big>(</big><em>node_id</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/plcapi.html#PLCAPI.unreserve_host"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.plcapi.PLCAPI.unreserve_host" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.plcapi.PLCAPI.update_slice">
+<tt class="descname">update_slice</tt><big>(</big><em>slice_id_or_name</em>, <em>**kw</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/plcapi.html#PLCAPI.update_slice"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.plcapi.PLCAPI.update_slice" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+<dl class="class">
+<dt id="nepi.resources.planetlab.plcapi.PLCAPIFactory">
+<em class="property">class </em><tt class="descclassname">nepi.resources.planetlab.plcapi.</tt><tt class="descname">PLCAPIFactory</tt><a class="reference internal" href="../_modules/nepi/resources/planetlab/plcapi.html#PLCAPIFactory"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.plcapi.PLCAPIFactory" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference external" href="http://docs.python.org/library/functions.html#object" title="(in Python v2.7)"><tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></a></p>
+<div class="admonition note">
+<p class="first admonition-title">Note</p>
+<p class="last">It allows PlanetLab RMs sharing a same slice, to use a same plcapi instance,
+and to sincronize blacklisted and reserved hosts.</p>
+</div>
+<dl class="classmethod">
+<dt id="nepi.resources.planetlab.plcapi.PLCAPIFactory.create_api">
+<em class="property">classmethod </em><tt class="descname">create_api</tt><big>(</big><em>pl_user</em>, <em>pl_pass</em>, <em>pl_host</em>, <em>pl_ptn</em>, <em>ec</em>, <em>proxy=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/plcapi.html#PLCAPIFactory.create_api"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.plcapi.PLCAPIFactory.create_api" title="Permalink to this definition">¶</a></dt>
+<dd><p>Create an PLCAPI instance</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>pl_user</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Planelab user name (used for web login)</li>
+<li><strong>pl_pass</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Planetlab password (used for web login)</li>
+<li><strong>pl_host</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Planetlab registry host (e.g. &#8220;www.planet-lab.eu&#8221;)</li>
+<li><strong>pl_ptn</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; XMLRPC service pattern (e.g. <a class="reference external" href="https://%(hostname)s:443/PLCAPI/">https://%(hostname)s:443/PLCAPI/</a>)</li>
+<li><strong>proxy</strong> &#8211; Proxy service url</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="classmethod">
+<dt id="nepi.resources.planetlab.plcapi.PLCAPIFactory.get_api">
+<em class="property">classmethod </em><tt class="descname">get_api</tt><big>(</big><em>pl_user</em>, <em>pl_pass</em>, <em>pl_host</em>, <em>pl_ptn</em>, <em>ec</em>, <em>proxy=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/plcapi.html#PLCAPIFactory.get_api"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.plcapi.PLCAPIFactory.get_api" title="Permalink to this definition">¶</a></dt>
+<dd><p>Get existing PLCAPI instance</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>pl_user</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Planelab user name (used for web login)</li>
+<li><strong>pl_pass</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Planetlab password (used for web login)</li>
+<li><strong>pl_host</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Planetlab registry host (e.g. &#8220;www.planet-lab.eu&#8221;)</li>
+<li><strong>pl_ptn</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; XMLRPC service pattern (e.g. <a class="reference external" href="https://%(hostname)s:443/PLCAPI/">https://%(hostname)s:443/PLCAPI/</a>)</li>
+<li><strong>proxy</strong> &#8211; Proxy service url</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.planetlab.sfa_node">
+<span id="nepi-resources-planetlab-sfa-node-module"></span><h2>nepi.resources.planetlab.sfa_node module<a class="headerlink" href="#module-nepi.resources.planetlab.sfa_node" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.planetlab.sfa_node.PlanetlabSfaNode">
+<em class="property">class </em><tt class="descclassname">nepi.resources.planetlab.sfa_node.</tt><tt class="descname">PlanetlabSfaNode</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/sfa_node.html#PlanetlabSfaNode"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.sfa_node.PlanetlabSfaNode" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode" title="nepi.resources.linux.node.LinuxNode"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.node.LinuxNode</span></tt></a></p>
+<dl class="method">
+<dt id="nepi.resources.planetlab.sfa_node.PlanetlabSfaNode.do_discover">
+<tt class="descname">do_discover</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/sfa_node.html#PlanetlabSfaNode.do_discover"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.sfa_node.PlanetlabSfaNode.do_discover" title="Permalink to this definition">¶</a></dt>
+<dd><p>Based on the attributes defined by the user, discover the suitable 
+nodes for provision.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.sfa_node.PlanetlabSfaNode.do_provision">
+<tt class="descname">do_provision</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/sfa_node.html#PlanetlabSfaNode.do_provision"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.sfa_node.PlanetlabSfaNode.do_provision" title="Permalink to this definition">¶</a></dt>
+<dd><p>Add node to user&#8217;s slice and verifing that the node is functioning
+correctly. Check ssh, file system.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.sfa_node.PlanetlabSfaNode.do_release">
+<tt class="descname">do_release</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/sfa_node.html#PlanetlabSfaNode.do_release"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.sfa_node.PlanetlabSfaNode.do_release" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.sfa_node.PlanetlabSfaNode.fail_discovery">
+<tt class="descname">fail_discovery</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/sfa_node.html#PlanetlabSfaNode.fail_discovery"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.sfa_node.PlanetlabSfaNode.fail_discovery" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.sfa_node.PlanetlabSfaNode.fail_node_not_alive">
+<tt class="descname">fail_node_not_alive</tt><big>(</big><em>hostname=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/sfa_node.html#PlanetlabSfaNode.fail_node_not_alive"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.sfa_node.PlanetlabSfaNode.fail_node_not_alive" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.sfa_node.PlanetlabSfaNode.fail_node_not_available">
+<tt class="descname">fail_node_not_available</tt><big>(</big><em>hostname</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/sfa_node.html#PlanetlabSfaNode.fail_node_not_available"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.sfa_node.PlanetlabSfaNode.fail_node_not_available" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.sfa_node.PlanetlabSfaNode.fail_not_enough_nodes">
+<tt class="descname">fail_not_enough_nodes</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/sfa_node.html#PlanetlabSfaNode.fail_not_enough_nodes"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.sfa_node.PlanetlabSfaNode.fail_not_enough_nodes" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.sfa_node.PlanetlabSfaNode.fail_sfaapi">
+<tt class="descname">fail_sfaapi</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/sfa_node.html#PlanetlabSfaNode.fail_sfaapi"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.sfa_node.PlanetlabSfaNode.fail_sfaapi" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.planetlab.sfa_node.PlanetlabSfaNode.sfaapi">
+<tt class="descname">sfaapi</tt><a class="reference internal" href="../_modules/nepi/resources/planetlab/sfa_node.html#PlanetlabSfaNode.sfaapi"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.sfa_node.PlanetlabSfaNode.sfaapi" title="Permalink to this definition">¶</a></dt>
+<dd><p>Property to instanciate the SFA API based in sfi client.
+For each SFA method called this instance is used.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.sfa_node.PlanetlabSfaNode.valid_connection">
+<tt class="descname">valid_connection</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/sfa_node.html#PlanetlabSfaNode.valid_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.sfa_node.PlanetlabSfaNode.valid_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.planetlab.tap">
+<span id="nepi-resources-planetlab-tap-module"></span><h2>nepi.resources.planetlab.tap module<a class="headerlink" href="#module-nepi.resources.planetlab.tap" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.planetlab.tap.PlanetlabTap">
+<em class="property">class </em><tt class="descclassname">nepi.resources.planetlab.tap.</tt><tt class="descname">PlanetlabTap</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/tap.html#PlanetlabTap"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.tap.PlanetlabTap" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap" title="nepi.resources.linux.tap.LinuxTap"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.tap.LinuxTap</span></tt></a></p>
+<dl class="method">
+<dt id="nepi.resources.planetlab.tap.PlanetlabTap.gre_connect">
+<tt class="descname">gre_connect</tt><big>(</big><em>remote_endpoint</em>, <em>connection_app_home</em>, <em>connection_run_home</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/tap.html#PlanetlabTap.gre_connect"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.tap.PlanetlabTap.gre_connect" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.planetlab.tap.PlanetlabTap.node">
+<tt class="descname">node</tt><a class="reference internal" href="../_modules/nepi/resources/planetlab/tap.html#PlanetlabTap.node"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.tap.PlanetlabTap.node" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.tap.PlanetlabTap.upload_sources">
+<tt class="descname">upload_sources</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/tap.html#PlanetlabTap.upload_sources"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.tap.PlanetlabTap.upload_sources" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.tap.PlanetlabTap.upload_start_command">
+<tt class="descname">upload_start_command</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/tap.html#PlanetlabTap.upload_start_command"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.tap.PlanetlabTap.upload_start_command" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.tap.PlanetlabTap.valid_connection">
+<tt class="descname">valid_connection</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/tap.html#PlanetlabTap.valid_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.tap.PlanetlabTap.valid_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.planetlab.tap.PlanetlabTap.vif_name_file">
+<tt class="descname">vif_name_file</tt><a class="reference internal" href="../_modules/nepi/resources/planetlab/tap.html#PlanetlabTap.vif_name_file"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.tap.PlanetlabTap.vif_name_file" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.tap.PlanetlabTap.wait_vif_name">
+<tt class="descname">wait_vif_name</tt><big>(</big><em>exec_run_home=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/tap.html#PlanetlabTap.wait_vif_name"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.tap.PlanetlabTap.wait_vif_name" title="Permalink to this definition">¶</a></dt>
+<dd><p>Waits until the vif_name file for the command is generated, 
+and returns the vif_name for the device</p>
+</dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.planetlab.tun">
+<span id="nepi-resources-planetlab-tun-module"></span><h2>nepi.resources.planetlab.tun module<a class="headerlink" href="#module-nepi.resources.planetlab.tun" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.planetlab.tun.PlanetlabTun">
+<em class="property">class </em><tt class="descclassname">nepi.resources.planetlab.tun.</tt><tt class="descname">PlanetlabTun</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/tun.html#PlanetlabTun"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.tun.PlanetlabTun" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nepi.resources.planetlab.tap.PlanetlabTap" title="nepi.resources.planetlab.tap.PlanetlabTap"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.planetlab.tap.PlanetlabTap</span></tt></a></p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.planetlab.vroute">
+<span id="nepi-resources-planetlab-vroute-module"></span><h2>nepi.resources.planetlab.vroute module<a class="headerlink" href="#module-nepi.resources.planetlab.vroute" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.planetlab.vroute.PlanetlabVroute">
+<em class="property">class </em><tt class="descclassname">nepi.resources.planetlab.vroute.</tt><tt class="descname">PlanetlabVroute</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/vroute.html#PlanetlabVroute"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.vroute.PlanetlabVroute" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication" title="nepi.resources.linux.application.LinuxApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.application.LinuxApplication</span></tt></a></p>
+<dl class="method">
+<dt id="nepi.resources.planetlab.vroute.PlanetlabVroute.do_deploy">
+<tt class="descname">do_deploy</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/vroute.html#PlanetlabVroute.do_deploy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.vroute.PlanetlabVroute.do_deploy" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.vroute.PlanetlabVroute.do_release">
+<tt class="descname">do_release</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/vroute.html#PlanetlabVroute.do_release"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.vroute.PlanetlabVroute.do_release" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.vroute.PlanetlabVroute.do_start">
+<tt class="descname">do_start</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/vroute.html#PlanetlabVroute.do_start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.vroute.PlanetlabVroute.do_start" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.vroute.PlanetlabVroute.do_stop">
+<tt class="descname">do_stop</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/vroute.html#PlanetlabVroute.do_stop"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.vroute.PlanetlabVroute.do_stop" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.planetlab.vroute.PlanetlabVroute.node">
+<tt class="descname">node</tt><a class="reference internal" href="../_modules/nepi/resources/planetlab/vroute.html#PlanetlabVroute.node"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.vroute.PlanetlabVroute.node" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.planetlab.vroute.PlanetlabVroute.tap">
+<tt class="descname">tap</tt><a class="reference internal" href="../_modules/nepi/resources/planetlab/vroute.html#PlanetlabVroute.tap"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.vroute.PlanetlabVroute.tap" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.vroute.PlanetlabVroute.upload_sources">
+<tt class="descname">upload_sources</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/vroute.html#PlanetlabVroute.upload_sources"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.vroute.PlanetlabVroute.upload_sources" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.vroute.PlanetlabVroute.upload_start_command">
+<tt class="descname">upload_start_command</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/vroute.html#PlanetlabVroute.upload_start_command"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.vroute.PlanetlabVroute.upload_start_command" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.vroute.PlanetlabVroute.valid_connection">
+<tt class="descname">valid_connection</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/vroute.html#PlanetlabVroute.valid_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.vroute.PlanetlabVroute.valid_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.planetlab">
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-nepi.resources.planetlab" title="Permalink to this headline">¶</a></h2>
+</div>
+</div>
+
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_layout/nepi.resources.planetlab.ns3.html b/doc/sphinx/_build/html/_layout/nepi.resources.planetlab.ns3.html
new file mode 100644 (file)
index 0000000..9f3b72f
--- /dev/null
@@ -0,0 +1,153 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.planetlab.ns3 package &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../_static/jquery.js"></script>
+    <script type="text/javascript" src="../_static/underscore.js"></script>
+    <script type="text/javascript" src="../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+  <h3><a href="../index.html">Table Of Contents</a></h3>
+  <ul>
+<li><a class="reference internal" href="#">nepi.resources.planetlab.ns3 package</a><ul>
+<li><a class="reference internal" href="#submodules">Submodules</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.planetlab.ns3.fdudptunnel">nepi.resources.planetlab.ns3.fdudptunnel module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.planetlab.ns3.tuntapfdlink">nepi.resources.planetlab.ns3.tuntapfdlink module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.planetlab.ns3">Module contents</a></li>
+</ul>
+</li>
+</ul>
+
+  <h3>This Page</h3>
+  <ul class="this-page-menu">
+    <li><a href="../_sources/_layout/nepi.resources.planetlab.ns3.txt"
+           rel="nofollow">Show Source</a></li>
+  </ul>
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <div class="section" id="nepi-resources-planetlab-ns3-package">
+<h1>nepi.resources.planetlab.ns3 package<a class="headerlink" href="#nepi-resources-planetlab-ns3-package" title="Permalink to this headline">¶</a></h1>
+<div class="section" id="submodules">
+<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline">¶</a></h2>
+</div>
+<div class="section" id="module-nepi.resources.planetlab.ns3.fdudptunnel">
+<span id="nepi-resources-planetlab-ns3-fdudptunnel-module"></span><h2>nepi.resources.planetlab.ns3.fdudptunnel module<a class="headerlink" href="#module-nepi.resources.planetlab.ns3.fdudptunnel" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.planetlab.ns3.fdudptunnel.PlanetlabNs3FdUdpTunnel">
+<em class="property">class </em><tt class="descclassname">nepi.resources.planetlab.ns3.fdudptunnel.</tt><tt class="descname">PlanetlabNs3FdUdpTunnel</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/ns3/fdudptunnel.html#PlanetlabNs3FdUdpTunnel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.ns3.fdudptunnel.PlanetlabNs3FdUdpTunnel" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel" title="nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel</span></tt></a></p>
+<dl class="method">
+<dt id="nepi.resources.planetlab.ns3.fdudptunnel.PlanetlabNs3FdUdpTunnel.get_endpoints">
+<tt class="descname">get_endpoints</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/ns3/fdudptunnel.html#PlanetlabNs3FdUdpTunnel.get_endpoints"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.ns3.fdudptunnel.PlanetlabNs3FdUdpTunnel.get_endpoints" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the list of RM that are endpoints to the tunnel</p>
+</dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.planetlab.ns3.tuntapfdlink">
+<span id="nepi-resources-planetlab-ns3-tuntapfdlink-module"></span><h2>nepi.resources.planetlab.ns3.tuntapfdlink module<a class="headerlink" href="#module-nepi.resources.planetlab.ns3.tuntapfdlink" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.planetlab.ns3.tuntapfdlink.PlanetlabTunTapFdLink">
+<em class="property">class </em><tt class="descclassname">nepi.resources.planetlab.ns3.tuntapfdlink.</tt><tt class="descname">PlanetlabTunTapFdLink</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/ns3/tuntapfdlink.html#PlanetlabTunTapFdLink"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.ns3.tuntapfdlink.PlanetlabTunTapFdLink" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink" title="nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink</span></tt></a></p>
+<p>Interconnects a TAP or TUN PlanetLab device to a FdNetDevice</p>
+<dl class="attribute">
+<dt id="nepi.resources.planetlab.ns3.tuntapfdlink.PlanetlabTunTapFdLink.fdnetdevice">
+<tt class="descname">fdnetdevice</tt><a class="reference internal" href="../_modules/nepi/resources/planetlab/ns3/tuntapfdlink.html#PlanetlabTunTapFdLink.fdnetdevice"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.ns3.tuntapfdlink.PlanetlabTunTapFdLink.fdnetdevice" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.planetlab.ns3.tuntapfdlink.PlanetlabTunTapFdLink.tap">
+<tt class="descname">tap</tt><a class="reference internal" href="../_modules/nepi/resources/planetlab/ns3/tuntapfdlink.html#PlanetlabTunTapFdLink.tap"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.ns3.tuntapfdlink.PlanetlabTunTapFdLink.tap" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.ns3.tuntapfdlink.PlanetlabTunTapFdLink.upload_sources">
+<tt class="descname">upload_sources</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/ns3/tuntapfdlink.html#PlanetlabTunTapFdLink.upload_sources"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.ns3.tuntapfdlink.PlanetlabTunTapFdLink.upload_sources" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.planetlab.ns3">
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-nepi.resources.planetlab.ns3" title="Permalink to this headline">¶</a></h2>
+</div>
+</div>
+
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_layout/nepi.resources.planetlab.openvswitch.html b/doc/sphinx/_build/html/_layout/nepi.resources.planetlab.openvswitch.html
new file mode 100644 (file)
index 0000000..714703b
--- /dev/null
@@ -0,0 +1,321 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.planetlab.openvswitch package &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../_static/jquery.js"></script>
+    <script type="text/javascript" src="../_static/underscore.js"></script>
+    <script type="text/javascript" src="../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+  <h3><a href="../index.html">Table Of Contents</a></h3>
+  <ul>
+<li><a class="reference internal" href="#">nepi.resources.planetlab.openvswitch package</a><ul>
+<li><a class="reference internal" href="#submodules">Submodules</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.planetlab.openvswitch.ovs">nepi.resources.planetlab.openvswitch.ovs module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.planetlab.openvswitch.ovsport">nepi.resources.planetlab.openvswitch.ovsport module</a></li>
+<li><a class="reference internal" href="#module-nepi.resources.planetlab.openvswitch">Module contents</a></li>
+</ul>
+</li>
+</ul>
+
+  <h3>This Page</h3>
+  <ul class="this-page-menu">
+    <li><a href="../_sources/_layout/nepi.resources.planetlab.openvswitch.txt"
+           rel="nofollow">Show Source</a></li>
+  </ul>
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <div class="section" id="nepi-resources-planetlab-openvswitch-package">
+<h1>nepi.resources.planetlab.openvswitch package<a class="headerlink" href="#nepi-resources-planetlab-openvswitch-package" title="Permalink to this headline">¶</a></h1>
+<div class="section" id="submodules">
+<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline">¶</a></h2>
+</div>
+<div class="section" id="module-nepi.resources.planetlab.openvswitch.ovs">
+<span id="nepi-resources-planetlab-openvswitch-ovs-module"></span><h2>nepi.resources.planetlab.openvswitch.ovs module<a class="headerlink" href="#module-nepi.resources.planetlab.openvswitch.ovs" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch">
+<em class="property">class </em><tt class="descclassname">nepi.resources.planetlab.openvswitch.ovs.</tt><tt class="descname">PlanetlabOVSSwitch</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/openvswitch/ovs.html#PlanetlabOVSSwitch"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication" title="nepi.resources.linux.application.LinuxApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.application.LinuxApplication</span></tt></a></p>
+<dl class="class">
+<dt>
+<tt class="descname">Class Args :</tt></dt>
+<dd><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>ec</strong> (<em>ExperimentController</em>) &#8211; The Experiment controller</li>
+<li><strong>guid</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; guid of the RM</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch.assign_controller">
+<tt class="descname">assign_controller</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/openvswitch/ovs.html#PlanetlabOVSSwitch.assign_controller"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch.assign_controller" title="Permalink to this definition">¶</a></dt>
+<dd><p>Set the controller IP</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch.check_sliver_ovs">
+<tt class="descname">check_sliver_ovs</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/openvswitch/ovs.html#PlanetlabOVSSwitch.check_sliver_ovs"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch.check_sliver_ovs" title="Permalink to this definition">¶</a></dt>
+<dd><p>Check if sliver-ovs exists. If it does not exist, the execution is stopped</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch.create_bridge">
+<tt class="descname">create_bridge</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/openvswitch/ovs.html#PlanetlabOVSSwitch.create_bridge"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch.create_bridge" title="Permalink to this definition">¶</a></dt>
+<dd><p>Create the bridge/switch and check error during SSH connection</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch.do_deploy">
+<tt class="descname">do_deploy</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/openvswitch/ovs.html#PlanetlabOVSSwitch.do_deploy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch.do_deploy" title="Permalink to this definition">¶</a></dt>
+<dd><p>Deploy the OVS Switch : Turn on the server, create the bridges
+and assign the controller</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch.do_provision">
+<tt class="descname">do_provision</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/openvswitch/ovs.html#PlanetlabOVSSwitch.do_provision"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch.do_provision" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch.do_release">
+<tt class="descname">do_release</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/openvswitch/ovs.html#PlanetlabOVSSwitch.do_release"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch.do_release" title="Permalink to this definition">¶</a></dt>
+<dd><p>Delete the bridge and close the server.</p>
+<blockquote>
+<div></div></blockquote>
+<p>to be released before releasing itself</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch.node">
+<tt class="descname">node</tt><a class="reference internal" href="../_modules/nepi/resources/planetlab/openvswitch/ovs.html#PlanetlabOVSSwitch.node"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch.node" title="Permalink to this definition">¶</a></dt>
+<dd><p>Node wthat run the switch</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch.ovs_status">
+<tt class="descname">ovs_status</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/openvswitch/ovs.html#PlanetlabOVSSwitch.ovs_status"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch.ovs_status" title="Permalink to this definition">¶</a></dt>
+<dd><p>Print the status of the bridge</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch.servers_on">
+<tt class="descname">servers_on</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/openvswitch/ovs.html#PlanetlabOVSSwitch.servers_on"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch.servers_on" title="Permalink to this definition">¶</a></dt>
+<dd><p>Start the openvswitch servers and check it</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch.valid_connection">
+<tt class="descname">valid_connection</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/openvswitch/ovs.html#PlanetlabOVSSwitch.valid_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch.valid_connection" title="Permalink to this definition">¶</a></dt>
+<dd><p>Check if the connection with the guid in parameter is possible. Only meaningful connections are allowed.</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>guid</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; Guid of the current RM</td>
+</tr>
+<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body">Boolean</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.planetlab.openvswitch.ovsport">
+<span id="nepi-resources-planetlab-openvswitch-ovsport-module"></span><h2>nepi.resources.planetlab.openvswitch.ovsport module<a class="headerlink" href="#module-nepi.resources.planetlab.openvswitch.ovsport" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort">
+<em class="property">class </em><tt class="descclassname">nepi.resources.planetlab.openvswitch.ovsport.</tt><tt class="descname">PlanetlabOVSPort</tt><big>(</big><em>ec</em>, <em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/openvswitch/ovsport.html#PlanetlabOVSPort"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication" title="nepi.resources.linux.application.LinuxApplication"><tt class="xref py py-class docutils literal"><span class="pre">nepi.resources.linux.application.LinuxApplication</span></tt></a></p>
+<dl class="class">
+<dt>
+<tt class="descname">Class Args :</tt></dt>
+<dd><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>ec</strong> (<em>ExperimentController</em>) &#8211; The Experiment controller</li>
+<li><strong>guid</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; guid of the RM</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.check_status">
+<tt class="descname">check_status</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/openvswitch/ovsport.html#PlanetlabOVSPort.check_status"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.check_status" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.create_port">
+<tt class="descname">create_port</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/openvswitch/ovsport.html#PlanetlabOVSPort.create_port"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.create_port" title="Permalink to this definition">¶</a></dt>
+<dd><p>Create the desired port</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.do_deploy">
+<tt class="descname">do_deploy</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/openvswitch/ovsport.html#PlanetlabOVSPort.do_deploy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.do_deploy" title="Permalink to this definition">¶</a></dt>
+<dd><p>Deploy the OVS port after the OVS Switch</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.do_provision">
+<tt class="descname">do_provision</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/openvswitch/ovsport.html#PlanetlabOVSPort.do_provision"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.do_provision" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.do_release">
+<tt class="descname">do_release</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/openvswitch/ovsport.html#PlanetlabOVSPort.do_release"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.do_release" title="Permalink to this definition">¶</a></dt>
+<dd><p>Delete the port on the OVSwitch. It needs to wait for the tunnel
+to be released.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.establish_udp_connection">
+<tt class="descname">establish_udp_connection</tt><big>(</big><em>remote_endpoint</em>, <em>connection_app_home</em>, <em>connection_run_home</em>, <em>port</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/openvswitch/ovsport.html#PlanetlabOVSPort.establish_udp_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.establish_udp_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.initiate_udp_connection">
+<tt class="descname">initiate_udp_connection</tt><big>(</big><em>remote_endpoint</em>, <em>connection_app_home</em>, <em>connection_run_home</em>, <em>cipher</em>, <em>cipher_key</em>, <em>bwlimit</em>, <em>txqueuelen</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/openvswitch/ovsport.html#PlanetlabOVSPort.initiate_udp_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.initiate_udp_connection" title="Permalink to this definition">¶</a></dt>
+<dd><p>Get the local_endpoint of the port</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.node">
+<tt class="descname">node</tt><a class="reference internal" href="../_modules/nepi/resources/planetlab/openvswitch/ovsport.html#PlanetlabOVSPort.node"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.node" title="Permalink to this definition">¶</a></dt>
+<dd><p>Node that run the switch and the ports</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.ovsswitch">
+<tt class="descname">ovsswitch</tt><a class="reference internal" href="../_modules/nepi/resources/planetlab/openvswitch/ovsport.html#PlanetlabOVSPort.ovsswitch"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.ovsswitch" title="Permalink to this definition">¶</a></dt>
+<dd><p>Switch where the port is created</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.port_number">
+<tt class="descname">port_number</tt><a class="reference internal" href="../_modules/nepi/resources/planetlab/openvswitch/ovsport.html#PlanetlabOVSPort.port_number"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.port_number" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.terminate_connection">
+<tt class="descname">terminate_connection</tt><big>(</big><em>endpoint</em>, <em>connection_app_home</em>, <em>connection_run_home</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/openvswitch/ovsport.html#PlanetlabOVSPort.terminate_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.terminate_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.valid_connection">
+<tt class="descname">valid_connection</tt><big>(</big><em>guid</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/openvswitch/ovsport.html#PlanetlabOVSPort.valid_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.valid_connection" title="Permalink to this definition">¶</a></dt>
+<dd><p>Check if the connection is available.</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>guid</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#int" title="(in Python v2.7)"><em>int</em></a>) &#8211; Guid of the current RM</td>
+</tr>
+<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body">Boolean</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.verify_connection">
+<tt class="descname">verify_connection</tt><big>(</big><em>remote_endpoint</em>, <em>connection_app_home</em>, <em>connection_run_home</em><big>)</big><a class="reference internal" href="../_modules/nepi/resources/planetlab/openvswitch/ovsport.html#PlanetlabOVSPort.verify_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.verify_connection" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.resources.planetlab.openvswitch">
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-nepi.resources.planetlab.openvswitch" title="Permalink to this headline">¶</a></h2>
+</div>
+</div>
+
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_layout/nepi.util.html b/doc/sphinx/_build/html/_layout/nepi.util.html
new file mode 100644 (file)
index 0000000..e888283
--- /dev/null
@@ -0,0 +1,1227 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.util package &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../_static/jquery.js"></script>
+    <script type="text/javascript" src="../_static/underscore.js"></script>
+    <script type="text/javascript" src="../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+  <h3><a href="../index.html">Table Of Contents</a></h3>
+  <ul>
+<li><a class="reference internal" href="#">nepi.util package</a><ul>
+<li><a class="reference internal" href="#subpackages">Subpackages</a></li>
+<li><a class="reference internal" href="#submodules">Submodules</a></li>
+<li><a class="reference internal" href="#nepi-util-environ-module">nepi.util.environ module</a></li>
+<li><a class="reference internal" href="#module-nepi.util.execfuncs">nepi.util.execfuncs module</a></li>
+<li><a class="reference internal" href="#module-nepi.util.guid">nepi.util.guid module</a></li>
+<li><a class="reference internal" href="#module-nepi.util.logger">nepi.util.logger module</a></li>
+<li><a class="reference internal" href="#module-nepi.util.manifoldapi">nepi.util.manifoldapi module</a></li>
+<li><a class="reference internal" href="#module-nepi.util.netgraph">nepi.util.netgraph module</a></li>
+<li><a class="reference internal" href="#module-nepi.util.parallel">nepi.util.parallel module</a></li>
+<li><a class="reference internal" href="#module-nepi.util.plotter">nepi.util.plotter module</a></li>
+<li><a class="reference internal" href="#module-nepi.util.rmatcher">nepi.util.rmatcher module</a></li>
+<li><a class="reference internal" href="#module-nepi.util.serializer">nepi.util.serializer module</a></li>
+<li><a class="reference internal" href="#module-nepi.util.sfaapi">nepi.util.sfaapi module</a></li>
+<li><a class="reference internal" href="#module-nepi.util.sfarspec_proc">nepi.util.sfarspec_proc module</a></li>
+<li><a class="reference internal" href="#module-nepi.util.sshfuncs">nepi.util.sshfuncs module</a></li>
+<li><a class="reference internal" href="#module-nepi.util.statfuncs">nepi.util.statfuncs module</a></li>
+<li><a class="reference internal" href="#module-nepi.util.timefuncs">nepi.util.timefuncs module</a></li>
+<li><a class="reference internal" href="#module-nepi.util">Module contents</a></li>
+</ul>
+</li>
+</ul>
+
+  <h3>This Page</h3>
+  <ul class="this-page-menu">
+    <li><a href="../_sources/_layout/nepi.util.txt"
+           rel="nofollow">Show Source</a></li>
+  </ul>
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <div class="section" id="nepi-util-package">
+<h1>nepi.util package<a class="headerlink" href="#nepi-util-package" title="Permalink to this headline">¶</a></h1>
+<div class="section" id="subpackages">
+<h2>Subpackages<a class="headerlink" href="#subpackages" title="Permalink to this headline">¶</a></h2>
+<div class="toctree-wrapper compound">
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="nepi.util.parsers.html">nepi.util.parsers package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="nepi.util.parsers.html#submodules">Submodules</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.util.parsers.html#module-nepi.util.parsers.xml_parser">nepi.util.parsers.xml_parser module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nepi.util.parsers.html#module-nepi.util.parsers">Module contents</a></li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<div class="section" id="submodules">
+<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline">¶</a></h2>
+</div>
+<div class="section" id="nepi-util-environ-module">
+<h2>nepi.util.environ module<a class="headerlink" href="#nepi-util-environ-module" title="Permalink to this headline">¶</a></h2>
+<span class="target" id="module-nepi.util.environ"></span><dl class="function">
+<dt id="nepi.util.environ.execute">
+<tt class="descclassname">nepi.util.environ.</tt><tt class="descname">execute</tt><big>(</big><em>cmd</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/environ.html#execute"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.environ.execute" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="function">
+<dt id="nepi.util.environ.backticks">
+<tt class="descclassname">nepi.util.environ.</tt><tt class="descname">backticks</tt><big>(</big><em>cmd</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/environ.html#backticks"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.environ.backticks" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</div>
+<div class="section" id="module-nepi.util.execfuncs">
+<span id="nepi-util-execfuncs-module"></span><h2>nepi.util.execfuncs module<a class="headerlink" href="#module-nepi.util.execfuncs" title="Permalink to this headline">¶</a></h2>
+<dl class="function">
+<dt id="nepi.util.execfuncs.lcopy">
+<tt class="descclassname">nepi.util.execfuncs.</tt><tt class="descname">lcopy</tt><big>(</big><em>source</em>, <em>dest</em>, <em>recursive=False</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/execfuncs.html#lcopy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.execfuncs.lcopy" title="Permalink to this definition">¶</a></dt>
+<dd><p>Copies from/to localy.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="nepi.util.execfuncs.lexec">
+<tt class="descclassname">nepi.util.execfuncs.</tt><tt class="descname">lexec</tt><big>(</big><em>command</em>, <em>user=None</em>, <em>sudo=False</em>, <em>env=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/execfuncs.html#lexec"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.execfuncs.lexec" title="Permalink to this definition">¶</a></dt>
+<dd><p>Executes a local command, returns ((stdout,stderr),process)</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="nepi.util.execfuncs.lgetpid">
+<tt class="descclassname">nepi.util.execfuncs.</tt><tt class="descname">lgetpid</tt><big>(</big><em>pidfile</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/execfuncs.html#lgetpid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.execfuncs.lgetpid" title="Permalink to this definition">¶</a></dt>
+<dd><p>Check the pidfile of a process spawned with remote_spawn.</p>
+<dl class="docutils">
+<dt>Parameters:</dt>
+<dd>pidfile: the pidfile passed to remote_span</dd>
+</dl>
+<p>Returns:</p>
+<blockquote>
+<div>A (pid, ppid) tuple useful for calling remote_status and remote_kill,
+or None if the pidfile isn&#8217;t valid yet (maybe the process is still starting).</div></blockquote>
+</dd></dl>
+
+<dl class="function">
+<dt id="nepi.util.execfuncs.lkill">
+<tt class="descclassname">nepi.util.execfuncs.</tt><tt class="descname">lkill</tt><big>(</big><em>pid</em>, <em>ppid</em>, <em>sudo=False</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/execfuncs.html#lkill"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.execfuncs.lkill" title="Permalink to this definition">¶</a></dt>
+<dd><p>Kill a process spawned with lspawn.</p>
+<p>First tries a SIGTERM, and if the process does not end in 10 seconds,
+it sends a SIGKILL.</p>
+<dl class="docutils">
+<dt>Parameters:</dt>
+<dd><p class="first">pid/ppid: pid and parent-pid of the spawned process. See remote_check_pid</p>
+<p class="last">sudo: whether the command was run with sudo - careful killing like this.</p>
+</dd>
+</dl>
+<p>Returns:</p>
+<blockquote>
+<div>Nothing, should have killed the process</div></blockquote>
+</dd></dl>
+
+<dl class="function">
+<dt id="nepi.util.execfuncs.lspawn">
+<tt class="descclassname">nepi.util.execfuncs.</tt><tt class="descname">lspawn</tt><big>(</big><em>command</em>, <em>pidfile</em>, <em>stdout='/dev/null'</em>, <em>stderr=&lt;class nepi.util.sshfuncs.STDOUT at 0x7f028ff15bb0&gt;</em>, <em>stdin='/dev/null'</em>, <em>home=None</em>, <em>create_home=False</em>, <em>sudo=False</em>, <em>user=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/execfuncs.html#lspawn"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.execfuncs.lspawn" title="Permalink to this definition">¶</a></dt>
+<dd><p>Spawn a local command such that it will continue working asynchronously.</p>
+<dl class="docutils">
+<dt>Parameters:</dt>
+<dd><p class="first">command: the command to run - it should be a single line.</p>
+<p>pidfile: path of a (ideally unique to this task) pidfile for tracking the process.</p>
+<dl class="docutils">
+<dt>stdout: path of a file to redirect standard output to - must be a string.</dt>
+<dd>Defaults to /dev/null</dd>
+<dt>stderr: path of a file to redirect standard error to - string or the special STDOUT value</dt>
+<dd>to redirect to the same file stdout was redirected to. Defaults to STDOUT.</dd>
+</dl>
+<p>stdin: path of a file with input to be piped into the command&#8217;s standard input</p>
+<p>home: path of a folder to use as working directory - should exist, unless you specify create_home</p>
+<p>create_home: if True, the home folder will be created first with mkdir -p</p>
+<p class="last">sudo: whether the command needs to be executed as root</p>
+</dd>
+<dt>Returns:</dt>
+<dd><p class="first">(stdout, stderr), process</p>
+<p class="last">Of the spawning process, which only captures errors at spawning time.
+Usually only useful for diagnostics.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="function">
+<dt id="nepi.util.execfuncs.lstatus">
+<tt class="descclassname">nepi.util.execfuncs.</tt><tt class="descname">lstatus</tt><big>(</big><em>pid</em>, <em>ppid</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/execfuncs.html#lstatus"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.execfuncs.lstatus" title="Permalink to this definition">¶</a></dt>
+<dd><p>Check the status of a process spawned with remote_spawn.</p>
+<dl class="docutils">
+<dt>Parameters:</dt>
+<dd>pid/ppid: pid and parent-pid of the spawned process. See remote_check_pid</dd>
+</dl>
+<p>Returns:</p>
+<blockquote>
+<div>One of NOT_STARTED, RUNNING, FINISHED</div></blockquote>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.util.guid">
+<span id="nepi-util-guid-module"></span><h2>nepi.util.guid module<a class="headerlink" href="#module-nepi.util.guid" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.util.guid.GuidGenerator">
+<em class="property">class </em><tt class="descclassname">nepi.util.guid.</tt><tt class="descname">GuidGenerator</tt><a class="reference internal" href="../_modules/nepi/util/guid.html#GuidGenerator"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.guid.GuidGenerator" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference external" href="http://docs.python.org/library/functions.html#object" title="(in Python v2.7)"><tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></a></p>
+<dl class="method">
+<dt id="nepi.util.guid.GuidGenerator.next">
+<tt class="descname">next</tt><big>(</big><em>guid=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/guid.html#GuidGenerator.next"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.guid.GuidGenerator.next" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.util.logger">
+<span id="nepi-util-logger-module"></span><h2>nepi.util.logger module<a class="headerlink" href="#module-nepi.util.logger" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.util.logger.Logger">
+<em class="property">class </em><tt class="descclassname">nepi.util.logger.</tt><tt class="descname">Logger</tt><big>(</big><em>logger_component</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/logger.html#Logger"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.logger.Logger" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference external" href="http://docs.python.org/library/functions.html#object" title="(in Python v2.7)"><tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></a></p>
+<dl class="method">
+<dt id="nepi.util.logger.Logger.debug">
+<tt class="descname">debug</tt><big>(</big><em>msg</em>, <em>out=None</em>, <em>err=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/logger.html#Logger.debug"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.logger.Logger.debug" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.logger.Logger.error">
+<tt class="descname">error</tt><big>(</big><em>msg</em>, <em>out=None</em>, <em>err=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/logger.html#Logger.error"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.logger.Logger.error" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.logger.Logger.info">
+<tt class="descname">info</tt><big>(</big><em>msg</em>, <em>out=None</em>, <em>err=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/logger.html#Logger.info"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.logger.Logger.info" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.logger.Logger.log">
+<tt class="descname">log</tt><big>(</big><em>msg</em>, <em>level</em>, <em>out=None</em>, <em>err=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/logger.html#Logger.log"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.logger.Logger.log" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.logger.Logger.log_message">
+<tt class="descname">log_message</tt><big>(</big><em>msg</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/logger.html#Logger.log_message"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.logger.Logger.log_message" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.util.logger.Logger.logger">
+<tt class="descname">logger</tt><a class="reference internal" href="../_modules/nepi/util/logger.html#Logger.logger"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.logger.Logger.logger" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.logger.Logger.warning">
+<tt class="descname">warning</tt><big>(</big><em>msg</em>, <em>out=None</em>, <em>err=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/logger.html#Logger.warning"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.logger.Logger.warning" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.util.manifoldapi">
+<span id="nepi-util-manifoldapi-module"></span><h2>nepi.util.manifoldapi module<a class="headerlink" href="#module-nepi.util.manifoldapi" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.util.manifoldapi.MANIFOLDAPI">
+<em class="property">class </em><tt class="descclassname">nepi.util.manifoldapi.</tt><tt class="descname">MANIFOLDAPI</tt><big>(</big><em>username</em>, <em>password</em>, <em>hostname</em>, <em>urlpattern</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/manifoldapi.html#MANIFOLDAPI"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.manifoldapi.MANIFOLDAPI" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference external" href="http://docs.python.org/library/functions.html#object" title="(in Python v2.7)"><tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></a></p>
+<p>API to query different data platforms as SFA, TopHat, OML Central Server,
+using Manifold Framework, the backend of MySlice.</p>
+<dl class="method">
+<dt id="nepi.util.manifoldapi.MANIFOLDAPI.add_resource_to_slice">
+<tt class="descname">add_resource_to_slice</tt><big>(</big><em>slicename</em>, <em>resource_urn</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/manifoldapi.html#MANIFOLDAPI.add_resource_to_slice"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.manifoldapi.MANIFOLDAPI.add_resource_to_slice" title="Permalink to this definition">¶</a></dt>
+<dd><p>Add resource to user&#8217;s slice. The query needs to specify the new
+resource plus the previous resources already in the slice.</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.util.manifoldapi.MANIFOLDAPI.api">
+<tt class="descname">api</tt><a class="reference internal" href="../_modules/nepi/util/manifoldapi.html#MANIFOLDAPI.api"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.manifoldapi.MANIFOLDAPI.api" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.manifoldapi.MANIFOLDAPI.get_resource_info">
+<tt class="descname">get_resource_info</tt><big>(</big><em>filters=None</em>, <em>fields=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/manifoldapi.html#MANIFOLDAPI.get_resource_info"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.manifoldapi.MANIFOLDAPI.get_resource_info" title="Permalink to this definition">¶</a></dt>
+<dd><p>Create and execute the Manifold API Query to get the resources 
+according fields and filters.
+:param filters: resource&#8217;s constraints for the experiment
+:type filters: dict
+:param fields: desire fields in the result of the query
+:type fields: list</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.manifoldapi.MANIFOLDAPI.get_resource_urn">
+<tt class="descname">get_resource_urn</tt><big>(</big><em>filters=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/manifoldapi.html#MANIFOLDAPI.get_resource_urn"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.manifoldapi.MANIFOLDAPI.get_resource_urn" title="Permalink to this definition">¶</a></dt>
+<dd><p>Retrieves the resources urn of the resources matching filters.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.manifoldapi.MANIFOLDAPI.get_session_key">
+<tt class="descname">get_session_key</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/util/manifoldapi.html#MANIFOLDAPI.get_session_key"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.manifoldapi.MANIFOLDAPI.get_session_key" title="Permalink to this definition">¶</a></dt>
+<dd><p>Retrieves the session key, in order to use the same session for 
+queries.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.manifoldapi.MANIFOLDAPI.get_slice_resources">
+<tt class="descname">get_slice_resources</tt><big>(</big><em>slicename</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/manifoldapi.html#MANIFOLDAPI.get_slice_resources"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.manifoldapi.MANIFOLDAPI.get_slice_resources" title="Permalink to this definition">¶</a></dt>
+<dd><p>Retrieves resources attached to user&#8217;s slice.
+return value: list of resources&#8217; urn</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.manifoldapi.MANIFOLDAPI.remove_resource_from_slice">
+<tt class="descname">remove_resource_from_slice</tt><big>(</big><em>slicename</em>, <em>resource_urn</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/manifoldapi.html#MANIFOLDAPI.remove_resource_from_slice"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.manifoldapi.MANIFOLDAPI.remove_resource_from_slice" title="Permalink to this definition">¶</a></dt>
+<dd><p>Remove resource from user&#8217;s slice. The query needs to specify the list
+of previous resources in the slice without the one to be remove.</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="class">
+<dt id="nepi.util.manifoldapi.MANIFOLDAPIFactory">
+<em class="property">class </em><tt class="descclassname">nepi.util.manifoldapi.</tt><tt class="descname">MANIFOLDAPIFactory</tt><a class="reference internal" href="../_modules/nepi/util/manifoldapi.html#MANIFOLDAPIFactory"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.manifoldapi.MANIFOLDAPIFactory" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference external" href="http://docs.python.org/library/functions.html#object" title="(in Python v2.7)"><tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></a></p>
+<p>API Factory to manage a map of MANIFOLDAPI instances as key-value pairs, it
+instanciate a single instance per key. The key represents the same SFA, 
+MF (ManiFold) credentials.</p>
+<dl class="classmethod">
+<dt id="nepi.util.manifoldapi.MANIFOLDAPIFactory.get_api">
+<em class="property">classmethod </em><tt class="descname">get_api</tt><big>(</big><em>username</em>, <em>password</em>, <em>hostname='test.myslice.info'</em>, <em>urlpattern='http://%(hostname)s:7080'</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/manifoldapi.html#MANIFOLDAPIFactory.get_api"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.manifoldapi.MANIFOLDAPIFactory.get_api" title="Permalink to this definition">¶</a></dt>
+<dd><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>username</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Manifold user (also used for MySlice web login)</li>
+<li><strong>password</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Manifold password (also used for MySlice web login)</li>
+<li><strong>hostname</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Hostname of the Manifold API to query SFA, TopHat, etc</li>
+<li><strong>urlpattern</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; Url of the Manifold API to query SFA, TopHat, etc</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="classmethod">
+<dt id="nepi.util.manifoldapi.MANIFOLDAPIFactory.make_key">
+<em class="property">classmethod </em><tt class="descname">make_key</tt><big>(</big><em>*args</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/manifoldapi.html#MANIFOLDAPIFactory.make_key"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.manifoldapi.MANIFOLDAPIFactory.make_key" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.util.netgraph">
+<span id="nepi-util-netgraph-module"></span><h2>nepi.util.netgraph module<a class="headerlink" href="#module-nepi.util.netgraph" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.util.netgraph.NetGraph">
+<em class="property">class </em><tt class="descclassname">nepi.util.netgraph.</tt><tt class="descname">NetGraph</tt><big>(</big><em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/netgraph.html#NetGraph"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.netgraph.NetGraph" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference external" href="http://docs.python.org/library/functions.html#object" title="(in Python v2.7)"><tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></a></p>
+<p>NetGraph represents a network topology. 
+Network graphs are internally using the networkx library.</p>
+<dl class="method">
+<dt id="nepi.util.netgraph.NetGraph.add_edge">
+<tt class="descname">add_edge</tt><big>(</big><em>nid1</em>, <em>nid2</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/netgraph.html#NetGraph.add_edge"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.netgraph.NetGraph.add_edge" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.netgraph.NetGraph.add_node">
+<tt class="descname">add_node</tt><big>(</big><em>nid</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/netgraph.html#NetGraph.add_node"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.netgraph.NetGraph.add_node" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.netgraph.NetGraph.annotate_edge">
+<tt class="descname">annotate_edge</tt><big>(</big><em>nid1</em>, <em>nid2</em>, <em>name</em>, <em>value</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/netgraph.html#NetGraph.annotate_edge"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.netgraph.NetGraph.annotate_edge" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.netgraph.NetGraph.annotate_edge_net">
+<tt class="descname">annotate_edge_net</tt><big>(</big><em>nid1</em>, <em>nid2</em>, <em>ip1</em>, <em>ip2</em>, <em>mask</em>, <em>network</em>, <em>prefixlen</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/netgraph.html#NetGraph.annotate_edge_net"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.netgraph.NetGraph.annotate_edge_net" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.netgraph.NetGraph.annotate_node">
+<tt class="descname">annotate_node</tt><big>(</big><em>nid</em>, <em>name</em>, <em>value</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/netgraph.html#NetGraph.annotate_node"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.netgraph.NetGraph.annotate_node" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.netgraph.NetGraph.annotate_node_ip">
+<tt class="descname">annotate_node_ip</tt><big>(</big><em>nid</em>, <em>ip</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/netgraph.html#NetGraph.annotate_node_ip"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.netgraph.NetGraph.annotate_node_ip" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.netgraph.NetGraph.assign_p2p_ips">
+<tt class="descname">assign_p2p_ips</tt><big>(</big><em>network='10.0.0.0'</em>, <em>prefix=8</em>, <em>version=4</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/netgraph.html#NetGraph.assign_p2p_ips"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.netgraph.NetGraph.assign_p2p_ips" title="Permalink to this definition">¶</a></dt>
+<dd><p>Assign IP addresses to each end of each edge of the network graph,
+computing all the point to point subnets and addresses in the network
+representation.</p>
+<blockquote>
+<div><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">param network:</th><td class="field-body">Base network address used for subnetting.</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type network:</th><td class="field-body">str</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">param prefix:</th><td class="field-body">Prefix for the base network address used for subnetting.</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type prefixt:</th><td class="field-body">int</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">param version:</th><td class="field-body">IP version (either 4 or 6).</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type version:</th><td class="field-body">int</td>
+</tr>
+</tbody>
+</table>
+</div></blockquote>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.netgraph.NetGraph.del_edge_annotation">
+<tt class="descname">del_edge_annotation</tt><big>(</big><em>nid1</em>, <em>nid2</em>, <em>name</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/netgraph.html#NetGraph.del_edge_annotation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.netgraph.NetGraph.del_edge_annotation" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.netgraph.NetGraph.del_node_annotation">
+<tt class="descname">del_node_annotation</tt><big>(</big><em>nid</em>, <em>name</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/netgraph.html#NetGraph.del_node_annotation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.netgraph.NetGraph.del_node_annotation" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.netgraph.NetGraph.edge_annotation">
+<tt class="descname">edge_annotation</tt><big>(</big><em>nid1</em>, <em>nid2</em>, <em>name</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/netgraph.html#NetGraph.edge_annotation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.netgraph.NetGraph.edge_annotation" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.netgraph.NetGraph.edge_annotations">
+<tt class="descname">edge_annotations</tt><big>(</big><em>nid1</em>, <em>nid2</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/netgraph.html#NetGraph.edge_annotations"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.netgraph.NetGraph.edge_annotations" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.netgraph.NetGraph.edge_net_annotation">
+<tt class="descname">edge_net_annotation</tt><big>(</big><em>nid1</em>, <em>nid2</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/netgraph.html#NetGraph.edge_net_annotation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.netgraph.NetGraph.edge_net_annotation" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.netgraph.NetGraph.edges">
+<tt class="descname">edges</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/util/netgraph.html#NetGraph.edges"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.netgraph.NetGraph.edges" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.netgraph.NetGraph.generate_topology">
+<tt class="descname">generate_topology</tt><big>(</big><em>topo_type</em>, <em>node_count</em>, <em>branches=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/netgraph.html#NetGraph.generate_topology"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.netgraph.NetGraph.generate_topology" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.netgraph.NetGraph.get_p2p_info">
+<tt class="descname">get_p2p_info</tt><big>(</big><em>nid1</em>, <em>nid2</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/netgraph.html#NetGraph.get_p2p_info"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.netgraph.NetGraph.get_p2p_info" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.netgraph.NetGraph.is_source">
+<tt class="descname">is_source</tt><big>(</big><em>nid</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/netgraph.html#NetGraph.is_source"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.netgraph.NetGraph.is_source" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.netgraph.NetGraph.is_target">
+<tt class="descname">is_target</tt><big>(</big><em>nid</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/netgraph.html#NetGraph.is_target"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.netgraph.NetGraph.is_target" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.netgraph.NetGraph.node_annotation">
+<tt class="descname">node_annotation</tt><big>(</big><em>nid</em>, <em>name</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/netgraph.html#NetGraph.node_annotation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.netgraph.NetGraph.node_annotation" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.netgraph.NetGraph.node_annotations">
+<tt class="descname">node_annotations</tt><big>(</big><em>nid</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/netgraph.html#NetGraph.node_annotations"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.netgraph.NetGraph.node_annotations" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.netgraph.NetGraph.node_ip_annotations">
+<tt class="descname">node_ip_annotations</tt><big>(</big><em>nid</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/netgraph.html#NetGraph.node_ip_annotations"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.netgraph.NetGraph.node_ip_annotations" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.netgraph.NetGraph.nodes">
+<tt class="descname">nodes</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/util/netgraph.html#NetGraph.nodes"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.netgraph.NetGraph.nodes" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.util.netgraph.NetGraph.order">
+<tt class="descname">order</tt><a class="reference internal" href="../_modules/nepi/util/netgraph.html#NetGraph.order"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.netgraph.NetGraph.order" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.netgraph.NetGraph.select_random_source">
+<tt class="descname">select_random_source</tt><big>(</big><em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/netgraph.html#NetGraph.select_random_source"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.netgraph.NetGraph.select_random_source" title="Permalink to this definition">¶</a></dt>
+<dd><p>Mark a random node as source.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.netgraph.NetGraph.select_target_zero">
+<tt class="descname">select_target_zero</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/util/netgraph.html#NetGraph.select_target_zero"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.netgraph.NetGraph.select_target_zero" title="Permalink to this definition">¶</a></dt>
+<dd><p>Mark the node 0 as target</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.netgraph.NetGraph.set_source">
+<tt class="descname">set_source</tt><big>(</big><em>nid</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/netgraph.html#NetGraph.set_source"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.netgraph.NetGraph.set_source" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.netgraph.NetGraph.set_target">
+<tt class="descname">set_target</tt><big>(</big><em>nid</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/netgraph.html#NetGraph.set_target"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.netgraph.NetGraph.set_target" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.netgraph.NetGraph.sources">
+<tt class="descname">sources</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/util/netgraph.html#NetGraph.sources"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.netgraph.NetGraph.sources" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the nodes that are sources</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.netgraph.NetGraph.targets">
+<tt class="descname">targets</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/util/netgraph.html#NetGraph.targets"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.netgraph.NetGraph.targets" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the nodes that are targets</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.util.netgraph.NetGraph.topo_type">
+<tt class="descname">topo_type</tt><a class="reference internal" href="../_modules/nepi/util/netgraph.html#NetGraph.topo_type"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.netgraph.NetGraph.topo_type" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.util.netgraph.NetGraph.topology">
+<tt class="descname">topology</tt><a class="reference internal" href="../_modules/nepi/util/netgraph.html#NetGraph.topology"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.netgraph.NetGraph.topology" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+<dl class="class">
+<dt id="nepi.util.netgraph.TopologyType">
+<em class="property">class </em><tt class="descclassname">nepi.util.netgraph.</tt><tt class="descname">TopologyType</tt><a class="reference internal" href="../_modules/nepi/util/netgraph.html#TopologyType"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.netgraph.TopologyType" title="Permalink to this definition">¶</a></dt>
+<dd><dl class="attribute">
+<dt id="nepi.util.netgraph.TopologyType.ADHOC">
+<tt class="descname">ADHOC</tt><em class="property"> = 'adhoc'</em><a class="headerlink" href="#nepi.util.netgraph.TopologyType.ADHOC" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.util.netgraph.TopologyType.LADDER">
+<tt class="descname">LADDER</tt><em class="property"> = 'ladder'</em><a class="headerlink" href="#nepi.util.netgraph.TopologyType.LADDER" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.util.netgraph.TopologyType.LINEAR">
+<tt class="descname">LINEAR</tt><em class="property"> = 'linear'</em><a class="headerlink" href="#nepi.util.netgraph.TopologyType.LINEAR" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.util.netgraph.TopologyType.MESH">
+<tt class="descname">MESH</tt><em class="property"> = 'mesh'</em><a class="headerlink" href="#nepi.util.netgraph.TopologyType.MESH" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.util.netgraph.TopologyType.STAR">
+<tt class="descname">STAR</tt><em class="property"> = 'star'</em><a class="headerlink" href="#nepi.util.netgraph.TopologyType.STAR" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.util.netgraph.TopologyType.TREE">
+<tt class="descname">TREE</tt><em class="property"> = 'tree'</em><a class="headerlink" href="#nepi.util.netgraph.TopologyType.TREE" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.util.parallel">
+<span id="nepi-util-parallel-module"></span><h2>nepi.util.parallel module<a class="headerlink" href="#module-nepi.util.parallel" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.util.parallel.ParallelRun">
+<em class="property">class </em><tt class="descclassname">nepi.util.parallel.</tt><tt class="descname">ParallelRun</tt><big>(</big><em>maxthreads=None</em>, <em>maxqueue=None</em>, <em>results=True</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/parallel.html#ParallelRun"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.parallel.ParallelRun" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference external" href="http://docs.python.org/library/functions.html#object" title="(in Python v2.7)"><tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></a></p>
+<dl class="method">
+<dt id="nepi.util.parallel.ParallelRun.destroy">
+<tt class="descname">destroy</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/util/parallel.html#ParallelRun.destroy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.parallel.ParallelRun.destroy" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.parallel.ParallelRun.empty">
+<tt class="descname">empty</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/util/parallel.html#ParallelRun.empty"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.parallel.ParallelRun.empty" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.parallel.ParallelRun.initialize_workers">
+<tt class="descname">initialize_workers</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/util/parallel.html#ParallelRun.initialize_workers"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.parallel.ParallelRun.initialize_workers" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.parallel.ParallelRun.join">
+<tt class="descname">join</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/util/parallel.html#ParallelRun.join"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.parallel.ParallelRun.join" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.parallel.ParallelRun.put">
+<tt class="descname">put</tt><big>(</big><em>callable</em>, <em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/parallel.html#ParallelRun.put"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.parallel.ParallelRun.put" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.parallel.ParallelRun.put_nowait">
+<tt class="descname">put_nowait</tt><big>(</big><em>callable</em>, <em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/parallel.html#ParallelRun.put_nowait"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.parallel.ParallelRun.put_nowait" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.parallel.ParallelRun.start">
+<tt class="descname">start</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/util/parallel.html#ParallelRun.start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.parallel.ParallelRun.start" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.parallel.ParallelRun.sync">
+<tt class="descname">sync</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/util/parallel.html#ParallelRun.sync"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.parallel.ParallelRun.sync" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+<dl class="class">
+<dt id="nepi.util.parallel.WorkerThread">
+<em class="property">class </em><tt class="descclassname">nepi.util.parallel.</tt><tt class="descname">WorkerThread</tt><big>(</big><em>group=None</em>, <em>target=None</em>, <em>name=None</em>, <em>args=()</em>, <em>kwargs=None</em>, <em>verbose=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/parallel.html#WorkerThread"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.parallel.WorkerThread" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference external" href="http://docs.python.org/library/threading.html#threading.Thread" title="(in Python v2.7)"><tt class="xref py py-class docutils literal"><span class="pre">threading.Thread</span></tt></a></p>
+<dl class="class">
+<dt id="nepi.util.parallel.WorkerThread.QUIT">
+<em class="property">class </em><tt class="descname">QUIT</tt><a class="reference internal" href="../_modules/nepi/util/parallel.html#WorkerThread.QUIT"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.parallel.WorkerThread.QUIT" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.parallel.WorkerThread.attach">
+<tt class="descclassname">WorkerThread.</tt><tt class="descname">attach</tt><big>(</big><em>queue</em>, <em>rvqueue</em>, <em>delayed_exceptions</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/parallel.html#WorkerThread.attach"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.parallel.WorkerThread.attach" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.parallel.WorkerThread.quit">
+<tt class="descclassname">WorkerThread.</tt><tt class="descname">quit</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/util/parallel.html#WorkerThread.quit"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.parallel.WorkerThread.quit" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.parallel.WorkerThread.run">
+<tt class="descclassname">WorkerThread.</tt><tt class="descname">run</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/util/parallel.html#WorkerThread.run"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.parallel.WorkerThread.run" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.util.plotter">
+<span id="nepi-util-plotter-module"></span><h2>nepi.util.plotter module<a class="headerlink" href="#module-nepi.util.plotter" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.util.plotter.ECPlotter">
+<em class="property">class </em><tt class="descclassname">nepi.util.plotter.</tt><tt class="descname">ECPlotter</tt><a class="reference internal" href="../_modules/nepi/util/plotter.html#ECPlotter"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.plotter.ECPlotter" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference external" href="http://docs.python.org/library/functions.html#object" title="(in Python v2.7)"><tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></a></p>
+<dl class="method">
+<dt id="nepi.util.plotter.ECPlotter.plot">
+<tt class="descname">plot</tt><big>(</big><em>ec</em>, <em>dirpath=None</em>, <em>format='figure'</em>, <em>show=False</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/plotter.html#ECPlotter.plot"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.plotter.ECPlotter.plot" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+<dl class="class">
+<dt id="nepi.util.plotter.PFormats">
+<em class="property">class </em><tt class="descclassname">nepi.util.plotter.</tt><tt class="descname">PFormats</tt><a class="reference internal" href="../_modules/nepi/util/plotter.html#PFormats"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.plotter.PFormats" title="Permalink to this definition">¶</a></dt>
+<dd><dl class="attribute">
+<dt id="nepi.util.plotter.PFormats.DOT">
+<tt class="descname">DOT</tt><em class="property"> = 'dot'</em><a class="headerlink" href="#nepi.util.plotter.PFormats.DOT" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.util.plotter.PFormats.FIGURE">
+<tt class="descname">FIGURE</tt><em class="property"> = 'figure'</em><a class="headerlink" href="#nepi.util.plotter.PFormats.FIGURE" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.util.rmatcher">
+<span id="nepi-util-rmatcher-module"></span><h2>nepi.util.rmatcher module<a class="headerlink" href="#module-nepi.util.rmatcher" title="Permalink to this headline">¶</a></h2>
+<dl class="function">
+<dt id="nepi.util.rmatcher.find_boxes">
+<tt class="descclassname">nepi.util.rmatcher.</tt><tt class="descname">find_boxes</tt><big>(</big><em>box</em>, <em>all_tags=None</em>, <em>exact_tags=None</em>, <em>max_depth=1</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/rmatcher.html#find_boxes"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.rmatcher.find_boxes" title="Permalink to this definition">¶</a></dt>
+<dd><p>Look for the connected boxes with the required tags, doing breath-first
+search, until max_depth ( max_depth = None will traverse the entire graph ).</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="nepi.util.rmatcher.match_tags">
+<tt class="descclassname">nepi.util.rmatcher.</tt><tt class="descname">match_tags</tt><big>(</big><em>box</em>, <em>all_tags</em>, <em>exact_tags</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/rmatcher.html#match_tags"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.rmatcher.match_tags" title="Permalink to this definition">¶</a></dt>
+<dd><p>returns True if box has required tags</p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.util.serializer">
+<span id="nepi-util-serializer-module"></span><h2>nepi.util.serializer module<a class="headerlink" href="#module-nepi.util.serializer" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.util.serializer.ECSerializer">
+<em class="property">class </em><tt class="descclassname">nepi.util.serializer.</tt><tt class="descname">ECSerializer</tt><a class="reference internal" href="../_modules/nepi/util/serializer.html#ECSerializer"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.serializer.ECSerializer" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference external" href="http://docs.python.org/library/functions.html#object" title="(in Python v2.7)"><tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></a></p>
+<dl class="method">
+<dt id="nepi.util.serializer.ECSerializer.load">
+<tt class="descname">load</tt><big>(</big><em>filepath</em>, <em>format='xml'</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/serializer.html#ECSerializer.load"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.serializer.ECSerializer.load" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.serializer.ECSerializer.save">
+<tt class="descname">save</tt><big>(</big><em>ec</em>, <em>dirpath</em>, <em>format='xml'</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/serializer.html#ECSerializer.save"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.serializer.ECSerializer.save" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.serializer.ECSerializer.serialize">
+<tt class="descname">serialize</tt><big>(</big><em>ec</em>, <em>format='xml'</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/serializer.html#ECSerializer.serialize"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.serializer.ECSerializer.serialize" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+<dl class="class">
+<dt id="nepi.util.serializer.SFormats">
+<em class="property">class </em><tt class="descclassname">nepi.util.serializer.</tt><tt class="descname">SFormats</tt><a class="reference internal" href="../_modules/nepi/util/serializer.html#SFormats"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.serializer.SFormats" title="Permalink to this definition">¶</a></dt>
+<dd><dl class="attribute">
+<dt id="nepi.util.serializer.SFormats.XML">
+<tt class="descname">XML</tt><em class="property"> = 'xml'</em><a class="headerlink" href="#nepi.util.serializer.SFormats.XML" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.util.sfaapi">
+<span id="nepi-util-sfaapi-module"></span><h2>nepi.util.sfaapi module<a class="headerlink" href="#module-nepi.util.sfaapi" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.util.sfaapi.SFAAPI">
+<em class="property">class </em><tt class="descclassname">nepi.util.sfaapi.</tt><tt class="descname">SFAAPI</tt><big>(</big><em>sfi_user</em>, <em>sfi_auth</em>, <em>sfi_registry</em>, <em>sfi_sm</em>, <em>private_key</em>, <em>ec</em>, <em>batch</em>, <em>rtype</em>, <em>timeout</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/sfaapi.html#SFAAPI"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.sfaapi.SFAAPI" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference external" href="http://docs.python.org/library/functions.html#object" title="(in Python v2.7)"><tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></a></p>
+<p>API for quering the SFA service. It uses Sfi class from the tool sfi client.</p>
+<dl class="method">
+<dt id="nepi.util.sfaapi.SFAAPI.add_resource_to_slice">
+<tt class="descname">add_resource_to_slice</tt><big>(</big><em>slicename</em>, <em>resource_hrn</em>, <em>leases=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/sfaapi.html#SFAAPI.add_resource_to_slice"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.sfaapi.SFAAPI.add_resource_to_slice" title="Permalink to this definition">¶</a></dt>
+<dd><p>Get the list of resources&#8217; urn, build the rspec string and call the allocate 
+and provision method.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.sfaapi.SFAAPI.add_resource_to_slice_batch">
+<tt class="descname">add_resource_to_slice_batch</tt><big>(</big><em>slicename</em>, <em>resource_hrn</em>, <em>properties=None</em>, <em>leases=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/sfaapi.html#SFAAPI.add_resource_to_slice_batch"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.sfaapi.SFAAPI.add_resource_to_slice_batch" title="Permalink to this definition">¶</a></dt>
+<dd><p>Method to add all resources together to the slice. Previous deletion of slivers.
+Specially used for wilabt that doesn&#8217;t allow to add more resources to the slice
+after some resources are added. Every sliver have to be deleted and the batch 
+has to be added at once.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.sfaapi.SFAAPI.blacklist_resource">
+<tt class="descname">blacklist_resource</tt><big>(</big><em>resource_hrn</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/sfaapi.html#SFAAPI.blacklist_resource"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.sfaapi.SFAAPI.blacklist_resource" title="Permalink to this definition">¶</a></dt>
+<dd><p>Adding resource_hrn to blacklist, and taking 
+the resource from the reserved list.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.sfaapi.SFAAPI.blacklisted">
+<tt class="descname">blacklisted</tt><big>(</big><em>resource_hrn</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/sfaapi.html#SFAAPI.blacklisted"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.sfaapi.SFAAPI.blacklisted" title="Permalink to this definition">¶</a></dt>
+<dd><p>Check if the resource is in the blacklist.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.sfaapi.SFAAPI.get_resources_hrn">
+<tt class="descname">get_resources_hrn</tt><big>(</big><em>resources=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/sfaapi.html#SFAAPI.get_resources_hrn"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.sfaapi.SFAAPI.get_resources_hrn" title="Permalink to this definition">¶</a></dt>
+<dd><p>Get list of resources hrn, without the resource info.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.sfaapi.SFAAPI.get_resources_info">
+<tt class="descname">get_resources_info</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/util/sfaapi.html#SFAAPI.get_resources_info"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.sfaapi.SFAAPI.get_resources_info" title="Permalink to this definition">¶</a></dt>
+<dd><p>Get all resources and its attributes from aggregate.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.sfaapi.SFAAPI.get_slice_resources">
+<tt class="descname">get_slice_resources</tt><big>(</big><em>slicename</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/sfaapi.html#SFAAPI.get_slice_resources"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.sfaapi.SFAAPI.get_slice_resources" title="Permalink to this definition">¶</a></dt>
+<dd><p>Get resources and info from slice.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.sfaapi.SFAAPI.release">
+<tt class="descname">release</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/util/sfaapi.html#SFAAPI.release"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.sfaapi.SFAAPI.release" title="Permalink to this definition">¶</a></dt>
+<dd><p>Remove hosts from the reserved and blacklist lists, and in case
+the persist attribute is set, it saves the blacklisted hosts
+in the blacklist file.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.sfaapi.SFAAPI.remove_all_from_slice">
+<tt class="descname">remove_all_from_slice</tt><big>(</big><em>slicename</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/sfaapi.html#SFAAPI.remove_all_from_slice"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.sfaapi.SFAAPI.remove_all_from_slice" title="Permalink to this definition">¶</a></dt>
+<dd><p>De-allocate and de-provision all slivers of the named slice.
+Currently sfi doesn&#8217;t support removing particular
+slivers, so this method works only for removing every sliver. Setting the
+resource_hrn parameter is not necessary.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.sfaapi.SFAAPI.remove_resource_from_slice">
+<tt class="descname">remove_resource_from_slice</tt><big>(</big><em>slicename</em>, <em>resource_hrn</em>, <em>leases=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/sfaapi.html#SFAAPI.remove_resource_from_slice"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.sfaapi.SFAAPI.remove_resource_from_slice" title="Permalink to this definition">¶</a></dt>
+<dd><p>Remove slivers from slice. Currently sfi doesn&#8217;t support removing particular
+slivers.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.sfaapi.SFAAPI.reserve_resource">
+<tt class="descname">reserve_resource</tt><big>(</big><em>resource_hrn</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/sfaapi.html#SFAAPI.reserve_resource"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.sfaapi.SFAAPI.reserve_resource" title="Permalink to this definition">¶</a></dt>
+<dd><p>Add resource to the reserved list.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.sfaapi.SFAAPI.reserved">
+<tt class="descname">reserved</tt><big>(</big><em>resource_hrn</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/sfaapi.html#SFAAPI.reserved"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.sfaapi.SFAAPI.reserved" title="Permalink to this definition">¶</a></dt>
+<dd><p>Check that the resource in not reserved.</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="class">
+<dt id="nepi.util.sfaapi.SFAAPIFactory">
+<em class="property">class </em><tt class="descclassname">nepi.util.sfaapi.</tt><tt class="descname">SFAAPIFactory</tt><a class="reference internal" href="../_modules/nepi/util/sfaapi.html#SFAAPIFactory"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.sfaapi.SFAAPIFactory" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference external" href="http://docs.python.org/library/functions.html#object" title="(in Python v2.7)"><tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></a></p>
+<p>API Factory to manage a map of SFAAPI instances as key-value pairs, it
+instanciate a single instance per key. The key represents the same SFA, 
+credentials.</p>
+<dl class="classmethod">
+<dt id="nepi.util.sfaapi.SFAAPIFactory.get_api">
+<em class="property">classmethod </em><tt class="descname">get_api</tt><big>(</big><em>sfi_user</em>, <em>sfi_auth</em>, <em>sfi_registry</em>, <em>sfi_sm</em>, <em>private_key</em>, <em>ec</em>, <em>batch=False</em>, <em>rtype=None</em>, <em>timeout=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/sfaapi.html#SFAAPIFactory.get_api"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.sfaapi.SFAAPIFactory.get_api" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="classmethod">
+<dt id="nepi.util.sfaapi.SFAAPIFactory.make_key">
+<em class="property">classmethod </em><tt class="descname">make_key</tt><big>(</big><em>*args</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/sfaapi.html#SFAAPIFactory.make_key"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.sfaapi.SFAAPIFactory.make_key" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.util.sfarspec_proc">
+<span id="nepi-util-sfarspec-proc-module"></span><h2>nepi.util.sfarspec_proc module<a class="headerlink" href="#module-nepi.util.sfarspec_proc" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.util.sfarspec_proc.SfaRSpecProcessing">
+<em class="property">class </em><tt class="descclassname">nepi.util.sfarspec_proc.</tt><tt class="descname">SfaRSpecProcessing</tt><big>(</big><em>config=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/sfarspec_proc.html#SfaRSpecProcessing"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.sfarspec_proc.SfaRSpecProcessing" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference external" href="http://docs.python.org/library/functions.html#object" title="(in Python v2.7)"><tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></a></p>
+<p>Class to process SFA RSpecs, parse the RSpec replies such as Advertisement RSpecs,
+and build in the case of Request RSpecs.</p>
+<dl class="method">
+<dt id="nepi.util.sfarspec_proc.SfaRSpecProcessing.build_sfa_rspec">
+<tt class="descname">build_sfa_rspec</tt><big>(</big><em>slice_id</em>, <em>resources</em>, <em>properties</em>, <em>leases</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/sfarspec_proc.html#SfaRSpecProcessing.build_sfa_rspec"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.sfarspec_proc.SfaRSpecProcessing.build_sfa_rspec" title="Permalink to this definition">¶</a></dt>
+<dd><p>Build the XML RSpec from list of resources&#8217; urns.
+eg. resources = [&#8220;<a class="reference external" href="urn:publicid:IDN+ple:modenaple+node+planetlab-1.ing.unimo.it">urn:publicid:IDN+ple:modenaple+node+planetlab-1.ing.unimo.it</a>&#8220;]</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.sfarspec_proc.SfaRSpecProcessing.make_dict_rec">
+<tt class="descname">make_dict_rec</tt><big>(</big><em>obj</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/sfarspec_proc.html#SfaRSpecProcessing.make_dict_rec"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.sfarspec_proc.SfaRSpecProcessing.make_dict_rec" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.sfarspec_proc.SfaRSpecProcessing.parse_sfa_rspec">
+<tt class="descname">parse_sfa_rspec</tt><big>(</big><em>rspec_string</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/sfarspec_proc.html#SfaRSpecProcessing.parse_sfa_rspec"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.sfarspec_proc.SfaRSpecProcessing.parse_sfa_rspec" title="Permalink to this definition">¶</a></dt>
+<dd><p>Parse the RSpec XML as a string.</p>
+</dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.util.sshfuncs">
+<span id="nepi-util-sshfuncs-module"></span><h2>nepi.util.sshfuncs module<a class="headerlink" href="#module-nepi.util.sshfuncs" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.util.sshfuncs.ProcStatus">
+<em class="property">class </em><tt class="descclassname">nepi.util.sshfuncs.</tt><tt class="descname">ProcStatus</tt><a class="reference internal" href="../_modules/nepi/util/sshfuncs.html#ProcStatus"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.sshfuncs.ProcStatus" title="Permalink to this definition">¶</a></dt>
+<dd><p>Codes for status of remote spawned process</p>
+<dl class="attribute">
+<dt id="nepi.util.sshfuncs.ProcStatus.FINISHED">
+<tt class="descname">FINISHED</tt><em class="property"> = 2</em><a class="headerlink" href="#nepi.util.sshfuncs.ProcStatus.FINISHED" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.util.sshfuncs.ProcStatus.NOT_STARTED">
+<tt class="descname">NOT_STARTED</tt><em class="property"> = 3</em><a class="headerlink" href="#nepi.util.sshfuncs.ProcStatus.NOT_STARTED" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="attribute">
+<dt id="nepi.util.sshfuncs.ProcStatus.RUNNING">
+<tt class="descname">RUNNING</tt><em class="property"> = 1</em><a class="headerlink" href="#nepi.util.sshfuncs.ProcStatus.RUNNING" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+<dl class="class">
+<dt id="nepi.util.sshfuncs.STDOUT">
+<em class="property">class </em><tt class="descclassname">nepi.util.sshfuncs.</tt><tt class="descname">STDOUT</tt><a class="reference internal" href="../_modules/nepi/util/sshfuncs.html#STDOUT"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.sshfuncs.STDOUT" title="Permalink to this definition">¶</a></dt>
+<dd><p>Special value that when given to rspawn in stderr causes stderr to 
+redirect to whatever stdout was redirected to.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="nepi.util.sshfuncs.eintr_retry">
+<tt class="descclassname">nepi.util.sshfuncs.</tt><tt class="descname">eintr_retry</tt><big>(</big><em>func</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/sshfuncs.html#eintr_retry"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.sshfuncs.eintr_retry" title="Permalink to this definition">¶</a></dt>
+<dd><p>Retries a function invocation when a EINTR occurs</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="nepi.util.sshfuncs.gethostbyname">
+<tt class="descclassname">nepi.util.sshfuncs.</tt><tt class="descname">gethostbyname</tt><big>(</big><em>host</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/sshfuncs.html#gethostbyname"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.sshfuncs.gethostbyname" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="function">
+<dt id="nepi.util.sshfuncs.log">
+<tt class="descclassname">nepi.util.sshfuncs.</tt><tt class="descname">log</tt><big>(</big><em>msg</em>, <em>level</em>, <em>out=None</em>, <em>err=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/sshfuncs.html#log"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.sshfuncs.log" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="function">
+<dt id="nepi.util.sshfuncs.make_control_path">
+<tt class="descclassname">nepi.util.sshfuncs.</tt><tt class="descname">make_control_path</tt><big>(</big><em>agent</em>, <em>forward_x11</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/sshfuncs.html#make_control_path"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.sshfuncs.make_control_path" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="function">
+<dt id="nepi.util.sshfuncs.make_server_key_args">
+<tt class="descclassname">nepi.util.sshfuncs.</tt><tt class="descname">make_server_key_args</tt><big>(</big><em>server_key</em>, <em>host</em>, <em>port</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/sshfuncs.html#make_server_key_args"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.sshfuncs.make_server_key_args" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns a reference to a temporary known_hosts file, to which 
+the server key has been added.</p>
+<p>Make sure to hold onto the temp file reference until the process is 
+done with it</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
+<li><strong>server_key</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; the server public key</li>
+<li><strong>host</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; the hostname</li>
+<li><strong>port</strong> (<a class="reference external" href="http://docs.python.org/library/functions.html#str" title="(in Python v2.7)"><em>str</em></a>) &#8211; the ssh port</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
+<dl class="function">
+<dt id="nepi.util.sshfuncs.openssh_has_persist">
+<tt class="descclassname">nepi.util.sshfuncs.</tt><tt class="descname">openssh_has_persist</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/util/sshfuncs.html#openssh_has_persist"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.sshfuncs.openssh_has_persist" title="Permalink to this definition">¶</a></dt>
+<dd><p>The ssh_config options ControlMaster and ControlPersist allow to
+reuse a same network connection for multiple ssh sessions. In this 
+way limitations on number of open ssh connections can be bypassed.
+However, older versions of openSSH do not support this feature.
+This function is used to determine if ssh connection persist features
+can be used.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="nepi.util.sshfuncs.rcopy">
+<tt class="descclassname">nepi.util.sshfuncs.</tt><tt class="descname">rcopy</tt><big>(</big><em>source</em>, <em>dest</em>, <em>port=None</em>, <em>gwuser=None</em>, <em>gw=None</em>, <em>recursive=False</em>, <em>identity=None</em>, <em>server_key=None</em>, <em>retry=3</em>, <em>strict_host_checking=True</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/sshfuncs.html#rcopy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.sshfuncs.rcopy" title="Permalink to this definition">¶</a></dt>
+<dd><p>Copies from/to remote sites.</p>
+<p>Source and destination should have the user and host encoded
+as per scp specs.</p>
+<p>Source can be a list of files to copy to a single destination, 
+(in which case it is advised that the destination be a folder),
+or a single file in a string.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="nepi.util.sshfuncs.resolve_hostname">
+<tt class="descclassname">nepi.util.sshfuncs.</tt><tt class="descname">resolve_hostname</tt><big>(</big><em>host</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/sshfuncs.html#resolve_hostname"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.sshfuncs.resolve_hostname" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="function">
+<dt id="nepi.util.sshfuncs.rexec">
+<tt class="descclassname">nepi.util.sshfuncs.</tt><tt class="descname">rexec</tt><big>(</big><em>command</em>, <em>host</em>, <em>user</em>, <em>port=None</em>, <em>gwuser=None</em>, <em>gw=None</em>, <em>agent=True</em>, <em>sudo=False</em>, <em>identity=None</em>, <em>server_key=None</em>, <em>env=None</em>, <em>tty=False</em>, <em>connect_timeout=30</em>, <em>retry=3</em>, <em>persistent=True</em>, <em>forward_x11=False</em>, <em>blocking=True</em>, <em>strict_host_checking=True</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/sshfuncs.html#rexec"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.sshfuncs.rexec" title="Permalink to this definition">¶</a></dt>
+<dd><p>Executes a remote command, returns ((stdout,stderr),process)</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="nepi.util.sshfuncs.rgetpid">
+<tt class="descclassname">nepi.util.sshfuncs.</tt><tt class="descname">rgetpid</tt><big>(</big><em>*p</em>, <em>**kw</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/sshfuncs.html#rgetpid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.sshfuncs.rgetpid" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the pid and ppid of a process from a remote file where the 
+information was stored.</p>
+<blockquote>
+<div><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">param home:</th><td class="field-body">Path to directory where the pidfile is located</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type home:</th><td class="field-body">str</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">param pidfile:</th><td class="field-body">Name of file containing the pid information</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type pidfile:</th><td class="field-body">str</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">rtype:</th><td class="field-body">int</td>
+</tr>
+</tbody>
+</table>
+<p>A (pid, ppid) tuple useful for calling rstatus and rkill,
+or None if the pidfile isn&#8217;t valid yet (can happen when process is staring up)</p>
+</div></blockquote>
+</dd></dl>
+
+<dl class="function">
+<dt id="nepi.util.sshfuncs.rkill">
+<tt class="descclassname">nepi.util.sshfuncs.</tt><tt class="descname">rkill</tt><big>(</big><em>*p</em>, <em>**kw</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/sshfuncs.html#rkill"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.sshfuncs.rkill" title="Permalink to this definition">¶</a></dt>
+<dd><p>Sends a kill signal to a remote process.</p>
+<p>First tries a SIGTERM, and if the process does not end in 10 seconds,
+it sends a SIGKILL.</p>
+<blockquote>
+<div><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">param pid:</th><td class="field-body">Process id of process to be killed</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type pid:</th><td class="field-body">int</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">param ppid:</th><td class="field-body">Parent process id of process to be killed</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type ppid:</th><td class="field-body">int</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">param sudo:</th><td class="field-body">Flag indicating if sudo should be used to kill the process</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type sudo:</th><td class="field-body">bool</td>
+</tr>
+</tbody>
+</table>
+</div></blockquote>
+</dd></dl>
+
+<dl class="function">
+<dt id="nepi.util.sshfuncs.rspawn">
+<tt class="descclassname">nepi.util.sshfuncs.</tt><tt class="descname">rspawn</tt><big>(</big><em>command</em>, <em>pidfile</em>, <em>stdout='/dev/null'</em>, <em>stderr=&lt;class nepi.util.sshfuncs.STDOUT at 0x7f028ff15bb0&gt;</em>, <em>stdin='/dev/null'</em>, <em>home=None</em>, <em>create_home=False</em>, <em>sudo=False</em>, <em>host=None</em>, <em>port=None</em>, <em>user=None</em>, <em>gwuser=None</em>, <em>gw=None</em>, <em>agent=None</em>, <em>identity=None</em>, <em>server_key=None</em>, <em>tty=False</em>, <em>strict_host_checking=True</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/sshfuncs.html#rspawn"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.sshfuncs.rspawn" title="Permalink to this definition">¶</a></dt>
+<dd><p>Spawn a remote command such that it will continue working asynchronously in 
+background.</p>
+<blockquote>
+<div><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">param command:</th><td class="field-body">The command to run, it should be a single line.</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type command:</th><td class="field-body">str</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">param pidfile:</th><td class="field-body">Path to a file where to store the pid and ppid of the 
+spawned process</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type pidfile:</th><td class="field-body">str</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">param stdout:</th><td class="field-body">Path to file to redirect standard output. 
+The default value is /dev/null</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type stdout:</th><td class="field-body">str</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">param stderr:</th><td class="field-body">Path to file to redirect standard error.
+If the special STDOUT value is used, stderr will 
+be redirected to the same file as stdout</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type stderr:</th><td class="field-body">str</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">param stdin:</th><td class="field-body">Path to a file with input to be piped into the command&#8217;s standard input</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type stdin:</th><td class="field-body">str</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">param home:</th><td class="field-body">Path to working directory folder. 
+It is assumed to exist unless the create_home flag is set.</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type home:</th><td class="field-body">str</td>
+</tr>
+<tr class="field-odd field"><th class="field-name" colspan="2">param create_home:</th></tr>
+<tr class="field-odd field"><td>&nbsp;</td><td class="field-body">Flag to force creation of the home folder before 
+running the command</td>
+</tr>
+<tr class="field-even field"><th class="field-name" colspan="2">type create_home:</th></tr>
+<tr class="field-even field"><td>&nbsp;</td><td class="field-body">bool</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">param sudo:</th><td class="field-body">Flag forcing execution with sudo user</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type sudo:</th><td class="field-body">bool</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">rtype:</th><td class="field-body">tuple</td>
+</tr>
+</tbody>
+</table>
+<p>(stdout, stderr), process</p>
+<p>Of the spawning process, which only captures errors at spawning time.
+Usually only useful for diagnostics.</p>
+</div></blockquote>
+</dd></dl>
+
+<dl class="function">
+<dt id="nepi.util.sshfuncs.rstatus">
+<tt class="descclassname">nepi.util.sshfuncs.</tt><tt class="descname">rstatus</tt><big>(</big><em>*p</em>, <em>**kw</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/sshfuncs.html#rstatus"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.sshfuncs.rstatus" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns a code representing the the status of a remote process</p>
+<blockquote>
+<div><table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">param pid:</th><td class="field-body">Process id of the process</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type pid:</th><td class="field-body">int</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">param ppid:</th><td class="field-body">Parent process id of process</td>
+</tr>
+<tr class="field-even field"><th class="field-name">type ppid:</th><td class="field-body">int</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">rtype:</th><td class="field-body">int (One of NOT_STARTED, RUNNING, FINISHED)</td>
+</tr>
+</tbody>
+</table>
+</div></blockquote>
+</dd></dl>
+
+<dl class="function">
+<dt id="nepi.util.sshfuncs.shell_escape">
+<tt class="descclassname">nepi.util.sshfuncs.</tt><tt class="descname">shell_escape</tt><big>(</big><em>s</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/sshfuncs.html#shell_escape"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.sshfuncs.shell_escape" title="Permalink to this definition">¶</a></dt>
+<dd><p>Escapes strings so that they are safe to use as command-line 
+arguments</p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.util.statfuncs">
+<span id="nepi-util-statfuncs-module"></span><h2>nepi.util.statfuncs module<a class="headerlink" href="#module-nepi.util.statfuncs" title="Permalink to this headline">¶</a></h2>
+<dl class="function">
+<dt id="nepi.util.statfuncs.compute_mean">
+<tt class="descclassname">nepi.util.statfuncs.</tt><tt class="descname">compute_mean</tt><big>(</big><em>sample</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/statfuncs.html#compute_mean"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.statfuncs.compute_mean" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</div>
+<div class="section" id="module-nepi.util.timefuncs">
+<span id="nepi-util-timefuncs-module"></span><h2>nepi.util.timefuncs module<a class="headerlink" href="#module-nepi.util.timefuncs" title="Permalink to this headline">¶</a></h2>
+<dl class="function">
+<dt id="nepi.util.timefuncs.compute_delay_ms">
+<tt class="descclassname">nepi.util.timefuncs.</tt><tt class="descname">compute_delay_ms</tt><big>(</big><em>timestamp2</em>, <em>timestamp1</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/timefuncs.html#compute_delay_ms"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.timefuncs.compute_delay_ms" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="function">
+<dt id="nepi.util.timefuncs.stabsformat">
+<tt class="descclassname">nepi.util.timefuncs.</tt><tt class="descname">stabsformat</tt><big>(</big><em>sdate</em>, <em>dbase=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/timefuncs.html#stabsformat"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.timefuncs.stabsformat" title="Permalink to this definition">¶</a></dt>
+<dd><p>Constructs a datetime object from a string date.
+The string date can be expressed as an absolute date
+( i.e. format YYYYMMddHHMMSSffff ) or as a relative time
+( e.g. format &#8216;5m&#8217; or &#8216;10s&#8217;). 
+If the date is a relative time and the dbase parameter 
+is given (dbase must be datetime object), the returned
+date will be dbase + sdate. If dbase is None, 
+current time will be used instead as base time.</p>
+<p>:param date : string date  
+:type date : date</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="nepi.util.timefuncs.stformat">
+<tt class="descclassname">nepi.util.timefuncs.</tt><tt class="descname">stformat</tt><big>(</big><em>sdate</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/timefuncs.html#stformat"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.timefuncs.stformat" title="Permalink to this definition">¶</a></dt>
+<dd><p>Constructs a datetime object from a string date with
+format YYYYMMddHHMMSSffff</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="nepi.util.timefuncs.tdiff">
+<tt class="descclassname">nepi.util.timefuncs.</tt><tt class="descname">tdiff</tt><big>(</big><em>date1</em>, <em>date2</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/timefuncs.html#tdiff"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.timefuncs.tdiff" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns difference ( date1 - date2 ) as a datetime object,
+where date1 and date 2 are datetime objects</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="nepi.util.timefuncs.tdiffsec">
+<tt class="descclassname">nepi.util.timefuncs.</tt><tt class="descname">tdiffsec</tt><big>(</big><em>date1</em>, <em>date2</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/timefuncs.html#tdiffsec"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.timefuncs.tdiffsec" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the date difference ( date1 - date2 ) in seconds,
+where date1 and date 2 are datetime objects</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="nepi.util.timefuncs.tnow">
+<tt class="descclassname">nepi.util.timefuncs.</tt><tt class="descname">tnow</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/nepi/util/timefuncs.html#tnow"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.timefuncs.tnow" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns datetime object with the current time</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="nepi.util.timefuncs.tsformat">
+<tt class="descclassname">nepi.util.timefuncs.</tt><tt class="descname">tsformat</tt><big>(</big><em>date=None</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/timefuncs.html#tsformat"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.timefuncs.tsformat" title="Permalink to this definition">¶</a></dt>
+<dd><p>Formats a datetime object to a string with format YYYYMMddHHMMSSffff.
+If no date is given, the current date is used.</p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-nepi.util">
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-nepi.util" title="Permalink to this headline">¶</a></h2>
+</div>
+</div>
+
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_layout/nepi.util.parsers.html b/doc/sphinx/_build/html/_layout/nepi.util.parsers.html
new file mode 100644 (file)
index 0000000..c31a65d
--- /dev/null
@@ -0,0 +1,151 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.util.parsers package &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../_static/jquery.js"></script>
+    <script type="text/javascript" src="../_static/underscore.js"></script>
+    <script type="text/javascript" src="../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+  <h3><a href="../index.html">Table Of Contents</a></h3>
+  <ul>
+<li><a class="reference internal" href="#">nepi.util.parsers package</a><ul>
+<li><a class="reference internal" href="#submodules">Submodules</a></li>
+<li><a class="reference internal" href="#module-nepi.util.parsers.xml_parser">nepi.util.parsers.xml_parser module</a></li>
+<li><a class="reference internal" href="#module-nepi.util.parsers">Module contents</a></li>
+</ul>
+</li>
+</ul>
+
+  <h3>This Page</h3>
+  <ul class="this-page-menu">
+    <li><a href="../_sources/_layout/nepi.util.parsers.txt"
+           rel="nofollow">Show Source</a></li>
+  </ul>
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <div class="section" id="nepi-util-parsers-package">
+<h1>nepi.util.parsers package<a class="headerlink" href="#nepi-util-parsers-package" title="Permalink to this headline">¶</a></h1>
+<div class="section" id="submodules">
+<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline">¶</a></h2>
+</div>
+<div class="section" id="module-nepi.util.parsers.xml_parser">
+<span id="nepi-util-parsers-xml-parser-module"></span><h2>nepi.util.parsers.xml_parser module<a class="headerlink" href="#module-nepi.util.parsers.xml_parser" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="nepi.util.parsers.xml_parser.ECXMLParser">
+<em class="property">class </em><tt class="descclassname">nepi.util.parsers.xml_parser.</tt><tt class="descname">ECXMLParser</tt><a class="reference internal" href="../_modules/nepi/util/parsers/xml_parser.html#ECXMLParser"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.parsers.xml_parser.ECXMLParser" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference external" href="http://docs.python.org/library/functions.html#object" title="(in Python v2.7)"><tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></a></p>
+<dl class="method">
+<dt id="nepi.util.parsers.xml_parser.ECXMLParser.from_xml">
+<tt class="descname">from_xml</tt><big>(</big><em>xml</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/parsers/xml_parser.html#ECXMLParser.from_xml"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.parsers.xml_parser.ECXMLParser.from_xml" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="method">
+<dt id="nepi.util.parsers.xml_parser.ECXMLParser.to_xml">
+<tt class="descname">to_xml</tt><big>(</big><em>ec</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/parsers/xml_parser.html#ECXMLParser.to_xml"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.parsers.xml_parser.ECXMLParser.to_xml" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+<dl class="function">
+<dt id="nepi.util.parsers.xml_parser.from_type">
+<tt class="descclassname">nepi.util.parsers.xml_parser.</tt><tt class="descname">from_type</tt><big>(</big><em>value</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/parsers/xml_parser.html#from_type"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.parsers.xml_parser.from_type" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="function">
+<dt id="nepi.util.parsers.xml_parser.to_type">
+<tt class="descclassname">nepi.util.parsers.xml_parser.</tt><tt class="descname">to_type</tt><big>(</big><em>type</em>, <em>value</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/parsers/xml_parser.html#to_type"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.parsers.xml_parser.to_type" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="function">
+<dt id="nepi.util.parsers.xml_parser.xmldecode">
+<tt class="descclassname">nepi.util.parsers.xml_parser.</tt><tt class="descname">xmldecode</tt><big>(</big><em>s</em>, <em>cast=&lt;type 'str'&gt;</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/parsers/xml_parser.html#xmldecode"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.parsers.xml_parser.xmldecode" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="function">
+<dt id="nepi.util.parsers.xml_parser.xmlencode">
+<tt class="descclassname">nepi.util.parsers.xml_parser.</tt><tt class="descname">xmlencode</tt><big>(</big><em>s</em><big>)</big><a class="reference internal" href="../_modules/nepi/util/parsers/xml_parser.html#xmlencode"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#nepi.util.parsers.xml_parser.xmlencode" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</div>
+<div class="section" id="module-nepi.util.parsers">
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-nepi.util.parsers" title="Permalink to this headline">¶</a></h2>
+</div>
+</div>
+
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/index.html b/doc/sphinx/_build/html/_modules/index.html
new file mode 100644 (file)
index 0000000..976b752
--- /dev/null
@@ -0,0 +1,330 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>Overview: module code &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../_static/jquery.js"></script>
+    <script type="text/javascript" src="../_static/underscore.js"></script>
+    <script type="text/javascript" src="../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>All modules for which code is available</h1>
+<ul><li><a href="nepi/data/processing/ccn/parser.html">nepi.data.processing.ccn.parser</a></li>
+<li><a href="nepi/data/processing/ping/parser.html">nepi.data.processing.ping.parser</a></li>
+<li><a href="nepi/execution/attribute.html">nepi.execution.attribute</a></li>
+<li><a href="nepi/execution/ec.html">nepi.execution.ec</a></li>
+<li><a href="nepi/execution/resource.html">nepi.execution.resource</a></li>
+<li><a href="nepi/execution/runner.html">nepi.execution.runner</a></li>
+<li><a href="nepi/execution/scheduler.html">nepi.execution.scheduler</a></li>
+<li><a href="nepi/execution/trace.html">nepi.execution.trace</a></li>
+<li><a href="nepi/resources/all/collector.html">nepi.resources.all.collector</a></li>
+<li><a href="nepi/resources/linux/application.html">nepi.resources.linux.application</a></li>
+<li><a href="nepi/resources/linux/ccn/ccnapplication.html">nepi.resources.linux.ccn.ccnapplication</a></li>
+<li><a href="nepi/resources/linux/ccn/ccncat.html">nepi.resources.linux.ccn.ccncat</a></li>
+<li><a href="nepi/resources/linux/ccn/ccncontent.html">nepi.resources.linux.ccn.ccncontent</a></li>
+<li><a href="nepi/resources/linux/ccn/ccnd.html">nepi.resources.linux.ccn.ccnd</a></li>
+<li><a href="nepi/resources/linux/ccn/ccnpeek.html">nepi.resources.linux.ccn.ccnpeek</a></li>
+<li><a href="nepi/resources/linux/ccn/ccnping.html">nepi.resources.linux.ccn.ccnping</a></li>
+<li><a href="nepi/resources/linux/ccn/ccnpingserver.html">nepi.resources.linux.ccn.ccnpingserver</a></li>
+<li><a href="nepi/resources/linux/ccn/ccnpoke.html">nepi.resources.linux.ccn.ccnpoke</a></li>
+<li><a href="nepi/resources/linux/ccn/ccnr.html">nepi.resources.linux.ccn.ccnr</a></li>
+<li><a href="nepi/resources/linux/ccn/fibentry.html">nepi.resources.linux.ccn.fibentry</a></li>
+<li><a href="nepi/resources/linux/channel.html">nepi.resources.linux.channel</a></li>
+<li><a href="nepi/resources/linux/debfuncs.html">nepi.resources.linux.debfuncs</a></li>
+<li><a href="nepi/resources/linux/gretunnel.html">nepi.resources.linux.gretunnel</a></li>
+<li><a href="nepi/resources/linux/interface.html">nepi.resources.linux.interface</a></li>
+<li><a href="nepi/resources/linux/mtr.html">nepi.resources.linux.mtr</a></li>
+<li><a href="nepi/resources/linux/netns/netnsclient.html">nepi.resources.linux.netns.netnsclient</a></li>
+<li><a href="nepi/resources/linux/netns/netnsemulation.html">nepi.resources.linux.netns.netnsemulation</a></li>
+<li><a href="nepi/resources/linux/node.html">nepi.resources.linux.node</a></li>
+<li><a href="nepi/resources/linux/nping.html">nepi.resources.linux.nping</a></li>
+<li><a href="nepi/resources/linux/ns3/ccn/ns3ccncatdceapplication.html">nepi.resources.linux.ns3.ccn.ns3ccncatdceapplication</a></li>
+<li><a href="nepi/resources/linux/ns3/ccn/ns3ccndceapplication.html">nepi.resources.linux.ns3.ccn.ns3ccndceapplication</a></li>
+<li><a href="nepi/resources/linux/ns3/ccn/ns3ccnddceapplication.html">nepi.resources.linux.ns3.ccn.ns3ccnddceapplication</a></li>
+<li><a href="nepi/resources/linux/ns3/ccn/ns3ccnpeekdceapplication.html">nepi.resources.linux.ns3.ccn.ns3ccnpeekdceapplication</a></li>
+<li><a href="nepi/resources/linux/ns3/ccn/ns3ccnpokedceapplication.html">nepi.resources.linux.ns3.ccn.ns3ccnpokedceapplication</a></li>
+<li><a href="nepi/resources/linux/ns3/ccn/ns3ccnrdceapplication.html">nepi.resources.linux.ns3.ccn.ns3ccnrdceapplication</a></li>
+<li><a href="nepi/resources/linux/ns3/ccn/ns3fibentrydceapplication.html">nepi.resources.linux.ns3.ccn.ns3fibentrydceapplication</a></li>
+<li><a href="nepi/resources/linux/ns3/fdudptunnel.html">nepi.resources.linux.ns3.fdudptunnel</a></li>
+<li><a href="nepi/resources/linux/ns3/ns3client.html">nepi.resources.linux.ns3.ns3client</a></li>
+<li><a href="nepi/resources/linux/ns3/ns3dceapplication.html">nepi.resources.linux.ns3.ns3dceapplication</a></li>
+<li><a href="nepi/resources/linux/ns3/ns3pingdceapplication.html">nepi.resources.linux.ns3.ns3pingdceapplication</a></li>
+<li><a href="nepi/resources/linux/ns3/ns3simulation.html">nepi.resources.linux.ns3.ns3simulation</a></li>
+<li><a href="nepi/resources/linux/ns3/tuntapfdlink.html">nepi.resources.linux.ns3.tuntapfdlink</a></li>
+<li><a href="nepi/resources/linux/ping.html">nepi.resources.linux.ping</a></li>
+<li><a href="nepi/resources/linux/route.html">nepi.resources.linux.route</a></li>
+<li><a href="nepi/resources/linux/rpmfuncs.html">nepi.resources.linux.rpmfuncs</a></li>
+<li><a href="nepi/resources/linux/tap.html">nepi.resources.linux.tap</a></li>
+<li><a href="nepi/resources/linux/tcpdump.html">nepi.resources.linux.tcpdump</a></li>
+<li><a href="nepi/resources/linux/traceroute.html">nepi.resources.linux.traceroute</a></li>
+<li><a href="nepi/resources/linux/tun.html">nepi.resources.linux.tun</a></li>
+<li><a href="nepi/resources/linux/tunnel.html">nepi.resources.linux.tunnel</a></li>
+<li><a href="nepi/resources/linux/udptest.html">nepi.resources.linux.udptest</a></li>
+<li><a href="nepi/resources/linux/udptunnel.html">nepi.resources.linux.udptunnel</a></li>
+<li><a href="nepi/resources/netns/netnsapplication.html">nepi.resources.netns.netnsapplication</a></li>
+<li><a href="nepi/resources/netns/netnsbase.html">nepi.resources.netns.netnsbase</a></li>
+<li><a href="nepi/resources/netns/netnsclient.html">nepi.resources.netns.netnsclient</a></li>
+<li><a href="nepi/resources/netns/netnsemulation.html">nepi.resources.netns.netnsemulation</a></li>
+<li><a href="nepi/resources/netns/netnsinterface.html">nepi.resources.netns.netnsinterface</a></li>
+<li><a href="nepi/resources/netns/netnsipv4address.html">nepi.resources.netns.netnsipv4address</a></li>
+<li><a href="nepi/resources/netns/netnsnode.html">nepi.resources.netns.netnsnode</a></li>
+<li><a href="nepi/resources/netns/netnsnodeinterface.html">nepi.resources.netns.netnsnodeinterface</a></li>
+<li><a href="nepi/resources/netns/netnsroute.html">nepi.resources.netns.netnsroute</a></li>
+<li><a href="nepi/resources/netns/netnsserver.html">nepi.resources.netns.netnsserver</a></li>
+<li><a href="nepi/resources/netns/netnsswitch.html">nepi.resources.netns.netnsswitch</a></li>
+<li><a href="nepi/resources/netns/netnswrapper.html">nepi.resources.netns.netnswrapper</a></li>
+<li><a href="nepi/resources/netns/netnswrapper_debug.html">nepi.resources.netns.netnswrapper_debug</a></li>
+<li><a href="nepi/resources/ns3/classes/aarf_wifi_manager.html">nepi.resources.ns3.classes.aarf_wifi_manager</a></li>
+<li><a href="nepi/resources/ns3/classes/aarfcd_wifi_manager.html">nepi.resources.ns3.classes.aarfcd_wifi_manager</a></li>
+<li><a href="nepi/resources/ns3/classes/adhoc_wifi_mac.html">nepi.resources.ns3.classes.adhoc_wifi_mac</a></li>
+<li><a href="nepi/resources/ns3/classes/aloha_noack_net_device.html">nepi.resources.ns3.classes.aloha_noack_net_device</a></li>
+<li><a href="nepi/resources/ns3/classes/amrr_wifi_manager.html">nepi.resources.ns3.classes.amrr_wifi_manager</a></li>
+<li><a href="nepi/resources/ns3/classes/ap_wifi_mac.html">nepi.resources.ns3.classes.ap_wifi_mac</a></li>
+<li><a href="nepi/resources/ns3/classes/arf_wifi_manager.html">nepi.resources.ns3.classes.arf_wifi_manager</a></li>
+<li><a href="nepi/resources/ns3/classes/arp_l3protocol.html">nepi.resources.ns3.classes.arp_l3protocol</a></li>
+<li><a href="nepi/resources/ns3/classes/base_station_net_device.html">nepi.resources.ns3.classes.base_station_net_device</a></li>
+<li><a href="nepi/resources/ns3/classes/binary_error_model.html">nepi.resources.ns3.classes.binary_error_model</a></li>
+<li><a href="nepi/resources/ns3/classes/binary_error_sixlow_model.html">nepi.resources.ns3.classes.binary_error_sixlow_model</a></li>
+<li><a href="nepi/resources/ns3/classes/bridge_channel.html">nepi.resources.ns3.classes.bridge_channel</a></li>
+<li><a href="nepi/resources/ns3/classes/bridge_net_device.html">nepi.resources.ns3.classes.bridge_net_device</a></li>
+<li><a href="nepi/resources/ns3/classes/bulk_send_application.html">nepi.resources.ns3.classes.bulk_send_application</a></li>
+<li><a href="nepi/resources/ns3/classes/burst_error_model.html">nepi.resources.ns3.classes.burst_error_model</a></li>
+<li><a href="nepi/resources/ns3/classes/cara_wifi_manager.html">nepi.resources.ns3.classes.cara_wifi_manager</a></li>
+<li><a href="nepi/resources/ns3/classes/constant_acceleration_mobility_model.html">nepi.resources.ns3.classes.constant_acceleration_mobility_model</a></li>
+<li><a href="nepi/resources/ns3/classes/constant_position_mobility_model.html">nepi.resources.ns3.classes.constant_position_mobility_model</a></li>
+<li><a href="nepi/resources/ns3/classes/constant_rate_wifi_manager.html">nepi.resources.ns3.classes.constant_rate_wifi_manager</a></li>
+<li><a href="nepi/resources/ns3/classes/constant_speed_propagation_delay_model.html">nepi.resources.ns3.classes.constant_speed_propagation_delay_model</a></li>
+<li><a href="nepi/resources/ns3/classes/constant_velocity_mobility_model.html">nepi.resources.ns3.classes.constant_velocity_mobility_model</a></li>
+<li><a href="nepi/resources/ns3/classes/cost231propagation_loss_model.html">nepi.resources.ns3.classes.cost231propagation_loss_model</a></li>
+<li><a href="nepi/resources/ns3/classes/csma_channel.html">nepi.resources.ns3.classes.csma_channel</a></li>
+<li><a href="nepi/resources/ns3/classes/csma_net_device.html">nepi.resources.ns3.classes.csma_net_device</a></li>
+<li><a href="nepi/resources/ns3/classes/drop_tail_queue.html">nepi.resources.ns3.classes.drop_tail_queue</a></li>
+<li><a href="nepi/resources/ns3/classes/dsrdsr_routing.html">nepi.resources.ns3.classes.dsrdsr_routing</a></li>
+<li><a href="nepi/resources/ns3/classes/emu_net_device.html">nepi.resources.ns3.classes.emu_net_device</a></li>
+<li><a href="nepi/resources/ns3/classes/error_channel.html">nepi.resources.ns3.classes.error_channel</a></li>
+<li><a href="nepi/resources/ns3/classes/error_channel_sixlow.html">nepi.resources.ns3.classes.error_channel_sixlow</a></li>
+<li><a href="nepi/resources/ns3/classes/error_net_device.html">nepi.resources.ns3.classes.error_net_device</a></li>
+<li><a href="nepi/resources/ns3/classes/fd_net_device.html">nepi.resources.ns3.classes.fd_net_device</a></li>
+<li><a href="nepi/resources/ns3/classes/fixed_rss_loss_model.html">nepi.resources.ns3.classes.fixed_rss_loss_model</a></li>
+<li><a href="nepi/resources/ns3/classes/friis_propagation_loss_model.html">nepi.resources.ns3.classes.friis_propagation_loss_model</a></li>
+<li><a href="nepi/resources/ns3/classes/gauss_markov_mobility_model.html">nepi.resources.ns3.classes.gauss_markov_mobility_model</a></li>
+<li><a href="nepi/resources/ns3/classes/hierarchical_mobility_model.html">nepi.resources.ns3.classes.hierarchical_mobility_model</a></li>
+<li><a href="nepi/resources/ns3/classes/hybrid_buildings_propagation_loss_model.html">nepi.resources.ns3.classes.hybrid_buildings_propagation_loss_model</a></li>
+<li><a href="nepi/resources/ns3/classes/icmpv4l4protocol.html">nepi.resources.ns3.classes.icmpv4l4protocol</a></li>
+<li><a href="nepi/resources/ns3/classes/icmpv6l4protocol.html">nepi.resources.ns3.classes.icmpv6l4protocol</a></li>
+<li><a href="nepi/resources/ns3/classes/ideal_wifi_manager.html">nepi.resources.ns3.classes.ideal_wifi_manager</a></li>
+<li><a href="nepi/resources/ns3/classes/ipv4l3protocol.html">nepi.resources.ns3.classes.ipv4l3protocol</a></li>
+<li><a href="nepi/resources/ns3/classes/itu_r1411los_propagation_loss_model.html">nepi.resources.ns3.classes.itu_r1411los_propagation_loss_model</a></li>
+<li><a href="nepi/resources/ns3/classes/itu_r1411nlos_over_rooftop_propagation_loss_model.html">nepi.resources.ns3.classes.itu_r1411nlos_over_rooftop_propagation_loss_model</a></li>
+<li><a href="nepi/resources/ns3/classes/jakes_propagation_loss_model.html">nepi.resources.ns3.classes.jakes_propagation_loss_model</a></li>
+<li><a href="nepi/resources/ns3/classes/kun2600mhz_propagation_loss_model.html">nepi.resources.ns3.classes.kun2600mhz_propagation_loss_model</a></li>
+<li><a href="nepi/resources/ns3/classes/list_error_model.html">nepi.resources.ns3.classes.list_error_model</a></li>
+<li><a href="nepi/resources/ns3/classes/log_distance_propagation_loss_model.html">nepi.resources.ns3.classes.log_distance_propagation_loss_model</a></li>
+<li><a href="nepi/resources/ns3/classes/loopback_net_device.html">nepi.resources.ns3.classes.loopback_net_device</a></li>
+<li><a href="nepi/resources/ns3/classes/lr_wpan_net_device.html">nepi.resources.ns3.classes.lr_wpan_net_device</a></li>
+<li><a href="nepi/resources/ns3/classes/lte_enb_net_device.html">nepi.resources.ns3.classes.lte_enb_net_device</a></li>
+<li><a href="nepi/resources/ns3/classes/lte_simple_net_device.html">nepi.resources.ns3.classes.lte_simple_net_device</a></li>
+<li><a href="nepi/resources/ns3/classes/lte_ue_net_device.html">nepi.resources.ns3.classes.lte_ue_net_device</a></li>
+<li><a href="nepi/resources/ns3/classes/matrix_propagation_loss_model.html">nepi.resources.ns3.classes.matrix_propagation_loss_model</a></li>
+<li><a href="nepi/resources/ns3/classes/mesh_point_device.html">nepi.resources.ns3.classes.mesh_point_device</a></li>
+<li><a href="nepi/resources/ns3/classes/mesh_wifi_interface_mac.html">nepi.resources.ns3.classes.mesh_wifi_interface_mac</a></li>
+<li><a href="nepi/resources/ns3/classes/minstrel_wifi_manager.html">nepi.resources.ns3.classes.minstrel_wifi_manager</a></li>
+<li><a href="nepi/resources/ns3/classes/multi_model_spectrum_channel.html">nepi.resources.ns3.classes.multi_model_spectrum_channel</a></li>
+<li><a href="nepi/resources/ns3/classes/nakagami_propagation_loss_model.html">nepi.resources.ns3.classes.nakagami_propagation_loss_model</a></li>
+<li><a href="nepi/resources/ns3/classes/nist_error_rate_model.html">nepi.resources.ns3.classes.nist_error_rate_model</a></li>
+<li><a href="nepi/resources/ns3/classes/node.html">nepi.resources.ns3.classes.node</a></li>
+<li><a href="nepi/resources/ns3/classes/non_communicating_net_device.html">nepi.resources.ns3.classes.non_communicating_net_device</a></li>
+<li><a href="nepi/resources/ns3/classes/ocb_wifi_mac.html">nepi.resources.ns3.classes.ocb_wifi_mac</a></li>
+<li><a href="nepi/resources/ns3/classes/oh_buildings_propagation_loss_model.html">nepi.resources.ns3.classes.oh_buildings_propagation_loss_model</a></li>
+<li><a href="nepi/resources/ns3/classes/okumura_hata_propagation_loss_model.html">nepi.resources.ns3.classes.okumura_hata_propagation_loss_model</a></li>
+<li><a href="nepi/resources/ns3/classes/on_off_application.html">nepi.resources.ns3.classes.on_off_application</a></li>
+<li><a href="nepi/resources/ns3/classes/onoe_wifi_manager.html">nepi.resources.ns3.classes.onoe_wifi_manager</a></li>
+<li><a href="nepi/resources/ns3/classes/packet_sink.html">nepi.resources.ns3.classes.packet_sink</a></li>
+<li><a href="nepi/resources/ns3/classes/ping6.html">nepi.resources.ns3.classes.ping6</a></li>
+<li><a href="nepi/resources/ns3/classes/point_to_point_channel.html">nepi.resources.ns3.classes.point_to_point_channel</a></li>
+<li><a href="nepi/resources/ns3/classes/point_to_point_net_device.html">nepi.resources.ns3.classes.point_to_point_net_device</a></li>
+<li><a href="nepi/resources/ns3/classes/point_to_point_remote_channel.html">nepi.resources.ns3.classes.point_to_point_remote_channel</a></li>
+<li><a href="nepi/resources/ns3/classes/radvd.html">nepi.resources.ns3.classes.radvd</a></li>
+<li><a href="nepi/resources/ns3/classes/random_direction2d_mobility_model.html">nepi.resources.ns3.classes.random_direction2d_mobility_model</a></li>
+<li><a href="nepi/resources/ns3/classes/random_propagation_delay_model.html">nepi.resources.ns3.classes.random_propagation_delay_model</a></li>
+<li><a href="nepi/resources/ns3/classes/random_propagation_loss_model.html">nepi.resources.ns3.classes.random_propagation_loss_model</a></li>
+<li><a href="nepi/resources/ns3/classes/random_walk2d_mobility_model.html">nepi.resources.ns3.classes.random_walk2d_mobility_model</a></li>
+<li><a href="nepi/resources/ns3/classes/random_waypoint_mobility_model.html">nepi.resources.ns3.classes.random_waypoint_mobility_model</a></li>
+<li><a href="nepi/resources/ns3/classes/range_propagation_loss_model.html">nepi.resources.ns3.classes.range_propagation_loss_model</a></li>
+<li><a href="nepi/resources/ns3/classes/rate_error_model.html">nepi.resources.ns3.classes.rate_error_model</a></li>
+<li><a href="nepi/resources/ns3/classes/receive_list_error_model.html">nepi.resources.ns3.classes.receive_list_error_model</a></li>
+<li><a href="nepi/resources/ns3/classes/red_queue.html">nepi.resources.ns3.classes.red_queue</a></li>
+<li><a href="nepi/resources/ns3/classes/rraa_wifi_manager.html">nepi.resources.ns3.classes.rraa_wifi_manager</a></li>
+<li><a href="nepi/resources/ns3/classes/simple_channel.html">nepi.resources.ns3.classes.simple_channel</a></li>
+<li><a href="nepi/resources/ns3/classes/simple_net_device.html">nepi.resources.ns3.classes.simple_net_device</a></li>
+<li><a href="nepi/resources/ns3/classes/single_model_spectrum_channel.html">nepi.resources.ns3.classes.single_model_spectrum_channel</a></li>
+<li><a href="nepi/resources/ns3/classes/six_low_pan_net_device.html">nepi.resources.ns3.classes.six_low_pan_net_device</a></li>
+<li><a href="nepi/resources/ns3/classes/sta_wifi_mac.html">nepi.resources.ns3.classes.sta_wifi_mac</a></li>
+<li><a href="nepi/resources/ns3/classes/steady_state_random_waypoint_mobility_model.html">nepi.resources.ns3.classes.steady_state_random_waypoint_mobility_model</a></li>
+<li><a href="nepi/resources/ns3/classes/subscriber_station_net_device.html">nepi.resources.ns3.classes.subscriber_station_net_device</a></li>
+<li><a href="nepi/resources/ns3/classes/tap_bridge.html">nepi.resources.ns3.classes.tap_bridge</a></li>
+<li><a href="nepi/resources/ns3/classes/tcp_l4protocol.html">nepi.resources.ns3.classes.tcp_l4protocol</a></li>
+<li><a href="nepi/resources/ns3/classes/three_log_distance_propagation_loss_model.html">nepi.resources.ns3.classes.three_log_distance_propagation_loss_model</a></li>
+<li><a href="nepi/resources/ns3/classes/two_ray_ground_propagation_loss_model.html">nepi.resources.ns3.classes.two_ray_ground_propagation_loss_model</a></li>
+<li><a href="nepi/resources/ns3/classes/uan_channel.html">nepi.resources.ns3.classes.uan_channel</a></li>
+<li><a href="nepi/resources/ns3/classes/udp_client.html">nepi.resources.ns3.classes.udp_client</a></li>
+<li><a href="nepi/resources/ns3/classes/udp_echo_client.html">nepi.resources.ns3.classes.udp_echo_client</a></li>
+<li><a href="nepi/resources/ns3/classes/udp_echo_server.html">nepi.resources.ns3.classes.udp_echo_server</a></li>
+<li><a href="nepi/resources/ns3/classes/udp_l4protocol.html">nepi.resources.ns3.classes.udp_l4protocol</a></li>
+<li><a href="nepi/resources/ns3/classes/udp_server.html">nepi.resources.ns3.classes.udp_server</a></li>
+<li><a href="nepi/resources/ns3/classes/udp_trace_client.html">nepi.resources.ns3.classes.udp_trace_client</a></li>
+<li><a href="nepi/resources/ns3/classes/v4ping.html">nepi.resources.ns3.classes.v4ping</a></li>
+<li><a href="nepi/resources/ns3/classes/virtual_net_device.html">nepi.resources.ns3.classes.virtual_net_device</a></li>
+<li><a href="nepi/resources/ns3/classes/waypoint_mobility_model.html">nepi.resources.ns3.classes.waypoint_mobility_model</a></li>
+<li><a href="nepi/resources/ns3/classes/wifi_net_device.html">nepi.resources.ns3.classes.wifi_net_device</a></li>
+<li><a href="nepi/resources/ns3/classes/yans_error_rate_model.html">nepi.resources.ns3.classes.yans_error_rate_model</a></li>
+<li><a href="nepi/resources/ns3/classes/yans_wifi_channel.html">nepi.resources.ns3.classes.yans_wifi_channel</a></li>
+<li><a href="nepi/resources/ns3/classes/yans_wifi_phy.html">nepi.resources.ns3.classes.yans_wifi_phy</a></li>
+<li><a href="nepi/resources/ns3/ns3application.html">nepi.resources.ns3.ns3application</a></li>
+<li><a href="nepi/resources/ns3/ns3arpl3protocol.html">nepi.resources.ns3.ns3arpl3protocol</a></li>
+<li><a href="nepi/resources/ns3/ns3base.html">nepi.resources.ns3.ns3base</a></li>
+<li><a href="nepi/resources/ns3/ns3ccndceapplication.html">nepi.resources.ns3.ns3ccndceapplication</a></li>
+<li><a href="nepi/resources/ns3/ns3channel.html">nepi.resources.ns3.ns3channel</a></li>
+<li><a href="nepi/resources/ns3/ns3client.html">nepi.resources.ns3.ns3client</a></li>
+<li><a href="nepi/resources/ns3/ns3dceapplication.html">nepi.resources.ns3.ns3dceapplication</a></li>
+<li><a href="nepi/resources/ns3/ns3dcehelper.html">nepi.resources.ns3.ns3dcehelper</a></li>
+<li><a href="nepi/resources/ns3/ns3errormodel.html">nepi.resources.ns3.ns3errormodel</a></li>
+<li><a href="nepi/resources/ns3/ns3errorratemodel.html">nepi.resources.ns3.ns3errorratemodel</a></li>
+<li><a href="nepi/resources/ns3/ns3fdnetdevice.html">nepi.resources.ns3.ns3fdnetdevice</a></li>
+<li><a href="nepi/resources/ns3/ns3icmpv4l4protocol.html">nepi.resources.ns3.ns3icmpv4l4protocol</a></li>
+<li><a href="nepi/resources/ns3/ns3ipv4l3protocol.html">nepi.resources.ns3.ns3ipv4l3protocol</a></li>
+<li><a href="nepi/resources/ns3/ns3mobilitymodel.html">nepi.resources.ns3.ns3mobilitymodel</a></li>
+<li><a href="nepi/resources/ns3/ns3netdevice.html">nepi.resources.ns3.ns3netdevice</a></li>
+<li><a href="nepi/resources/ns3/ns3node.html">nepi.resources.ns3.ns3node</a></li>
+<li><a href="nepi/resources/ns3/ns3pipechanel.html">nepi.resources.ns3.ns3pipechanel</a></li>
+<li><a href="nepi/resources/ns3/ns3propagationdelaymodel.html">nepi.resources.ns3.ns3propagationdelaymodel</a></li>
+<li><a href="nepi/resources/ns3/ns3propagationlossmodel.html">nepi.resources.ns3.ns3propagationlossmodel</a></li>
+<li><a href="nepi/resources/ns3/ns3queue.html">nepi.resources.ns3.ns3queue</a></li>
+<li><a href="nepi/resources/ns3/ns3route.html">nepi.resources.ns3.ns3route</a></li>
+<li><a href="nepi/resources/ns3/ns3server.html">nepi.resources.ns3.ns3server</a></li>
+<li><a href="nepi/resources/ns3/ns3simulation.html">nepi.resources.ns3.ns3simulation</a></li>
+<li><a href="nepi/resources/ns3/ns3wifichannel.html">nepi.resources.ns3.ns3wifichannel</a></li>
+<li><a href="nepi/resources/ns3/ns3wifimac.html">nepi.resources.ns3.ns3wifimac</a></li>
+<li><a href="nepi/resources/ns3/ns3wifinetdevice.html">nepi.resources.ns3.ns3wifinetdevice</a></li>
+<li><a href="nepi/resources/ns3/ns3wifiphy.html">nepi.resources.ns3.ns3wifiphy</a></li>
+<li><a href="nepi/resources/ns3/ns3wifiremotestationmanager.html">nepi.resources.ns3.ns3wifiremotestationmanager</a></li>
+<li><a href="nepi/resources/ns3/ns3wrapper.html">nepi.resources.ns3.ns3wrapper</a></li>
+<li><a href="nepi/resources/ns3/ns3wrapper_debug.html">nepi.resources.ns3.ns3wrapper_debug</a></li>
+<li><a href="nepi/resources/ns3/resource_manager_generator.html">nepi.resources.ns3.resource_manager_generator</a></li>
+<li><a href="nepi/resources/omf/application.html">nepi.resources.omf.application</a></li>
+<li><a href="nepi/resources/omf/channel.html">nepi.resources.omf.channel</a></li>
+<li><a href="nepi/resources/omf/interface.html">nepi.resources.omf.interface</a></li>
+<li><a href="nepi/resources/omf/messages_5_4.html">nepi.resources.omf.messages_5_4</a></li>
+<li><a href="nepi/resources/omf/messages_6.html">nepi.resources.omf.messages_6</a></li>
+<li><a href="nepi/resources/omf/node.html">nepi.resources.omf.node</a></li>
+<li><a href="nepi/resources/omf/omf5_api.html">nepi.resources.omf.omf5_api</a></li>
+<li><a href="nepi/resources/omf/omf6_api.html">nepi.resources.omf.omf6_api</a></li>
+<li><a href="nepi/resources/omf/omf6_parser.html">nepi.resources.omf.omf6_parser</a></li>
+<li><a href="nepi/resources/omf/omf_api_factory.html">nepi.resources.omf.omf_api_factory</a></li>
+<li><a href="nepi/resources/omf/omf_client.html">nepi.resources.omf.omf_client</a></li>
+<li><a href="nepi/resources/omf/omf_resource.html">nepi.resources.omf.omf_resource</a></li>
+<li><a href="nepi/resources/omf/wilabt_node.html">nepi.resources.omf.wilabt_node</a></li>
+<li><a href="nepi/resources/planetlab/node.html">nepi.resources.planetlab.node</a></li>
+<li><a href="nepi/resources/planetlab/ns3/fdudptunnel.html">nepi.resources.planetlab.ns3.fdudptunnel</a></li>
+<li><a href="nepi/resources/planetlab/ns3/tuntapfdlink.html">nepi.resources.planetlab.ns3.tuntapfdlink</a></li>
+<li><a href="nepi/resources/planetlab/openvswitch/ovs.html">nepi.resources.planetlab.openvswitch.ovs</a></li>
+<li><a href="nepi/resources/planetlab/openvswitch/ovsport.html">nepi.resources.planetlab.openvswitch.ovsport</a></li>
+<li><a href="nepi/resources/planetlab/plcapi.html">nepi.resources.planetlab.plcapi</a></li>
+<li><a href="nepi/resources/planetlab/sfa_node.html">nepi.resources.planetlab.sfa_node</a></li>
+<li><a href="nepi/resources/planetlab/tap.html">nepi.resources.planetlab.tap</a></li>
+<li><a href="nepi/resources/planetlab/tun.html">nepi.resources.planetlab.tun</a></li>
+<li><a href="nepi/resources/planetlab/vroute.html">nepi.resources.planetlab.vroute</a></li>
+<li><a href="nepi/util/environ.html">nepi.util.environ</a></li>
+<li><a href="nepi/util/execfuncs.html">nepi.util.execfuncs</a></li>
+<li><a href="nepi/util/guid.html">nepi.util.guid</a></li>
+<li><a href="nepi/util/logger.html">nepi.util.logger</a></li>
+<li><a href="nepi/util/manifoldapi.html">nepi.util.manifoldapi</a></li>
+<li><a href="nepi/util/netgraph.html">nepi.util.netgraph</a></li>
+<li><a href="nepi/util/parallel.html">nepi.util.parallel</a></li>
+<li><a href="nepi/util/parsers/xml_parser.html">nepi.util.parsers.xml_parser</a></li>
+<li><a href="nepi/util/plotter.html">nepi.util.plotter</a></li>
+<li><a href="nepi/util/rmatcher.html">nepi.util.rmatcher</a></li>
+<li><a href="nepi/util/serializer.html">nepi.util.serializer</a></li>
+<li><a href="nepi/util/sfaapi.html">nepi.util.sfaapi</a></li>
+<li><a href="nepi/util/sfarspec_proc.html">nepi.util.sfarspec_proc</a></li>
+<li><a href="nepi/util/sshfuncs.html">nepi.util.sshfuncs</a></li>
+<li><a href="nepi/util/statfuncs.html">nepi.util.statfuncs</a></li>
+<li><a href="nepi/util/timefuncs.html">nepi.util.timefuncs</a></li>
+</ul>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/data/processing/ccn/parser.html b/doc/sphinx/_build/html/_modules/nepi/data/processing/ccn/parser.html
new file mode 100644 (file)
index 0000000..57ea0d1
--- /dev/null
@@ -0,0 +1,505 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.data.processing.ccn.parser &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.data.processing.ccn.parser</h1><div class="highlight"><pre>
+<span class="c">#!/usr/bin/env python</span>
+
+<span class="c">###############################################################################</span>
+<span class="c">#</span>
+<span class="c">#    CCNX benchmark</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+<span class="c">#</span>
+<span class="c">###############################################################################</span>
+
+<span class="c">#</span>
+<span class="c"># This library contains functions to parse (CCNx) ccnd logs.</span>
+<span class="c">#</span>
+<span class="c"># Results from experiments must be stored in a directory</span>
+<span class="c"># named with the experiment run id.</span>
+<span class="c"># ccnd logs are stored in .log files in a subdirectory per node.</span>
+<span class="c"># The following diagram exemplifies the experiment result directory</span>
+<span class="c"># structure (nidi is the unique identifier assigned to node i):</span>
+<span class="c">#</span>
+<span class="c">#    run_id</span>
+<span class="c">#               \   nid1</span>
+<span class="c">#                        \ nid2.log</span>
+<span class="c">#               \   nid2</span>
+<span class="c">#                        \ nid1.log</span>
+<span class="c">#               \   nid3</span>
+<span class="c">#                        \ nid3.log</span>
+<span class="c">#</span>
+
+<span class="kn">import</span> <span class="nn">collections</span>
+<span class="kn">import</span> <span class="nn">functools</span>
+<span class="kn">import</span> <span class="nn">networkx</span>
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">pickle</span>
+<span class="kn">import</span> <span class="nn">tempfile</span>
+
+<span class="kn">from</span> <span class="nn">nepi.util.timefuncs</span> <span class="kn">import</span> <span class="n">compute_delay_ms</span>
+<span class="kn">from</span> <span class="nn">nepi.util.statfuncs</span> <span class="kn">import</span> <span class="n">compute_mean</span>
+<span class="kn">import</span> <span class="nn">nepi.data.processing.ping.parser</span> <span class="kn">as</span> <span class="nn">ping_parser</span>
+
+<div class="viewcode-block" id="is_control"><a class="viewcode-back" href="../../../../../_layout/nepi.data.processing.ccn.html#nepi.data.processing.ccn.parser.is_control">[docs]</a><span class="k">def</span> <span class="nf">is_control</span><span class="p">(</span><span class="n">content_name</span><span class="p">):</span>
+    <span class="k">return</span> <span class="n">content_name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&quot;ccnx:/%C1&quot;</span><span class="p">)</span> <span class="ow">or</span> \
+            <span class="n">content_name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&quot;ccnx:/ccnx&quot;</span><span class="p">)</span> <span class="ow">or</span> \
+            <span class="n">content_name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&quot;ccnx:/...&quot;</span><span class="p">)</span>
+
+</div>
+<div class="viewcode-block" id="parse_file"><a class="viewcode-back" href="../../../../../_layout/nepi.data.processing.ccn.html#nepi.data.processing.ccn.parser.parse_file">[docs]</a><span class="k">def</span> <span class="nf">parse_file</span><span class="p">(</span><span class="n">filename</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot; Parses message information from ccnd log files</span>
+
+<span class="sd">        filename: path to ccndlog file</span>
+
+<span class="sd">    &quot;&quot;&quot;</span>
+
+    <span class="n">faces</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
+    <span class="n">sep</span> <span class="o">=</span> <span class="s">&quot; &quot;</span>
+
+    <span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="s">&quot;r&quot;</span><span class="p">)</span>
+
+    <span class="n">data</span> <span class="o">=</span> <span class="p">[]</span>
+
+    <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">f</span><span class="p">:</span>
+        <span class="n">cols</span> <span class="o">=</span>  <span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">sep</span><span class="p">)</span>
+
+        <span class="c"># CCN_PEEK</span>
+        <span class="c"># MESSAGE interest_from</span>
+        <span class="c"># 1374181938.808523 ccnd[9245]: debug.4352 interest_from 6 ccnx:/test/bunny.ts (23 bytes,sim=0CDCC1D7)</span>
+        <span class="c">#</span>
+        <span class="c"># MESSAGE interest_to</span>
+        <span class="c"># 1374181938.812750 ccnd[9245]: debug.3502 interest_to 5 ccnx:/test/bunny.ts (39 bytes,i=2844,sim=0CDCC1D7)</span>
+        <span class="c">#</span>
+        <span class="c"># MESSAGE CONTENT FROM</span>
+        <span class="c"># 1374181938.868682 ccnd[9245]: debug.4643 content_from 5 ccnx:/test/bunny.ts/%FD%05%1E%85%8FVw/%00/%9E%3D%01%D9%3Cn%95%2BvZ%8</span>
+        <span class="c">#</span>
+        <span class="c"># MESSAGE CONTENT_TO</span>
+        <span class="c"># 1374181938.868772 ccnd[9245]: debug.1619 content_to 6 ccnx:/test/bunny.ts/%FD%05%1E%85%8FVw/%00/%9E%3D%01%D9%3Cn%95%2BvZ%8</span>
+        <span class="c">#</span>
+        <span class="c"># 1375596708.222304 ccnd[9758]: debug.3692 interest_expiry ccnx:/test/bunny.ts/%FD%05%1E%86%B1GS/%00%0A%F7 (44 bytes,c=0:1,i=2819,sim=49FA8048)</span>
+
+        <span class="c"># External face creation</span>
+        <span class="c"># 1374181452.965961 ccnd[9245]: accepted datagram client id=5 (flags=0x40012) 204.85.191.10 port 9695</span>
+
+        <span class="k">if</span> <span class="n">line</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&quot;accepted datagram client&quot;</span><span class="p">)</span> <span class="o">&gt;</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
+            <span class="n">face_id</span> <span class="o">=</span> <span class="p">(</span><span class="n">cols</span><span class="p">[</span><span class="mi">5</span><span class="p">])</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;id=&quot;</span><span class="p">,</span><span class="s">&#39;&#39;</span><span class="p">)</span>
+            <span class="n">ip</span> <span class="o">=</span> <span class="n">cols</span><span class="p">[</span><span class="mi">7</span><span class="p">]</span> 
+            <span class="n">port</span> <span class="o">=</span> <span class="n">cols</span><span class="p">[</span><span class="mi">9</span><span class="p">]</span>
+            <span class="n">faces</span><span class="p">[</span><span class="n">face_id</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">ip</span><span class="p">,</span> <span class="n">port</span><span class="p">)</span>
+            <span class="k">continue</span>
+
+        <span class="c"># 1374181452.985296 ccnd[9245]: releasing face id 4 (slot 4)</span>
+        <span class="k">if</span> <span class="n">line</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&quot;releasing face id&quot;</span><span class="p">)</span> <span class="o">&gt;</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
+            <span class="n">face_id</span> <span class="o">=</span> <span class="n">cols</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span>
+            <span class="k">if</span> <span class="n">face_id</span> <span class="ow">in</span> <span class="n">faces</span><span class="p">:</span>
+                <span class="k">del</span> <span class="n">faces</span><span class="p">[</span><span class="n">face_id</span><span class="p">]</span>
+            <span class="k">continue</span>
+
+        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">6</span><span class="p">:</span>
+            <span class="k">continue</span>
+
+        <span class="n">timestamp</span> <span class="o">=</span> <span class="n">cols</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+        <span class="n">message_type</span> <span class="o">=</span> <span class="n">cols</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span>
+
+        <span class="k">if</span> <span class="n">message_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&quot;interest_from&quot;</span><span class="p">,</span> <span class="s">&quot;interest_to&quot;</span><span class="p">,</span> <span class="s">&quot;content_from&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;content_to&quot;</span><span class="p">,</span> <span class="s">&quot;interest_dupnonce&quot;</span><span class="p">,</span> <span class="s">&quot;interest_expiry&quot;</span><span class="p">]:</span>
+            <span class="k">continue</span>
+
+        <span class="n">face_id</span> <span class="o">=</span> <span class="n">cols</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span> 
+        <span class="n">content_name</span> <span class="o">=</span> <span class="n">cols</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span>
+
+        <span class="c"># Interest Nonce ? -&gt; 412A74-0844-0008-50AA-F6EAD4</span>
+        <span class="n">nonce</span> <span class="o">=</span> <span class="s">&quot;&quot;</span>
+        <span class="k">if</span> <span class="n">message_type</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&quot;interest_from&quot;</span><span class="p">,</span> <span class="s">&quot;interest_to&quot;</span><span class="p">,</span> <span class="s">&quot;interest_dupnonce&quot;</span><span class="p">]:</span>
+            <span class="n">last</span> <span class="o">=</span> <span class="n">cols</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
+            <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">last</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;-&quot;</span><span class="p">))</span> <span class="o">==</span> <span class="mi">5</span><span class="p">:</span>
+                <span class="n">nonce</span> <span class="o">=</span> <span class="n">last</span>
+
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">size</span> <span class="o">=</span> <span class="nb">int</span><span class="p">((</span><span class="n">cols</span><span class="p">[</span><span class="mi">6</span><span class="p">])</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;(&#39;</span><span class="p">,</span><span class="s">&#39;&#39;</span><span class="p">))</span>
+        <span class="k">except</span><span class="p">:</span>
+            <span class="k">print</span> <span class="s">&quot;interest_expiry without face id!&quot;</span><span class="p">,</span> <span class="n">line</span>
+            <span class="k">continue</span>
+
+        <span class="c"># If no external IP address was identified for this face</span>
+        <span class="c"># asume it is a local face</span>
+        <span class="n">peer</span> <span class="o">=</span> <span class="s">&quot;localhost&quot;</span>
+
+        <span class="k">if</span> <span class="n">face_id</span> <span class="ow">in</span> <span class="n">faces</span><span class="p">:</span>
+            <span class="n">peer</span><span class="p">,</span> <span class="n">port</span> <span class="o">=</span> <span class="n">faces</span><span class="p">[</span><span class="n">face_id</span><span class="p">]</span>
+
+        <span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">content_name</span><span class="p">,</span> <span class="n">timestamp</span><span class="p">,</span> <span class="n">message_type</span><span class="p">,</span> <span class="n">peer</span><span class="p">,</span> <span class="n">face_id</span><span class="p">,</span> 
+            <span class="n">size</span><span class="p">,</span> <span class="n">nonce</span><span class="p">,</span> <span class="n">line</span><span class="p">))</span>
+
+    <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+    <span class="k">return</span> <span class="n">data</span>
+</div>
+<div class="viewcode-block" id="dump_content_history"><a class="viewcode-back" href="../../../../../_layout/nepi.data.processing.ccn.html#nepi.data.processing.ccn.parser.dump_content_history">[docs]</a><span class="k">def</span> <span class="nf">dump_content_history</span><span class="p">(</span><span class="n">content_history</span><span class="p">):</span>
+    <span class="n">f</span> <span class="o">=</span> <span class="n">tempfile</span><span class="o">.</span><span class="n">NamedTemporaryFile</span><span class="p">(</span><span class="n">delete</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
+    <span class="n">pickle</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">content_history</span><span class="p">,</span> <span class="n">f</span><span class="p">)</span>
+    <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+    <span class="k">return</span> <span class="n">f</span><span class="o">.</span><span class="n">name</span>
+</div>
+<div class="viewcode-block" id="load_content_history"><a class="viewcode-back" href="../../../../../_layout/nepi.data.processing.ccn.html#nepi.data.processing.ccn.parser.load_content_history">[docs]</a><span class="k">def</span> <span class="nf">load_content_history</span><span class="p">(</span><span class="n">fname</span><span class="p">):</span>
+    <span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">fname</span><span class="p">,</span> <span class="s">&quot;r&quot;</span><span class="p">)</span>
+    <span class="n">content_history</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
+    <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+    <span class="n">os</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">fname</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">content_history</span>
+</div>
+<div class="viewcode-block" id="annotate_cn_node"><a class="viewcode-back" href="../../../../../_layout/nepi.data.processing.ccn.html#nepi.data.processing.ccn.parser.annotate_cn_node">[docs]</a><span class="k">def</span> <span class="nf">annotate_cn_node</span><span class="p">(</span><span class="n">graph</span><span class="p">,</span> <span class="n">nid</span><span class="p">,</span> <span class="n">ips2nid</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">content_history</span><span class="p">):</span>
+    <span class="k">for</span> <span class="p">(</span><span class="n">content_name</span><span class="p">,</span> <span class="n">timestamp</span><span class="p">,</span> <span class="n">message_type</span><span class="p">,</span> <span class="n">peer</span><span class="p">,</span> <span class="n">face_id</span><span class="p">,</span> 
+            <span class="n">size</span><span class="p">,</span> <span class="n">nonce</span><span class="p">,</span> <span class="n">line</span><span class="p">)</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
+
+        <span class="c"># Ignore control messages for the time being</span>
+        <span class="k">if</span> <span class="n">is_control</span><span class="p">(</span><span class="n">content_name</span><span class="p">):</span>
+            <span class="k">continue</span>
+
+        <span class="k">if</span> <span class="n">message_type</span> <span class="o">==</span> <span class="s">&quot;interest_from&quot;</span> <span class="ow">and</span> \
+                <span class="n">peer</span> <span class="o">==</span> <span class="s">&quot;localhost&quot;</span><span class="p">:</span>
+            <span class="n">graph</span><span class="o">.</span><span class="n">node</span><span class="p">[</span><span class="n">nid</span><span class="p">][</span><span class="s">&quot;ccn_consumer&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">True</span>
+        <span class="k">elif</span> <span class="n">message_type</span> <span class="o">==</span> <span class="s">&quot;content_from&quot;</span> <span class="ow">and</span> \
+                <span class="n">peer</span> <span class="o">==</span> <span class="s">&quot;localhost&quot;</span><span class="p">:</span>
+            <span class="n">graph</span><span class="o">.</span><span class="n">node</span><span class="p">[</span><span class="n">nid</span><span class="p">][</span><span class="s">&quot;ccn_producer&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">True</span>
+
+        <span class="c"># Ignore local messages for the time being. </span>
+        <span class="c"># They could later be used to calculate the processing times</span>
+        <span class="c"># of messages.</span>
+        <span class="k">if</span> <span class="n">peer</span> <span class="o">==</span> <span class="s">&quot;localhost&quot;</span><span class="p">:</span>
+            <span class="k">continue</span>
+
+        <span class="c"># remove digest</span>
+        <span class="k">if</span> <span class="n">message_type</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&quot;content_from&quot;</span><span class="p">,</span> <span class="s">&quot;content_to&quot;</span><span class="p">]:</span>
+            <span class="n">content_name</span> <span class="o">=</span> <span class="s">&quot;/&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">content_name</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;/&quot;</span><span class="p">)[:</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span>
+           
+        <span class="k">if</span> <span class="n">content_name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">content_history</span><span class="p">:</span>
+            <span class="n">content_history</span><span class="p">[</span><span class="n">content_name</span><span class="p">]</span> <span class="o">=</span> <span class="nb">list</span><span class="p">()</span>
+      
+        <span class="n">peernid</span> <span class="o">=</span> <span class="n">ips2nid</span><span class="p">[</span><span class="n">peer</span><span class="p">]</span>
+        <span class="n">graph</span><span class="o">.</span><span class="n">add_edge</span><span class="p">(</span><span class="n">nid</span><span class="p">,</span> <span class="n">peernid</span><span class="p">)</span>
+
+        <span class="n">content_history</span><span class="p">[</span><span class="n">content_name</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">timestamp</span><span class="p">,</span> <span class="n">message_type</span><span class="p">,</span> <span class="n">nid</span><span class="p">,</span> 
+            <span class="n">peernid</span><span class="p">,</span> <span class="n">nonce</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">line</span><span class="p">))</span>
+</div>
+<div class="viewcode-block" id="annotate_cn_graph"><a class="viewcode-back" href="../../../../../_layout/nepi.data.processing.ccn.html#nepi.data.processing.ccn.parser.annotate_cn_graph">[docs]</a><span class="k">def</span> <span class="nf">annotate_cn_graph</span><span class="p">(</span><span class="n">logs_dir</span><span class="p">,</span> <span class="n">graph</span><span class="p">,</span> <span class="n">parse_ping_logs</span> <span class="o">=</span> <span class="bp">False</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot; Adds CCN content history for each node in the topology graph.</span>
+
+<span class="sd">    &quot;&quot;&quot;</span>
+    
+    <span class="c"># Make a copy of the graph to ensure integrity</span>
+    <span class="n">graph</span> <span class="o">=</span> <span class="n">graph</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+
+    <span class="n">ips2nid</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
+
+    <span class="k">for</span> <span class="n">nid</span> <span class="ow">in</span> <span class="n">graph</span><span class="o">.</span><span class="n">nodes</span><span class="p">():</span>
+        <span class="n">ips</span> <span class="o">=</span> <span class="n">graph</span><span class="o">.</span><span class="n">node</span><span class="p">[</span><span class="n">nid</span><span class="p">][</span><span class="s">&quot;ips&quot;</span><span class="p">]</span>
+        <span class="k">for</span> <span class="n">ip</span> <span class="ow">in</span> <span class="n">ips</span><span class="p">:</span>
+            <span class="n">ips2nid</span><span class="p">[</span><span class="n">ip</span><span class="p">]</span> <span class="o">=</span> <span class="n">nid</span>
+
+    <span class="n">found_files</span> <span class="o">=</span> <span class="bp">False</span>
+
+    <span class="c"># Now walk through the ccnd logs...</span>
+    <span class="k">for</span> <span class="n">dirpath</span><span class="p">,</span> <span class="n">dnames</span><span class="p">,</span> <span class="n">fnames</span> <span class="ow">in</span> <span class="n">os</span><span class="o">.</span><span class="n">walk</span><span class="p">(</span><span class="n">logs_dir</span><span class="p">):</span>
+        <span class="c"># continue if we are not at the leaf level (if there are subdirectories)</span>
+        <span class="k">if</span> <span class="n">dnames</span><span class="p">:</span> 
+            <span class="k">continue</span>
+        
+        <span class="c"># Each dirpath correspond to a different node</span>
+        <span class="n">nid</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">dirpath</span><span class="p">)</span>
+
+        <span class="c"># Cast to numeric nid if necessary</span>
+        <span class="k">if</span> <span class="nb">int</span><span class="p">(</span><span class="n">nid</span><span class="p">)</span> <span class="ow">in</span> <span class="n">graph</span><span class="o">.</span><span class="n">nodes</span><span class="p">():</span>
+            <span class="n">nid</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">nid</span><span class="p">)</span>
+    
+        <span class="n">content_history</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
+
+        <span class="k">for</span> <span class="n">fname</span> <span class="ow">in</span> <span class="n">fnames</span><span class="p">:</span>
+            <span class="k">if</span> <span class="n">fname</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s">&quot;.log&quot;</span><span class="p">):</span>
+                <span class="n">found_files</span> <span class="o">=</span> <span class="bp">True</span>
+                <span class="n">filename</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">dirpath</span><span class="p">,</span> <span class="n">fname</span><span class="p">)</span>
+                <span class="n">data</span> <span class="o">=</span> <span class="n">parse_file</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span>
+                <span class="n">annotate_cn_node</span><span class="p">(</span><span class="n">graph</span><span class="p">,</span> <span class="n">nid</span><span class="p">,</span> <span class="n">ips2nid</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">content_history</span><span class="p">)</span>
+
+        <span class="c"># Avoid storing everything in memory, instead dump to a file</span>
+        <span class="c"># and reference the file</span>
+        <span class="n">fname</span> <span class="o">=</span> <span class="n">dump_content_history</span><span class="p">(</span><span class="n">content_history</span><span class="p">)</span>
+        <span class="n">graph</span><span class="o">.</span><span class="n">node</span><span class="p">[</span><span class="n">nid</span><span class="p">][</span><span class="s">&quot;history&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">fname</span>
+
+    <span class="k">if</span> <span class="ow">not</span> <span class="n">found_files</span><span class="p">:</span>
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;No CCND output files were found to parse at </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="n">logs_dir</span>
+        <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+    <span class="k">if</span> <span class="n">parse_ping_logs</span><span class="p">:</span>
+        <span class="n">ping_parser</span><span class="o">.</span><span class="n">annotate_cn_graph</span><span class="p">(</span><span class="n">logs_dir</span><span class="p">,</span> <span class="n">graph</span><span class="p">)</span>
+
+    <span class="k">return</span> <span class="n">graph</span>
+</div>
+<div class="viewcode-block" id="ccn_producers"><a class="viewcode-back" href="../../../../../_layout/nepi.data.processing.ccn.html#nepi.data.processing.ccn.parser.ccn_producers">[docs]</a><span class="k">def</span> <span class="nf">ccn_producers</span><span class="p">(</span><span class="n">graph</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot; Returns the nodes that are content providers &quot;&quot;&quot;</span>
+    <span class="k">return</span> <span class="p">[</span><span class="n">nid</span> <span class="k">for</span> <span class="n">nid</span> <span class="ow">in</span> <span class="n">graph</span><span class="o">.</span><span class="n">nodes</span><span class="p">()</span> \
+            <span class="k">if</span> <span class="n">graph</span><span class="o">.</span><span class="n">node</span><span class="p">[</span><span class="n">nid</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ccn_producer&quot;</span><span class="p">)]</span>
+</div>
+<div class="viewcode-block" id="ccn_consumers"><a class="viewcode-back" href="../../../../../_layout/nepi.data.processing.ccn.html#nepi.data.processing.ccn.parser.ccn_consumers">[docs]</a><span class="k">def</span> <span class="nf">ccn_consumers</span><span class="p">(</span><span class="n">graph</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot; Returns the nodes that are content consumers &quot;&quot;&quot;</span>
+    <span class="k">return</span> <span class="p">[</span><span class="n">nid</span> <span class="k">for</span> <span class="n">nid</span> <span class="ow">in</span> <span class="n">graph</span><span class="o">.</span><span class="n">nodes</span><span class="p">()</span> \
+            <span class="k">if</span> <span class="n">graph</span><span class="o">.</span><span class="n">node</span><span class="p">[</span><span class="n">nid</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ccn_consumer&quot;</span><span class="p">)]</span>
+</div>
+<div class="viewcode-block" id="process_content_history"><a class="viewcode-back" href="../../../../../_layout/nepi.data.processing.ccn.html#nepi.data.processing.ccn.parser.process_content_history">[docs]</a><span class="k">def</span> <span class="nf">process_content_history</span><span class="p">(</span><span class="n">graph</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot; Compute CCN message counts and aggregates content historical </span>
+<span class="sd">    information in the content_names dictionary </span>
+<span class="sd">    </span>
+<span class="sd">    &quot;&quot;&quot;</span>
+
+    <span class="c">## Assume single source</span>
+    <span class="n">source</span> <span class="o">=</span> <span class="n">ccn_consumers</span><span class="p">(</span><span class="n">graph</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+
+    <span class="n">interest_expiry_count</span> <span class="o">=</span> <span class="mi">0</span>
+    <span class="n">interest_dupnonce_count</span> <span class="o">=</span> <span class="mi">0</span>
+    <span class="n">interest_count</span> <span class="o">=</span> <span class="mi">0</span>
+    <span class="n">content_count</span> <span class="o">=</span> <span class="mi">0</span>
+    <span class="n">content_names</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
+
+    <span class="c"># Collect information about exchanged messages by content name and</span>
+    <span class="c"># link delay info.</span>
+    <span class="k">for</span> <span class="n">nid</span> <span class="ow">in</span> <span class="n">graph</span><span class="o">.</span><span class="n">nodes</span><span class="p">():</span>
+        <span class="c"># Load the data collected from the node&#39;s ccnd log</span>
+        <span class="n">fname</span> <span class="o">=</span> <span class="n">graph</span><span class="o">.</span><span class="n">node</span><span class="p">[</span><span class="n">nid</span><span class="p">][</span><span class="s">&quot;history&quot;</span><span class="p">]</span>
+        <span class="n">history</span> <span class="o">=</span> <span class="n">load_content_history</span><span class="p">(</span><span class="n">fname</span><span class="p">)</span>
+
+        <span class="k">for</span> <span class="n">content_name</span> <span class="ow">in</span> <span class="n">history</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
+            <span class="n">hist</span> <span class="o">=</span> <span class="n">history</span><span class="p">[</span><span class="n">content_name</span><span class="p">]</span>
+
+            <span class="k">for</span> <span class="p">(</span><span class="n">timestamp</span><span class="p">,</span> <span class="n">message_type</span><span class="p">,</span> <span class="n">nid1</span><span class="p">,</span> <span class="n">nid2</span><span class="p">,</span> <span class="n">nonce</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">line</span><span class="p">)</span> <span class="ow">in</span> <span class="n">hist</span><span class="p">:</span>
+                <span class="k">if</span> <span class="n">message_type</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&quot;content_from&quot;</span><span class="p">,</span> <span class="s">&quot;content_to&quot;</span><span class="p">]:</span>
+                    <span class="c"># The first Interest sent will not have a version or chunk number.</span>
+                    <span class="c"># The first Content sent back in reply, will end in /=00 or /%00.</span>
+                    <span class="c"># Make sure to map the first Content to the first Interest.</span>
+                    <span class="k">if</span> <span class="n">content_name</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s">&quot;/=00&quot;</span><span class="p">):</span>
+                        <span class="n">content_name</span> <span class="o">=</span> <span class="s">&quot;/&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">content_name</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;/&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">:</span><span class="o">-</span><span class="mi">2</span><span class="p">])</span>
+
+                <span class="c"># Add content name to dictionary</span>
+                <span class="k">if</span> <span class="n">content_name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">content_names</span><span class="p">:</span>
+                    <span class="n">content_names</span><span class="p">[</span><span class="n">content_name</span><span class="p">]</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
+                    <span class="n">content_names</span><span class="p">[</span><span class="n">content_name</span><span class="p">][</span><span class="s">&quot;interest&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
+                    <span class="n">content_names</span><span class="p">[</span><span class="n">content_name</span><span class="p">][</span><span class="s">&quot;content&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="nb">list</span><span class="p">()</span>
+
+                <span class="c"># Classify interests by replica</span>
+                <span class="k">if</span> <span class="n">message_type</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&quot;interest_from&quot;</span><span class="p">]</span> <span class="ow">and</span> \
+                        <span class="n">nonce</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">content_names</span><span class="p">[</span><span class="n">content_name</span><span class="p">][</span><span class="s">&quot;interest&quot;</span><span class="p">]:</span>
+                    <span class="n">content_names</span><span class="p">[</span><span class="n">content_name</span><span class="p">][</span><span class="s">&quot;interest&quot;</span><span class="p">][</span><span class="n">nonce</span><span class="p">]</span> <span class="o">=</span> <span class="nb">list</span><span class="p">()</span>
+     
+                <span class="c"># Add consumer history</span>
+                <span class="k">if</span> <span class="n">nid</span> <span class="o">==</span> <span class="n">source</span><span class="p">:</span>
+                    <span class="k">if</span> <span class="n">message_type</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&quot;interest_to&quot;</span><span class="p">,</span> <span class="s">&quot;content_from&quot;</span><span class="p">]:</span>
+                        <span class="c"># content name history as seen by the source</span>
+                        <span class="k">if</span> <span class="s">&quot;consumer_history&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">content_names</span><span class="p">[</span><span class="n">content_name</span><span class="p">]:</span>
+                            <span class="n">content_names</span><span class="p">[</span><span class="n">content_name</span><span class="p">][</span><span class="s">&quot;consumer_history&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="nb">list</span><span class="p">()</span>
+
+                        <span class="n">content_names</span><span class="p">[</span><span class="n">content_name</span><span class="p">][</span><span class="s">&quot;consumer_history&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+                                <span class="p">(</span><span class="n">timestamp</span><span class="p">,</span> <span class="n">message_type</span><span class="p">))</span> 
+
+                <span class="c"># Add messages per content name and cumulate totals by message type</span>
+                <span class="k">if</span> <span class="n">message_type</span> <span class="o">==</span> <span class="s">&quot;interest_dupnonce&quot;</span><span class="p">:</span>
+                    <span class="n">interest_dupnonce_count</span> <span class="o">+=</span> <span class="mi">1</span>
+                <span class="k">elif</span> <span class="n">message_type</span> <span class="o">==</span> <span class="s">&quot;interest_expiry&quot;</span><span class="p">:</span>
+                    <span class="n">interest_expiry_count</span> <span class="o">+=</span> <span class="mi">1</span>
+                <span class="k">elif</span> <span class="n">message_type</span> <span class="o">==</span> <span class="s">&quot;interest_from&quot;</span><span class="p">:</span>
+                    <span class="n">interest_count</span> <span class="o">+=</span> <span class="mi">1</span>
+                    <span class="c"># Append to interest history of the content name</span>
+                    <span class="n">content_names</span><span class="p">[</span><span class="n">content_name</span><span class="p">][</span><span class="s">&quot;interest&quot;</span><span class="p">][</span><span class="n">nonce</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+                            <span class="p">(</span><span class="n">timestamp</span><span class="p">,</span> <span class="n">nid2</span><span class="p">,</span> <span class="n">nid1</span><span class="p">))</span>
+                <span class="k">elif</span> <span class="n">message_type</span> <span class="o">==</span> <span class="s">&quot;content_from&quot;</span><span class="p">:</span>
+                    <span class="n">content_count</span> <span class="o">+=</span> <span class="mi">1</span>
+                    <span class="c"># Append to content history of the content name</span>
+                    <span class="n">content_names</span><span class="p">[</span><span class="n">content_name</span><span class="p">][</span><span class="s">&quot;content&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">timestamp</span><span class="p">,</span> <span class="n">nid2</span><span class="p">,</span> <span class="n">nid1</span><span class="p">))</span>
+                <span class="k">else</span><span class="p">:</span>
+                    <span class="k">continue</span>
+            <span class="k">del</span> <span class="n">hist</span>
+        <span class="k">del</span> <span class="n">history</span>
+
+    <span class="c"># Compute the time elapsed between the time an interest is sent</span>
+    <span class="c"># in the consumer node and when the content is received back</span>
+    <span class="k">for</span> <span class="n">content_name</span> <span class="ow">in</span> <span class="n">content_names</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
+        <span class="c"># order content and interest messages by timestamp</span>
+        <span class="n">content_names</span><span class="p">[</span><span class="n">content_name</span><span class="p">][</span><span class="s">&quot;content&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span>
+              <span class="n">content_names</span><span class="p">[</span><span class="n">content_name</span><span class="p">][</span><span class="s">&quot;content&quot;</span><span class="p">])</span>
+        
+        <span class="k">for</span> <span class="n">nonce</span><span class="p">,</span> <span class="n">timestamps</span> <span class="ow">in</span> <span class="n">content_names</span><span class="p">[</span><span class="n">content_name</span><span class="p">][</span>
+                    <span class="s">&quot;interest&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">iteritems</span><span class="p">():</span>
+              <span class="n">content_names</span><span class="p">[</span><span class="n">content_name</span><span class="p">][</span><span class="s">&quot;interest&quot;</span><span class="p">][</span><span class="n">nonce</span><span class="p">]</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span>
+                        <span class="n">timestamps</span><span class="p">)</span>
+      
+        <span class="n">history</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">content_names</span><span class="p">[</span><span class="n">content_name</span><span class="p">][</span><span class="s">&quot;consumer_history&quot;</span><span class="p">])</span>
+        <span class="n">content_names</span><span class="p">[</span><span class="n">content_name</span><span class="p">][</span><span class="s">&quot;consumer_history&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">history</span>
+
+        <span class="c"># compute the rtt time of the message</span>
+        <span class="n">rtt</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="n">waiting_content</span> <span class="o">=</span> <span class="bp">False</span> 
+        <span class="n">interest_timestamp</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="n">content_timestamp</span> <span class="o">=</span> <span class="bp">None</span>
+        
+        <span class="k">for</span> <span class="p">(</span><span class="n">timestamp</span><span class="p">,</span> <span class="n">message_type</span><span class="p">)</span> <span class="ow">in</span> <span class="n">history</span><span class="p">:</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="n">waiting_content</span> <span class="ow">and</span> <span class="n">message_type</span> <span class="o">==</span> <span class="s">&quot;interest_to&quot;</span><span class="p">:</span>
+                <span class="n">waiting_content</span> <span class="o">=</span> <span class="bp">True</span>
+                <span class="n">interest_timestamp</span> <span class="o">=</span> <span class="n">timestamp</span>
+                <span class="k">continue</span>
+
+            <span class="k">if</span> <span class="n">waiting_content</span> <span class="ow">and</span> <span class="n">message_type</span> <span class="o">==</span> <span class="s">&quot;content_from&quot;</span><span class="p">:</span>
+                <span class="n">content_timestamp</span> <span class="o">=</span> <span class="n">timestamp</span>
+                <span class="k">break</span>
+    
+        <span class="c"># If we can&#39;t determine who sent the interest, discard it</span>
+        <span class="n">rtt</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
+        <span class="k">if</span> <span class="n">interest_timestamp</span> <span class="ow">and</span> <span class="n">content_timestamp</span><span class="p">:</span>
+            <span class="n">rtt</span> <span class="o">=</span> <span class="n">compute_delay_ms</span><span class="p">(</span><span class="n">content_timestamp</span><span class="p">,</span> <span class="n">interest_timestamp</span><span class="p">)</span>
+
+        <span class="n">content_names</span><span class="p">[</span><span class="n">content_name</span><span class="p">][</span><span class="s">&quot;rtt&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">rtt</span>
+        <span class="n">content_names</span><span class="p">[</span><span class="n">content_name</span><span class="p">][</span><span class="s">&quot;lapse&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">interest_timestamp</span><span class="p">,</span> <span class="n">content_timestamp</span><span class="p">)</span>
+
+    <span class="k">return</span> <span class="p">(</span><span class="n">graph</span><span class="p">,</span>
+        <span class="n">content_names</span><span class="p">,</span>
+        <span class="n">interest_expiry_count</span><span class="p">,</span>
+        <span class="n">interest_dupnonce_count</span><span class="p">,</span>
+        <span class="n">interest_count</span><span class="p">,</span>
+        <span class="n">content_count</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="process_content_history_logs"><a class="viewcode-back" href="../../../../../_layout/nepi.data.processing.ccn.html#nepi.data.processing.ccn.parser.process_content_history_logs">[docs]</a><span class="k">def</span> <span class="nf">process_content_history_logs</span><span class="p">(</span><span class="n">logs_dir</span><span class="p">,</span> <span class="n">graph</span><span class="p">,</span> <span class="n">parse_ping_logs</span> <span class="o">=</span> <span class="bp">False</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot; Parse CCN logs and aggregate content history information in graph.</span>
+<span class="sd">    Returns annotated graph and message countn and content names history.</span>
+
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="c">## Process logs and analyse data</span>
+    <span class="k">try</span><span class="p">:</span>
+        <span class="n">graph</span> <span class="o">=</span> <span class="n">annotate_cn_graph</span><span class="p">(</span><span class="n">logs_dir</span><span class="p">,</span> <span class="n">graph</span><span class="p">,</span> 
+                <span class="n">parse_ping_logs</span> <span class="o">=</span> <span class="n">parse_ping_logs</span><span class="p">)</span>
+    <span class="k">except</span><span class="p">:</span>
+        <span class="k">print</span> <span class="s">&quot;Skipping: Error parsing ccnd logs&quot;</span><span class="p">,</span> <span class="n">logs_dir</span>
+        <span class="k">raise</span>
+
+    <span class="n">source</span> <span class="o">=</span> <span class="n">ccn_consumers</span><span class="p">(</span><span class="n">graph</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+    <span class="n">target</span> <span class="o">=</span> <span class="n">ccn_producers</span><span class="p">(</span><span class="n">graph</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+
+    <span class="c"># Process the data from the ccnd logs, but do not re compute</span>
+    <span class="c"># the link delay. </span>
+    <span class="k">try</span><span class="p">:</span>
+        <span class="p">(</span><span class="n">graph</span><span class="p">,</span>
+        <span class="n">content_names</span><span class="p">,</span>
+        <span class="n">interest_expiry_count</span><span class="p">,</span>
+        <span class="n">interest_dupnonce_count</span><span class="p">,</span>
+        <span class="n">interest_count</span><span class="p">,</span>
+        <span class="n">content_count</span><span class="p">)</span> <span class="o">=</span> <span class="n">process_content_history</span><span class="p">(</span><span class="n">graph</span><span class="p">)</span>
+    <span class="k">except</span><span class="p">:</span>
+        <span class="k">print</span> <span class="s">&quot;Skipping: Error processing ccn data&quot;</span><span class="p">,</span> <span class="n">logs_dir</span>
+        <span class="k">raise</span>
+
+    <span class="k">return</span> <span class="p">(</span><span class="n">graph</span><span class="p">,</span>
+            <span class="n">content_names</span><span class="p">,</span>
+            <span class="n">interest_expiry_count</span><span class="p">,</span>
+            <span class="n">interest_dupnonce_count</span><span class="p">,</span>
+            <span class="n">interest_count</span><span class="p">,</span>
+            <span class="n">content_count</span><span class="p">)</span> </div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/data/processing/ping/parser.html b/doc/sphinx/_build/html/_modules/nepi/data/processing/ping/parser.html
new file mode 100644 (file)
index 0000000..e69772a
--- /dev/null
@@ -0,0 +1,212 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.data.processing.ping.parser &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.data.processing.ping.parser</h1><div class="highlight"><pre>
+<span class="c">#!/usr/bin/env python</span>
+
+<span class="c">###############################################################################</span>
+<span class="c">#</span>
+<span class="c">#    CCNX benchmark</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+<span class="c">#</span>
+<span class="c">###############################################################################</span>
+
+<span class="c">#</span>
+<span class="c"># This library contains functions to parse log files generated using ping. </span>
+<span class="c">#</span>
+
+<span class="kn">import</span> <span class="nn">collections</span>
+<span class="kn">import</span> <span class="nn">re</span>
+<span class="kn">import</span> <span class="nn">os</span>
+
+<span class="c"># RE to match line starting &quot;traceroute to&quot;</span>
+<span class="n">_rre</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s">&quot;\d+ bytes from ((?P&lt;hostname&gt;[^\s]+) )?\(?(?P&lt;ip&gt;[^\s]+)\)??: icmp_.eq=\d+ ttl=\d+ time=(?P&lt;time&gt;[^\s]+) ms&quot;</span><span class="p">)</span>
+
+<div class="viewcode-block" id="parse_file"><a class="viewcode-back" href="../../../../../_layout/nepi.data.processing.ping.html#nepi.data.processing.ping.parser.parse_file">[docs]</a><span class="k">def</span> <span class="nf">parse_file</span><span class="p">(</span><span class="n">filename</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        filename: path to traceroute file</span>
+
+<span class="sd">    &quot;&quot;&quot;</span>
+
+    <span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="s">&quot;r&quot;</span><span class="p">)</span>
+
+    <span class="c"># Traceroute info</span>
+    <span class="n">target_ip</span> <span class="o">=</span> <span class="bp">None</span>
+    <span class="n">target_hostname</span> <span class="o">=</span> <span class="bp">None</span>
+   
+    <span class="n">data</span> <span class="o">=</span> <span class="p">[]</span>
+
+    <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">f</span><span class="p">:</span>
+        <span class="c"># match traceroute to ...</span>
+        <span class="n">m</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">_rre</span><span class="p">,</span> <span class="n">line</span><span class="p">)</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">m</span><span class="p">:</span>
+            <span class="k">continue</span>
+
+        <span class="n">target_ip</span> <span class="o">=</span> <span class="n">m</span><span class="o">.</span><span class="n">groupdict</span><span class="p">()[</span><span class="s">&quot;ip&quot;</span><span class="p">]</span>
+        <span class="c"># FIX THIS: Make sure the regular expression does not inlcude </span>
+        <span class="c"># the &#39;)&#39; in the ip group </span>
+        <span class="n">target_ip</span> <span class="o">=</span> <span class="n">target_ip</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;)&quot;</span><span class="p">,</span><span class="s">&quot;&quot;</span><span class="p">)</span>
+        <span class="n">target_hostname</span> <span class="o">=</span> <span class="n">m</span><span class="o">.</span><span class="n">groupdict</span><span class="p">()[</span><span class="s">&quot;hostname&quot;</span><span class="p">]</span>
+        <span class="n">time</span> <span class="o">=</span> <span class="n">m</span><span class="o">.</span><span class="n">groupdict</span><span class="p">()[</span><span class="s">&quot;time&quot;</span><span class="p">]</span>
+        <span class="n">data</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">target_ip</span><span class="p">,</span> <span class="n">target_hostname</span><span class="p">,</span> <span class="n">time</span><span class="p">))</span>
+
+    <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+    <span class="k">return</span> <span class="n">data</span>
+</div>
+<div class="viewcode-block" id="annotate_cn_node"><a class="viewcode-back" href="../../../../../_layout/nepi.data.processing.ping.html#nepi.data.processing.ping.parser.annotate_cn_node">[docs]</a><span class="k">def</span> <span class="nf">annotate_cn_node</span><span class="p">(</span><span class="n">graph</span><span class="p">,</span> <span class="n">nid1</span><span class="p">,</span> <span class="n">ips2nid</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
+    <span class="k">for</span> <span class="p">(</span><span class="n">target_ip</span><span class="p">,</span> <span class="n">target_hostname</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
+        <span class="n">nid2</span> <span class="o">=</span> <span class="n">ips2nid</span><span class="p">[</span><span class="n">target_ip</span><span class="p">]</span>
+
+        <span class="k">if</span> <span class="s">&quot;delays&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">graph</span><span class="o">.</span><span class="n">edge</span><span class="p">[</span><span class="n">nid1</span><span class="p">][</span><span class="n">nid2</span><span class="p">]:</span>
+            <span class="n">graph</span><span class="o">.</span><span class="n">edge</span><span class="p">[</span><span class="n">nid1</span><span class="p">][</span><span class="n">nid2</span><span class="p">][</span><span class="s">&quot;delays&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+
+        <span class="n">time</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">time</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;ms&quot;</span><span class="p">,</span> <span class="s">&quot;&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot; &quot;</span><span class="p">,</span><span class="s">&quot;&quot;</span><span class="p">))</span>
+
+        <span class="n">graph</span><span class="o">.</span><span class="n">edge</span><span class="p">[</span><span class="n">nid1</span><span class="p">][</span><span class="n">nid2</span><span class="p">][</span><span class="s">&quot;delays&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">time</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="annotate_cn_graph"><a class="viewcode-back" href="../../../../../_layout/nepi.data.processing.ping.html#nepi.data.processing.ping.parser.annotate_cn_graph">[docs]</a><span class="k">def</span> <span class="nf">annotate_cn_graph</span><span class="p">(</span><span class="n">logs_dir</span><span class="p">,</span> <span class="n">graph</span><span class="p">):</span> 
+    <span class="sd">&quot;&quot;&quot; Add delay inormation to graph using data collected using</span>
+<span class="sd">    ping.</span>
+
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">ips2nid</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
+
+    <span class="k">for</span> <span class="n">nid</span> <span class="ow">in</span> <span class="n">graph</span><span class="o">.</span><span class="n">nodes</span><span class="p">():</span>
+        <span class="n">ips</span> <span class="o">=</span> <span class="n">graph</span><span class="o">.</span><span class="n">node</span><span class="p">[</span><span class="n">nid</span><span class="p">][</span><span class="s">&quot;ips&quot;</span><span class="p">]</span>
+        <span class="k">for</span> <span class="n">ip</span> <span class="ow">in</span> <span class="n">ips</span><span class="p">:</span>
+            <span class="n">ips2nid</span><span class="p">[</span><span class="n">ip</span><span class="p">]</span> <span class="o">=</span> <span class="n">nid</span>
+
+    <span class="c"># Walk through the ping logs...</span>
+    <span class="n">found_files</span> <span class="o">=</span> <span class="bp">False</span>
+
+    <span class="k">for</span> <span class="n">dirpath</span><span class="p">,</span> <span class="n">dnames</span><span class="p">,</span> <span class="n">fnames</span> <span class="ow">in</span> <span class="n">os</span><span class="o">.</span><span class="n">walk</span><span class="p">(</span><span class="n">logs_dir</span><span class="p">):</span>
+        <span class="c"># continue if we are not at the leaf level (if there are subdirectories)</span>
+        <span class="k">if</span> <span class="n">dnames</span><span class="p">:</span> 
+            <span class="k">continue</span>
+        
+        <span class="c"># Each dirpath correspond to a different host</span>
+        <span class="n">nid</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">dirpath</span><span class="p">)</span>
+    
+        <span class="k">for</span> <span class="n">fname</span> <span class="ow">in</span> <span class="n">fnames</span><span class="p">:</span>
+            <span class="k">if</span> <span class="n">fname</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s">&quot;.ping&quot;</span><span class="p">):</span>
+                <span class="n">found_files</span> <span class="o">=</span> <span class="bp">True</span>
+                <span class="n">filename</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">dirpath</span><span class="p">,</span> <span class="n">fname</span><span class="p">)</span>
+                <span class="n">data</span> <span class="o">=</span> <span class="n">parse_file</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span>
+                <span class="n">annotate_cn_node</span><span class="p">(</span><span class="n">graph</span><span class="p">,</span> <span class="n">nid</span><span class="p">,</span> <span class="n">ips2nid</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span>
+
+    <span class="k">if</span> <span class="ow">not</span> <span class="n">found_files</span><span class="p">:</span>
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;No PING output files were found to parse at </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="n">logs_dir</span> 
+        <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+    <span class="c"># Take as weight the most frequent value</span>
+    <span class="k">for</span> <span class="n">nid1</span><span class="p">,</span> <span class="n">nid2</span> <span class="ow">in</span> <span class="n">graph</span><span class="o">.</span><span class="n">edges</span><span class="p">():</span>
+        <span class="n">delays</span> <span class="o">=</span> <span class="n">collections</span><span class="o">.</span><span class="n">Counter</span><span class="p">(</span><span class="n">graph</span><span class="o">.</span><span class="n">edge</span><span class="p">[</span><span class="n">nid1</span><span class="p">][</span><span class="n">nid2</span><span class="p">][</span><span class="s">&quot;delays&quot;</span><span class="p">])</span>
+        <span class="n">weight</span> <span class="o">=</span> <span class="n">delays</span><span class="o">.</span><span class="n">most_common</span><span class="p">(</span><span class="mi">1</span><span class="p">)[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
+        <span class="k">del</span> <span class="n">graph</span><span class="o">.</span><span class="n">edge</span><span class="p">[</span><span class="n">nid1</span><span class="p">][</span><span class="n">nid2</span><span class="p">][</span><span class="s">&quot;delays&quot;</span><span class="p">]</span>
+        <span class="n">graph</span><span class="o">.</span><span class="n">edge</span><span class="p">[</span><span class="n">nid1</span><span class="p">][</span><span class="n">nid2</span><span class="p">][</span><span class="s">&quot;weight&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">weight</span>
+
+    <span class="k">return</span> <span class="n">graph</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/execution/attribute.html b/doc/sphinx/_build/html/_modules/nepi/execution/attribute.html
new file mode 100644 (file)
index 0000000..8c87b68
--- /dev/null
@@ -0,0 +1,286 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.execution.attribute &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../index.html" />
+    <link rel="up" title="Module code" href="../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.execution.attribute</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="c">### Attribute Types</span>
+<div class="viewcode-block" id="Types"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.attribute.Types">[docs]</a><span class="k">class</span> <span class="nc">Types</span><span class="p">:</span>
+    <span class="sd">&quot;&quot;&quot; Allowed types for the Attribute value</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">String</span>  <span class="o">=</span> <span class="s">&quot;STRING&quot;</span>
+    <span class="n">Bool</span>    <span class="o">=</span> <span class="s">&quot;BOOL&quot;</span>
+    <span class="n">Enumerate</span>    <span class="o">=</span> <span class="s">&quot;ENUM&quot;</span>
+    <span class="n">Double</span>  <span class="o">=</span> <span class="s">&quot;DOUBLE&quot;</span>
+    <span class="n">Integer</span> <span class="o">=</span> <span class="s">&quot;INTEGER&quot;</span>
+
+<span class="c">### Attribute Flags</span></div>
+<div class="viewcode-block" id="Flags"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.attribute.Flags">[docs]</a><span class="k">class</span> <span class="nc">Flags</span><span class="p">:</span>
+    <span class="sd">&quot;&quot;&quot; Flags to characterize the scope of an Attribute</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="c"># Attribute value can not be read (it is hidden to the user) </span>
+    <span class="n">NoRead</span>    <span class="o">=</span> <span class="mi">1</span> <span class="c"># 1</span>
+    
+    <span class="c"># Attribute value can not be modified (it is not editable by the user)</span>
+    <span class="n">NoWrite</span>   <span class="o">=</span> <span class="mi">1</span> <span class="o">&lt;&lt;</span> <span class="mi">1</span> <span class="c"># 2</span>
+    
+    <span class="c"># Attribute value can be modified only before deployment</span>
+    <span class="n">Design</span>  <span class="o">=</span> <span class="mi">1</span> <span class="o">&lt;&lt;</span> <span class="mi">2</span> <span class="c"># 4</span>
+
+    <span class="c"># Attribute value will be used at deployment time for initial configuration</span>
+    <span class="n">Construct</span>    <span class="o">=</span> <span class="mi">1</span> <span class="o">&lt;&lt;</span> <span class="mi">3</span> <span class="c">#  8</span>
+
+    <span class="c"># Attribute provides credentials to access resources</span>
+    <span class="n">Credential</span>  <span class="o">=</span> <span class="mi">1</span> <span class="o">&lt;&lt;</span> <span class="mi">4</span>  <span class="o">|</span> <span class="n">Design</span> <span class="c"># 16 + 4</span>
+
+    <span class="c"># Attribute is a filter used to discover resources</span>
+    <span class="n">Filter</span>  <span class="o">=</span> <span class="mi">1</span> <span class="o">&lt;&lt;</span> <span class="mi">5</span> <span class="o">|</span> <span class="n">Design</span> <span class="c"># 32 + 4</span>
+
+    <span class="c"># Attribute Flag is reserved for internal RM usage (i.e. should be </span>
+    <span class="c"># transparent to the user)</span>
+    <span class="n">Reserved</span>  <span class="o">=</span> <span class="mi">1</span> <span class="o">&lt;&lt;</span> <span class="mi">6</span> <span class="c"># 64</span>
+
+    <span class="c"># Attribute global is set to all resources of rtype</span>
+    <span class="n">Global</span>  <span class="o">=</span> <span class="mi">1</span> <span class="o">&lt;&lt;</span> <span class="mi">7</span> <span class="c"># 128</span>
+
+</div>
+<div class="viewcode-block" id="Attribute"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.attribute.Attribute">[docs]</a><span class="k">class</span> <span class="nc">Attribute</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot; An Attribute exposes a configuration parameter of a resource</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">help</span><span class="p">,</span> <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">default</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">set_hook</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        :param name: Name of the Attribute</span>
+<span class="sd">        :type name: str</span>
+
+<span class="sd">        :param help: Description of the Attribute</span>
+<span class="sd">        :type help: str</span>
+<span class="sd">        </span>
+<span class="sd">        :param type: The type expected for the Attribute value.</span>
+<span class="sd">                     Should be one of Attribute.Types</span>
+<span class="sd">        :type type: str</span>
+
+<span class="sd">        :param flags: Defines Attribute behavior (i.e. whether it is read-only,</span>
+<span class="sd">                read and write, etc). This parameter must take its values from</span>
+<span class="sd">                Attribute.Flags. Flags values can be bitwised</span>
+<span class="sd">        :type flags: hex</span>
+
+<span class="sd">        :param default: Default value for the Attribute</span>
+<span class="sd">        :type default: Depends on the type of Attribute</span>
+<span class="sd">        </span>
+<span class="sd">        :param allowed: List of values that the Attribute can take. </span>
+<span class="sd">                This parameter is only meaningful for Enumerate type Attributes</span>
+<span class="sd">        :type allowed: list</span>
+<span class="sd">        </span>
+<span class="sd">        :param range: (max, min) tuple with range of possible values for</span>
+<span class="sd">                Attributes.</span>
+<span class="sd">                This parameter is only meaningful for Integer or Double type</span>
+<span class="sd">                Attributes</span>
+<span class="sd">        :type range: (int, int) or (float, float)</span>
+<span class="sd">        </span>
+<span class="sd">        :param set_hook: Function that will be executed whenever a new </span>
+<span class="sd">                value is set for the Attribute.</span>
+<span class="sd">        :type set_hook: function</span>
+
+<span class="sd">    &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_name</span> <span class="o">=</span> <span class="n">name</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_help</span> <span class="o">=</span> <span class="n">help</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_type</span> <span class="o">=</span> <span class="nb">type</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_flags</span> <span class="o">=</span> <span class="n">flags</span> <span class="ow">or</span> <span class="mi">0</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_allowed</span> <span class="o">=</span> <span class="n">allowed</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_range</span> <span class="o">=</span> <span class="nb">range</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_default</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_value</span> <span class="o">=</span> <span class="n">default</span>
+        <span class="c"># callback to be invoked upon changing the </span>
+        <span class="c"># attribute value</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set_hook</span> <span class="o">=</span> <span class="n">set_hook</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="Attribute.name"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.attribute.Attribute.name">[docs]</a>    <span class="k">def</span> <span class="nf">name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the name of the Attribute &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_name</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="Attribute.default"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.attribute.Attribute.default">[docs]</a>    <span class="k">def</span> <span class="nf">default</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the default value of the Attribute &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_default</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="Attribute.type"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.attribute.Attribute.type">[docs]</a>    <span class="k">def</span> <span class="nf">type</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the type of the Attribute &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_type</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="Attribute.help"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.attribute.Attribute.help">[docs]</a>    <span class="k">def</span> <span class="nf">help</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the description of the Attribute &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_help</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="Attribute.flags"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.attribute.Attribute.flags">[docs]</a>    <span class="k">def</span> <span class="nf">flags</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the flags of the Attribute &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_flags</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="Attribute.allowed"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.attribute.Attribute.allowed">[docs]</a>    <span class="k">def</span> <span class="nf">allowed</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the set of allowed values for the Attribute &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_allowed</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="Attribute.range"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.attribute.Attribute.range">[docs]</a>    <span class="k">def</span> <span class="nf">range</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the range of allowed numerical values for the Attribute &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_range</span>
+</div>
+<div class="viewcode-block" id="Attribute.has_flag"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.attribute.Attribute.has_flag">[docs]</a>    <span class="k">def</span> <span class="nf">has_flag</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">flag</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns True if the Attribute has the flag &#39;flag&#39;</span>
+
+<span class="sd">        :param flag: Flag to be checked</span>
+<span class="sd">        :type flag: Flags</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_flags</span> <span class="o">&amp;</span> <span class="n">flag</span><span class="p">)</span> <span class="o">==</span> <span class="n">flag</span>
+</div>
+<div class="viewcode-block" id="Attribute.get_value"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.attribute.Attribute.get_value">[docs]</a>    <span class="k">def</span> <span class="nf">get_value</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the value of the Attribute &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_value</span>
+</div>
+<div class="viewcode-block" id="Attribute.set_value"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.attribute.Attribute.set_value">[docs]</a>    <span class="k">def</span> <span class="nf">set_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Configure a new value for the Attribute &quot;&quot;&quot;</span>
+        <span class="n">valid</span> <span class="o">=</span> <span class="bp">True</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">type</span> <span class="o">==</span> <span class="n">Types</span><span class="o">.</span><span class="n">Enumerate</span><span class="p">:</span>
+            <span class="n">valid</span> <span class="o">=</span> <span class="n">value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_allowed</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">type</span> <span class="ow">in</span> <span class="p">[</span><span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">]</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">range</span><span class="p">:</span>
+            <span class="p">(</span><span class="nb">min</span><span class="p">,</span> <span class="nb">max</span><span class="p">)</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">range</span>
+
+            <span class="n">value</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
+
+            <span class="n">valid</span> <span class="o">=</span> <span class="p">(</span><span class="n">value</span> <span class="o">&gt;=</span> <span class="nb">min</span> <span class="ow">and</span> <span class="n">value</span> <span class="o">&lt;=</span> <span class="nb">max</span><span class="p">)</span> 
+        
+        <span class="n">valid</span> <span class="o">=</span> <span class="n">valid</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_valid_value</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">valid</span><span class="p">:</span> 
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">set_hook</span><span class="p">:</span>
+                <span class="c"># Hook receives old value, new value</span>
+                <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">set_hook</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_value</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">_value</span> <span class="o">=</span> <span class="n">value</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">&quot;Invalid value </span><span class="si">%s</span><span class="s"> for attribute </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span>
+                    <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">value</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
+</div>
+    <span class="n">value</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">get_value</span><span class="p">,</span> <span class="n">set_value</span><span class="p">)</span>
+
+<div class="viewcode-block" id="Attribute.is_valid_value"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.attribute.Attribute.is_valid_value">[docs]</a>    <span class="k">def</span> <span class="nf">is_valid_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Attribute subclasses will override this method to add </span>
+<span class="sd">        adequate validation&quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">True</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="Attribute.has_changed"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.attribute.Attribute.has_changed">[docs]</a>    <span class="k">def</span> <span class="nf">has_changed</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns True if the value has changed from the default &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">value</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">default</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/execution/ec.html b/doc/sphinx/_build/html/_modules/nepi/execution/ec.html
new file mode 100644 (file)
index 0000000..e95bbc4
--- /dev/null
@@ -0,0 +1,1365 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.execution.ec &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../index.html" />
+    <link rel="up" title="Module code" href="../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.execution.ec</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.util</span> <span class="kn">import</span> <span class="n">guid</span>
+<span class="kn">from</span> <span class="nn">nepi.util.parallel</span> <span class="kn">import</span> <span class="n">ParallelRun</span>
+<span class="kn">from</span> <span class="nn">nepi.util.timefuncs</span> <span class="kn">import</span> <span class="n">tnow</span><span class="p">,</span> <span class="n">tdiffsec</span><span class="p">,</span> <span class="n">stabsformat</span><span class="p">,</span> <span class="n">tsformat</span> 
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceFactory</span><span class="p">,</span> <span class="n">ResourceAction</span><span class="p">,</span> \
+        <span class="n">ResourceState</span><span class="p">,</span> <span class="n">ResourceState2str</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.scheduler</span> <span class="kn">import</span> <span class="n">HeapScheduler</span><span class="p">,</span> <span class="n">Task</span><span class="p">,</span> <span class="n">TaskStatus</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.util.serializer</span> <span class="kn">import</span> <span class="n">ECSerializer</span><span class="p">,</span> <span class="n">SFormats</span>
+<span class="kn">from</span> <span class="nn">nepi.util.plotter</span> <span class="kn">import</span> <span class="n">ECPlotter</span><span class="p">,</span> <span class="n">PFormats</span>
+<span class="kn">from</span> <span class="nn">nepi.util.netgraph</span> <span class="kn">import</span> <span class="n">NetGraph</span><span class="p">,</span> <span class="n">TopologyType</span> 
+
+<span class="c"># TODO: use multiprocessing instead of threading</span>
+<span class="c"># TODO: Allow to reconnect to a running experiment instance! (reconnect mode vs deploy mode)</span>
+
+<span class="kn">import</span> <span class="nn">functools</span>
+<span class="kn">import</span> <span class="nn">logging</span>
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">sys</span>
+<span class="kn">import</span> <span class="nn">tempfile</span>
+<span class="kn">import</span> <span class="nn">time</span>
+<span class="kn">import</span> <span class="nn">threading</span>
+<span class="kn">import</span> <span class="nn">weakref</span>
+
+<div class="viewcode-block" id="FailureLevel"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.FailureLevel">[docs]</a><span class="k">class</span> <span class="nc">FailureLevel</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot; Possible failure states for the experiment &quot;&quot;&quot;</span>
+    <span class="n">OK</span> <span class="o">=</span> <span class="mi">1</span>
+    <span class="n">RM_FAILURE</span> <span class="o">=</span> <span class="mi">2</span>
+    <span class="n">EC_FAILURE</span> <span class="o">=</span> <span class="mi">3</span>
+</div>
+<div class="viewcode-block" id="FailureManager"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.FailureManager">[docs]</a><span class="k">class</span> <span class="nc">FailureManager</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot; The FailureManager is responsible for handling errors</span>
+<span class="sd">    and deciding whether an experiment should be aborted or not</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_ec</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_failure_level</span> <span class="o">=</span> <span class="n">FailureLevel</span><span class="o">.</span><span class="n">OK</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_abort</span> <span class="o">=</span> <span class="bp">False</span>
+
+<div class="viewcode-block" id="FailureManager.set_ec"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.FailureManager.set_ec">[docs]</a>    <span class="k">def</span> <span class="nf">set_ec</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_ec</span> <span class="o">=</span> <span class="n">weakref</span><span class="o">.</span><span class="n">ref</span><span class="p">(</span><span class="n">ec</span><span class="p">)</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="FailureManager.ec"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.FailureManager.ec">[docs]</a>    <span class="k">def</span> <span class="nf">ec</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the ExperimentController associated to this FailureManager </span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ec</span><span class="p">()</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="FailureManager.abort"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.FailureManager.abort">[docs]</a>    <span class="k">def</span> <span class="nf">abort</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_abort</span>
+</div>
+<div class="viewcode-block" id="FailureManager.eval_failure"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.FailureManager.eval_failure">[docs]</a>    <span class="k">def</span> <span class="nf">eval_failure</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Implements failure policy and sets the abort state of the</span>
+<span class="sd">        experiment based on the failure state and criticality of</span>
+<span class="sd">        the RM</span>
+
+<span class="sd">        :param guid: Guid of the RM upon which the failure of the experiment</span>
+<span class="sd">            is evaluated</span>
+<span class="sd">        :type guid: int</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_failure_level</span> <span class="o">==</span> <span class="n">FailureLevel</span><span class="o">.</span><span class="n">OK</span><span class="p">:</span>
+            <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+            <span class="n">state</span> <span class="o">=</span> <span class="n">rm</span><span class="o">.</span><span class="n">state</span>
+            <span class="n">critical</span> <span class="o">=</span> <span class="n">rm</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;critical&quot;</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">FAILED</span> <span class="ow">and</span> <span class="n">critical</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_failure_level</span> <span class="o">=</span> <span class="n">FailureLevel</span><span class="o">.</span><span class="n">RM_FAILURE</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_abort</span> <span class="o">=</span> <span class="bp">True</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;RM critical failure occurred on guid </span><span class="si">%d</span><span class="s">.&quot;</span> \
+                    <span class="s">&quot; Setting EC FAILURE LEVEL to RM_FAILURE&quot;</span> <span class="o">%</span> <span class="n">guid</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="FailureManager.set_ec_failure"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.FailureManager.set_ec_failure">[docs]</a>    <span class="k">def</span> <span class="nf">set_ec_failure</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_failure_level</span> <span class="o">=</span> <span class="n">FailureLevel</span><span class="o">.</span><span class="n">EC_FAILURE</span>
+</div></div>
+<div class="viewcode-block" id="ECState"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ECState">[docs]</a><span class="k">class</span> <span class="nc">ECState</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot; Possible states of the ExperimentController</span>
+<span class="sd">   </span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">RUNNING</span> <span class="o">=</span> <span class="mi">1</span>
+    <span class="n">FAILED</span> <span class="o">=</span> <span class="mi">2</span>
+    <span class="n">RELEASED</span> <span class="o">=</span> <span class="mi">3</span>
+    <span class="n">TERMINATED</span> <span class="o">=</span> <span class="mi">4</span>
+</div>
+<div class="viewcode-block" id="ExperimentController"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController">[docs]</a><span class="k">class</span> <span class="nc">ExperimentController</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    .. note::</span>
+
+<span class="sd">    An experiment, or scenario, is defined by a concrete set of resources,</span>
+<span class="sd">    and the behavior, configuration and interconnection of those resources. </span>
+<span class="sd">    The Experiment Description (ED) is a detailed representation of a</span>
+<span class="sd">    single experiment. It contains all the necessary information to </span>
+<span class="sd">    allow repeating the experiment. NEPI allows to describe</span>
+<span class="sd">    experiments by registering components (resources), configuring them</span>
+<span class="sd">    and interconnecting them.</span>
+<span class="sd">    </span>
+<span class="sd">    A same experiment (scenario) can be executed many times, generating </span>
+<span class="sd">    different results. We call an experiment execution (instance) a &#39;run&#39;.</span>
+
+<span class="sd">    The ExperimentController (EC), is the entity responsible of</span>
+<span class="sd">    managing an experiment run. The same scenario can be </span>
+<span class="sd">    recreated (and re-run) by instantiating an EC and recreating </span>
+<span class="sd">    the same experiment description. </span>
+
+<span class="sd">    An experiment is represented as a graph of interconnected</span>
+<span class="sd">    resources. A resource is a generic concept in the sense that any</span>
+<span class="sd">    component taking part of an experiment, whether physical of</span>
+<span class="sd">    virtual, is considered a resource. A resources could be a host, </span>
+<span class="sd">    a virtual machine, an application, a simulator, a IP address.</span>
+
+<span class="sd">    A ResourceManager (RM), is the entity responsible for managing a </span>
+<span class="sd">    single resource. ResourceManagers are specific to a resource</span>
+<span class="sd">    type (i.e. An RM to control a Linux application will not be</span>
+<span class="sd">    the same as the RM used to control a ns-3 simulation).</span>
+<span class="sd">    To support a new type of resource, a new RM must be implemented. </span>
+<span class="sd">    NEPI already provides a variety of RMs to control basic resources, </span>
+<span class="sd">    and new can be extended from the existing ones.</span>
+
+<span class="sd">    Through the EC interface the user can create ResourceManagers (RMs),</span>
+<span class="sd">    configure them and interconnect them, to describe an experiment.</span>
+<span class="sd">    Describing an experiment through the EC does not run the experiment.</span>
+<span class="sd">    Only when the &#39;deploy()&#39; method is invoked on the EC, the EC will take </span>
+<span class="sd">    actions to transform the &#39;described&#39; experiment into a &#39;running&#39; experiment.</span>
+
+<span class="sd">    While the experiment is running, it is possible to continue to</span>
+<span class="sd">    create/configure/connect RMs, and to deploy them to involve new</span>
+<span class="sd">    resources in the experiment (this is known as &#39;interactive&#39; deployment).</span>
+<span class="sd">    </span>
+<span class="sd">    An experiments in NEPI is identified by a string id, </span>
+<span class="sd">    which is either given by the user, or automatically generated by NEPI.  </span>
+<span class="sd">    The purpose of this identifier is to separate files and results that </span>
+<span class="sd">    belong to different experiment scenarios. </span>
+<span class="sd">    However, since a same &#39;experiment&#39; can be run many times, the experiment</span>
+<span class="sd">    id is not enough to identify an experiment instance (run).</span>
+<span class="sd">    For this reason, the ExperimentController has two identifier, the </span>
+<span class="sd">    exp_id, which can be re-used in different ExperimentController,</span>
+<span class="sd">    and the run_id, which is unique to one ExperimentController instance, and</span>
+<span class="sd">    is automatically generated by NEPI.</span>
+<span class="sd">   </span>
+<span class="sd">    &quot;&quot;&quot;</span>
+
+    <span class="nd">@classmethod</span>
+<div class="viewcode-block" id="ExperimentController.load"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.load">[docs]</a>    <span class="k">def</span> <span class="nf">load</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">filepath</span><span class="p">,</span> <span class="n">format</span> <span class="o">=</span> <span class="n">SFormats</span><span class="o">.</span><span class="n">XML</span><span class="p">):</span>
+        <span class="n">serializer</span> <span class="o">=</span> <span class="n">ECSerializer</span><span class="p">()</span>
+        <span class="n">ec</span> <span class="o">=</span> <span class="n">serializer</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">filepath</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">ec</span>
+</div>
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exp_id</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">local_dir</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">persist</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">fm</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">add_node_callback</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">add_edge_callback</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> 
+            <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; ExperimentController entity to model an execute a network </span>
+<span class="sd">        experiment.</span>
+<span class="sd">        </span>
+<span class="sd">        :param exp_id: Human readable name to identify the experiment</span>
+<span class="sd">        :type exp_id: str</span>
+
+<span class="sd">        :param local_dir: Path to local directory where to store experiment</span>
+<span class="sd">            related files</span>
+<span class="sd">        :type local_dir: str</span>
+
+<span class="sd">        :param persist: Save an XML description of the experiment after </span>
+<span class="sd">        completion at local_dir</span>
+<span class="sd">        :type persist: bool</span>
+
+<span class="sd">        :param fm: FailureManager object. If None is given, the default </span>
+<span class="sd">            FailureManager class will be used</span>
+<span class="sd">        :type fm: FailureManager</span>
+
+<span class="sd">        :param add_node_callback: Callback to invoke for node instantiation</span>
+<span class="sd">        when automatic topology creation mode is used </span>
+<span class="sd">        :type add_node_callback: function</span>
+
+<span class="sd">        :param add_edge_callback: Callback to invoke for edge instantiation </span>
+<span class="sd">        when automatic topology creation mode is used </span>
+<span class="sd">        :type add_edge_callback: function</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">ExperimentController</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+
+        <span class="c"># Logging</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s">&quot;ExperimentController&quot;</span><span class="p">)</span>
+
+        <span class="c"># Run identifier. It identifies a concrete execution instance (run) </span>
+        <span class="c"># of an experiment.</span>
+        <span class="c"># Since a same experiment (same configuration) can be executed many </span>
+        <span class="c"># times, this run_id permits to separate result files generated on </span>
+        <span class="c"># different experiment executions</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_run_id</span> <span class="o">=</span> <span class="n">tsformat</span><span class="p">()</span>
+
+        <span class="c"># Experiment identifier. Usually assigned by the user</span>
+        <span class="c"># Identifies the experiment scenario (i.e. configuration, </span>
+        <span class="c"># resources used, etc)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_exp_id</span> <span class="o">=</span> <span class="n">exp_id</span> <span class="ow">or</span> <span class="s">&quot;exp-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">os</span><span class="o">.</span><span class="n">urandom</span><span class="p">(</span><span class="mi">8</span><span class="p">)</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s">&#39;hex&#39;</span><span class="p">)</span>
+
+        <span class="c"># Local path where to store experiment related files (results, etc)</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">local_dir</span><span class="p">:</span>
+            <span class="n">local_dir</span> <span class="o">=</span> <span class="n">tempfile</span><span class="o">.</span><span class="n">gettempdir</span><span class="p">()</span> <span class="c"># /tmp</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">_local_dir</span> <span class="o">=</span> <span class="n">local_dir</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_exp_dir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">local_dir</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">exp_id</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_run_dir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">exp_dir</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_id</span><span class="p">)</span>
+
+        <span class="c"># If True persist the experiment controller in XML format, after completion</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_persist</span> <span class="o">=</span> <span class="n">persist</span>
+
+        <span class="c"># generator of globally unique ids</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_guid_generator</span> <span class="o">=</span> <span class="n">guid</span><span class="o">.</span><span class="n">GuidGenerator</span><span class="p">()</span>
+        
+        <span class="c"># Resource managers</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_resources</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
+
+        <span class="c"># Scheduler. It a queue that holds tasks scheduled for</span>
+        <span class="c"># execution, and yields the next task to be executed </span>
+        <span class="c"># ordered by execution and arrival time</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_scheduler</span> <span class="o">=</span> <span class="n">HeapScheduler</span><span class="p">()</span>
+
+        <span class="c"># Tasks</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_tasks</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
+
+        <span class="c"># RM groups (for deployment) </span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_groups</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
+
+        <span class="c"># generator of globally unique id for groups</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_group_id_generator</span> <span class="o">=</span> <span class="n">guid</span><span class="o">.</span><span class="n">GuidGenerator</span><span class="p">()</span>
+
+        <span class="c"># Flag to stop processing thread</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_stop</span> <span class="o">=</span> <span class="bp">False</span>
+    
+        <span class="c"># Entity in charge of managing system failures</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">fm</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_fm</span> <span class="o">=</span> <span class="n">FailureManager</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_fm</span><span class="o">.</span><span class="n">set_ec</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+
+        <span class="c"># EC state</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">=</span> <span class="n">ECState</span><span class="o">.</span><span class="n">RUNNING</span>
+
+        <span class="c"># Automatically construct experiment description </span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_netgraph</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="k">if</span> <span class="n">add_node_callback</span> <span class="ow">or</span> <span class="n">add_edge_callback</span> <span class="ow">or</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;topology&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_build_from_netgraph</span><span class="p">(</span><span class="n">add_node_callback</span><span class="p">,</span> <span class="n">add_edge_callback</span><span class="p">,</span> 
+                    <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+
+        <span class="c"># The runner is a pool of threads used to parallelize </span>
+        <span class="c"># execution of tasks</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_nthreads</span> <span class="o">=</span> <span class="mi">20</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_runner</span> <span class="o">=</span> <span class="bp">None</span>
+
+        <span class="c"># Event processing thread</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_cond</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Condition</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_thread</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Thread</span><span class="p">(</span><span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_process</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_thread</span><span class="o">.</span><span class="n">setDaemon</span><span class="p">(</span><span class="bp">True</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_thread</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
+        
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="ExperimentController.logger"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.logger">[docs]</a>    <span class="k">def</span> <span class="nf">logger</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the logger instance of the Experiment Controller</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_logger</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="ExperimentController.fm"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.fm">[docs]</a>    <span class="k">def</span> <span class="nf">fm</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the failure manager</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fm</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="ExperimentController.failure_level"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.failure_level">[docs]</a>    <span class="k">def</span> <span class="nf">failure_level</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the level of FAILURE of th experiment</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fm</span><span class="o">.</span><span class="n">_failure_level</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="ExperimentController.ecstate"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.ecstate">[docs]</a>    <span class="k">def</span> <span class="nf">ecstate</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the state of the Experiment Controller</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="ExperimentController.exp_id"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.exp_id">[docs]</a>    <span class="k">def</span> <span class="nf">exp_id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the experiment id assigned by the user</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_exp_id</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="ExperimentController.run_id"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.run_id">[docs]</a>    <span class="k">def</span> <span class="nf">run_id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the experiment instance (run) identifier (automatically </span>
+<span class="sd">        generated)</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_run_id</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="ExperimentController.nthreads"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.nthreads">[docs]</a>    <span class="k">def</span> <span class="nf">nthreads</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the number of processing nthreads used</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_nthreads</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="ExperimentController.local_dir"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.local_dir">[docs]</a>    <span class="k">def</span> <span class="nf">local_dir</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Root local directory for experiment files</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_local_dir</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="ExperimentController.exp_dir"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.exp_dir">[docs]</a>    <span class="k">def</span> <span class="nf">exp_dir</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Local directory to store results and other files related to the </span>
+<span class="sd">        experiment.</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_exp_dir</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="ExperimentController.run_dir"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.run_dir">[docs]</a>    <span class="k">def</span> <span class="nf">run_dir</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Local directory to store results and other files related to the </span>
+<span class="sd">        experiment run.</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_run_dir</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="ExperimentController.persist"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.persist">[docs]</a>    <span class="k">def</span> <span class="nf">persist</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; If True, persists the ExperimentController to XML format upon </span>
+<span class="sd">        experiment completion</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_persist</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="ExperimentController.netgraph"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.netgraph">[docs]</a>    <span class="k">def</span> <span class="nf">netgraph</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Return NetGraph instance if experiment description was automatically </span>
+<span class="sd">        generated</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_netgraph</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="ExperimentController.abort"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.abort">[docs]</a>    <span class="k">def</span> <span class="nf">abort</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns True if the experiment has failed and should be interrupted,</span>
+<span class="sd">        False otherwise.</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fm</span><span class="o">.</span><span class="n">abort</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.inform_failure"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.inform_failure">[docs]</a>    <span class="k">def</span> <span class="nf">inform_failure</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Reports a failure in a RM to the EC for evaluation</span>
+
+<span class="sd">            :param guid: Resource id</span>
+<span class="sd">            :type guid: int</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fm</span><span class="o">.</span><span class="n">eval_failure</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.wait_finished"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.wait_finished">[docs]</a>    <span class="k">def</span> <span class="nf">wait_finished</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guids</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Blocking method that waits until all RMs in the &#39;guids&#39; list </span>
+<span class="sd">        have reached a state &gt;= STOPPED (i.e. STOPPED, FAILED or </span>
+<span class="sd">        RELEASED ), or until a failure in the experiment occurs </span>
+<span class="sd">        (i.e. abort == True) </span>
+<span class="sd">        </span>
+<span class="sd">            :param guids: List of guids</span>
+<span class="sd">            :type guids: list</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+
+        <span class="k">def</span> <span class="nf">quit</span><span class="p">():</span>
+            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">abort</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">wait</span><span class="p">(</span><span class="n">guids</span><span class="p">,</span> <span class="n">state</span> <span class="o">=</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STOPPED</span><span class="p">,</span> 
+                <span class="n">quit</span> <span class="o">=</span> <span class="n">quit</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.wait_started"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.wait_started">[docs]</a>    <span class="k">def</span> <span class="nf">wait_started</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guids</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Blocking method that waits until all RMs in the &#39;guids&#39; list </span>
+<span class="sd">        have reached a state &gt;= STARTED, or until a failure in the </span>
+<span class="sd">        experiment occurs (i.e. abort == True) </span>
+<span class="sd">        </span>
+<span class="sd">            :param guids: List of guids</span>
+<span class="sd">            :type guids: list</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+
+        <span class="k">def</span> <span class="nf">quit</span><span class="p">():</span>
+            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">abort</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">wait</span><span class="p">(</span><span class="n">guids</span><span class="p">,</span> <span class="n">state</span> <span class="o">=</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">,</span> 
+                <span class="n">quit</span> <span class="o">=</span> <span class="n">quit</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.wait_released"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.wait_released">[docs]</a>    <span class="k">def</span> <span class="nf">wait_released</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guids</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Blocking method that waits until all RMs in the &#39;guids&#39; list </span>
+<span class="sd">        have reached a state == RELEASED, or until the EC fails </span>
+<span class="sd">        </span>
+<span class="sd">            :param guids: List of guids</span>
+<span class="sd">            :type guids: list</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+
+        <span class="k">def</span> <span class="nf">quit</span><span class="p">():</span>
+            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">==</span> <span class="n">ECState</span><span class="o">.</span><span class="n">FAILED</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">wait</span><span class="p">(</span><span class="n">guids</span><span class="p">,</span> <span class="n">state</span> <span class="o">=</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span><span class="p">,</span> 
+                <span class="n">quit</span> <span class="o">=</span> <span class="n">quit</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.wait_deployed"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.wait_deployed">[docs]</a>    <span class="k">def</span> <span class="nf">wait_deployed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guids</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Blocking method that waits until all RMs in the &#39;guids&#39; list </span>
+<span class="sd">        have reached a state &gt;= READY, or until a failure in the </span>
+<span class="sd">        experiment occurs (i.e. abort == True) </span>
+<span class="sd">        </span>
+<span class="sd">            :param guids: List of guids</span>
+<span class="sd">            :type guids: list</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+
+        <span class="k">def</span> <span class="nf">quit</span><span class="p">():</span>
+            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">abort</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">wait</span><span class="p">(</span><span class="n">guids</span><span class="p">,</span> <span class="n">state</span> <span class="o">=</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">,</span> 
+                <span class="n">quit</span> <span class="o">=</span> <span class="n">quit</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.wait"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.wait">[docs]</a>    <span class="k">def</span> <span class="nf">wait</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guids</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">quit</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Blocking method that waits until all RMs in the &#39;guids&#39; list </span>
+<span class="sd">        have reached a state &gt;= &#39;state&#39;, or until the &#39;quit&#39; callback</span>
+<span class="sd">        yields True</span>
+<span class="sd">           </span>
+<span class="sd">            :param guids: List of guids</span>
+<span class="sd">            :type guids: list</span>
+<span class="sd">        </span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">guids</span><span class="p">,</span> <span class="nb">int</span><span class="p">):</span>
+            <span class="n">guids</span> <span class="o">=</span> <span class="p">[</span><span class="n">guids</span><span class="p">]</span>
+
+        <span class="c"># Make a copy to avoid modifying the original guids list</span>
+        <span class="n">guids</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">guids</span><span class="p">)</span>
+
+        <span class="k">while</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="c"># If there are no more guids to wait for</span>
+            <span class="c"># or the quit function returns True, exit the loop</span>
+            <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">guids</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">quit</span><span class="p">():</span>
+                <span class="k">break</span>
+
+            <span class="c"># If a guid reached one of the target states, remove it from list</span>
+            <span class="n">guid</span> <span class="o">=</span> <span class="n">guids</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
+            <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+            <span class="n">rstate</span> <span class="o">=</span> <span class="n">rm</span><span class="o">.</span><span class="n">state</span>
+            
+            <span class="k">if</span> <span class="n">rstate</span> <span class="o">&gt;=</span> <span class="n">state</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot; </span><span class="si">%s</span><span class="s"> guid </span><span class="si">%d</span><span class="s"> DONE - state is </span><span class="si">%s</span><span class="s">, required is &gt;= </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="p">(</span>
+                    <span class="n">rm</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">(),</span> <span class="n">guid</span><span class="p">,</span> <span class="n">rstate</span><span class="p">,</span> <span class="n">state</span><span class="p">))</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="c"># Debug...</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot; WAITING FOR guid </span><span class="si">%d</span><span class="s"> - state is </span><span class="si">%s</span><span class="s">, required is &gt;= </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="p">(</span>
+                    <span class="n">guid</span><span class="p">,</span> <span class="n">rstate</span><span class="p">,</span> <span class="n">state</span><span class="p">))</span>
+
+                <span class="n">guids</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+
+                <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mf">0.5</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.plot"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.plot">[docs]</a>    <span class="k">def</span> <span class="nf">plot</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dirpath</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">format</span><span class="o">=</span> <span class="n">PFormats</span><span class="o">.</span><span class="n">FIGURE</span><span class="p">,</span> <span class="n">show</span> <span class="o">=</span> <span class="bp">False</span><span class="p">):</span>
+        <span class="n">plotter</span> <span class="o">=</span> <span class="n">ECPlotter</span><span class="p">()</span>
+        <span class="n">fpath</span> <span class="o">=</span> <span class="n">plotter</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dirpath</span> <span class="o">=</span> <span class="n">dirpath</span><span class="p">,</span> <span class="n">format</span><span class="o">=</span> <span class="n">format</span><span class="p">,</span> 
+                <span class="n">show</span> <span class="o">=</span> <span class="n">show</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">fpath</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.serialize"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.serialize">[docs]</a>    <span class="k">def</span> <span class="nf">serialize</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">format</span> <span class="o">=</span> <span class="n">SFormats</span><span class="o">.</span><span class="n">XML</span><span class="p">):</span>
+        <span class="n">serializer</span> <span class="o">=</span> <span class="n">ECSerializer</span><span class="p">()</span>
+        <span class="n">sec</span> <span class="o">=</span> <span class="n">serializer</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">format</span> <span class="o">=</span> <span class="n">format</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">sec</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.save"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.save">[docs]</a>    <span class="k">def</span> <span class="nf">save</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dirpath</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">format</span> <span class="o">=</span> <span class="n">SFormats</span><span class="o">.</span><span class="n">XML</span><span class="p">):</span>
+        <span class="k">if</span> <span class="n">dirpath</span> <span class="o">==</span> <span class="bp">None</span><span class="p">:</span>
+            <span class="n">dirpath</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_dir</span>
+
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="n">dirpath</span><span class="p">)</span>
+        <span class="k">except</span> <span class="ne">OSError</span><span class="p">:</span>
+            <span class="k">pass</span>
+
+        <span class="n">serializer</span> <span class="o">=</span> <span class="n">ECSerializer</span><span class="p">()</span>
+        <span class="n">path</span> <span class="o">=</span> <span class="n">serializer</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dirpath</span><span class="p">,</span> <span class="n">format</span> <span class="o">=</span> <span class="n">format</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">path</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.get_task"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.get_task">[docs]</a>    <span class="k">def</span> <span class="nf">get_task</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns a task by its id</span>
+
+<span class="sd">            :param tid: Id of the task</span>
+<span class="sd">            :type tid: int</span>
+<span class="sd">            </span>
+<span class="sd">            :rtype: Task</span>
+<span class="sd">            </span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tasks</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">tid</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.get_resource"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.get_resource">[docs]</a>    <span class="k">def</span> <span class="nf">get_resource</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns a registered ResourceManager by its guid</span>
+
+<span class="sd">            :param guid: Id of the resource</span>
+<span class="sd">            :type guid: int</span>
+<span class="sd">            </span>
+<span class="sd">            :rtype: ResourceManager</span>
+<span class="sd">            </span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_resources</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">rm</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.get_resources_by_type"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.get_resources_by_type">[docs]</a>    <span class="k">def</span> <span class="nf">get_resources_by_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">rtype</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the ResourceManager objects of type rtype</span>
+
+<span class="sd">            :param rtype: Resource type</span>
+<span class="sd">            :type rtype: string</span>
+<span class="sd">            </span>
+<span class="sd">            :rtype: list of ResourceManagers</span>
+<span class="sd">            </span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">rms</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="k">for</span> <span class="n">guid</span><span class="p">,</span> <span class="n">rm</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_resources</span><span class="o">.</span><span class="n">iteritems</span><span class="p">():</span>
+            <span class="k">if</span> <span class="n">rm</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">()</span> <span class="o">==</span> <span class="n">rtype</span><span class="p">:</span> 
+                <span class="n">rms</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">rm</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">rms</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.remove_resource"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.remove_resource">[docs]</a>    <span class="k">def</span> <span class="nf">remove_resource</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">_resources</span><span class="p">[</span><span class="n">guid</span><span class="p">]</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="ExperimentController.resources"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.resources">[docs]</a>    <span class="k">def</span> <span class="nf">resources</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the guids of all ResourceManagers </span>
+
+<span class="sd">            :return: Set of all RM guids</span>
+<span class="sd">            :rtype: list</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">keys</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_resources</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span>
+
+        <span class="k">return</span> <span class="n">keys</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.filter_resources"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.filter_resources">[docs]</a>    <span class="k">def</span> <span class="nf">filter_resources</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">rtype</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the guids of all ResourceManagers of type rtype</span>
+
+<span class="sd">            :param rtype: Resource type</span>
+<span class="sd">            :type rtype: string</span>
+<span class="sd">            </span>
+<span class="sd">            :rtype: list of guids</span>
+<span class="sd">            </span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">rms</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="k">for</span> <span class="n">guid</span><span class="p">,</span> <span class="n">rm</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_resources</span><span class="o">.</span><span class="n">iteritems</span><span class="p">():</span>
+            <span class="k">if</span> <span class="n">rm</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">()</span> <span class="o">==</span> <span class="n">rtype</span><span class="p">:</span> 
+                <span class="n">rms</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">rm</span><span class="o">.</span><span class="n">guid</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">rms</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.register_resource"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.register_resource">[docs]</a>    <span class="k">def</span> <span class="nf">register_resource</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">rtype</span><span class="p">,</span> <span class="n">guid</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Registers a new ResourceManager of type &#39;rtype&#39; in the experiment</span>
+<span class="sd">        </span>
+<span class="sd">        This method will assign a new &#39;guid&#39; for the RM, if no guid</span>
+<span class="sd">        is specified.</span>
+
+<span class="sd">            :param rtype: Type of the RM</span>
+<span class="sd">            :type rtype: str</span>
+
+<span class="sd">            :return: Guid of the RM</span>
+<span class="sd">            :rtype: int</span>
+<span class="sd">            </span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="c"># Get next available guid</span>
+        <span class="n">guid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_guid_generator</span><span class="o">.</span><span class="n">next</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+        
+        <span class="c"># Instantiate RM</span>
+        <span class="n">rm</span> <span class="o">=</span> <span class="n">ResourceFactory</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">rtype</span><span class="p">,</span> <span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+
+        <span class="c"># Store RM</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_resources</span><span class="p">[</span><span class="n">guid</span><span class="p">]</span> <span class="o">=</span> <span class="n">rm</span>
+
+        <span class="k">return</span> <span class="n">guid</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.get_attributes"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.get_attributes">[docs]</a>    <span class="k">def</span> <span class="nf">get_attributes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns all the attributes of the RM with guid &#39;guid&#39;</span>
+
+<span class="sd">            :param guid: Guid of the RM</span>
+<span class="sd">            :type guid: int</span>
+
+<span class="sd">            :return: List of attributes</span>
+<span class="sd">            :rtype: list</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">rm</span><span class="o">.</span><span class="n">get_attributes</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.get_attribute"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.get_attribute">[docs]</a>    <span class="k">def</span> <span class="nf">get_attribute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the attribute &#39;name&#39; of the RM with guid &#39;guid&#39;</span>
+
+<span class="sd">            :param guid: Guid of the RM</span>
+<span class="sd">            :type guid: int</span>
+
+<span class="sd">            :param name: Name of the attribute</span>
+<span class="sd">            :type name: str</span>
+
+<span class="sd">            :return: The attribute with name &#39;name&#39;</span>
+<span class="sd">            :rtype: Attribute</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">rm</span><span class="o">.</span><span class="n">get_attribute</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.register_connection"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.register_connection">[docs]</a>    <span class="k">def</span> <span class="nf">register_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid1</span><span class="p">,</span> <span class="n">guid2</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Registers a connection between a RM with guid &#39;guid1&#39;</span>
+<span class="sd">        and another RM with guid &#39;guid2&#39;. </span>
+<span class="sd">    </span>
+<span class="sd">        The order of the in which the two guids are provided is not</span>
+<span class="sd">        important, since the connection relationship is symmetric.</span>
+
+<span class="sd">            :param guid1: First guid to connect</span>
+<span class="sd">            :type guid1: ResourceManager</span>
+
+<span class="sd">            :param guid2: Second guid to connect</span>
+<span class="sd">            :type guid: ResourceManager</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">rm1</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid1</span><span class="p">)</span>
+        <span class="n">rm2</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid2</span><span class="p">)</span>
+
+        <span class="n">rm1</span><span class="o">.</span><span class="n">register_connection</span><span class="p">(</span><span class="n">guid2</span><span class="p">)</span>
+        <span class="n">rm2</span><span class="o">.</span><span class="n">register_connection</span><span class="p">(</span><span class="n">guid1</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.register_condition"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.register_condition">[docs]</a>    <span class="k">def</span> <span class="nf">register_condition</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guids1</span><span class="p">,</span> <span class="n">action</span><span class="p">,</span> <span class="n">guids2</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span>
+            <span class="n">time</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Registers an action START, STOP or DEPLOY for all RM on list</span>
+<span class="sd">        guids1 to occur at time &#39;time&#39; after all elements in list guids2 </span>
+<span class="sd">        have reached state &#39;state&#39;.</span>
+
+<span class="sd">            :param guids1: List of guids of RMs subjected to action</span>
+<span class="sd">            :type guids1: list</span>
+
+<span class="sd">            :param action: Action to perform (either START, STOP or DEPLOY)</span>
+<span class="sd">            :type action: ResourceAction</span>
+
+<span class="sd">            :param guids2: List of guids of RMs to we waited for</span>
+<span class="sd">            :type guids2: list</span>
+
+<span class="sd">            :param state: State to wait for on RMs of list guids2 (STARTED,</span>
+<span class="sd">                STOPPED, etc)</span>
+<span class="sd">            :type state: ResourceState</span>
+
+<span class="sd">            :param time: Time to wait after guids2 has reached status </span>
+<span class="sd">            :type time: string</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">guids1</span><span class="p">,</span> <span class="nb">int</span><span class="p">):</span>
+            <span class="n">guids1</span> <span class="o">=</span> <span class="p">[</span><span class="n">guids1</span><span class="p">]</span>
+        <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">guids2</span><span class="p">,</span> <span class="nb">int</span><span class="p">):</span>
+            <span class="n">guids2</span> <span class="o">=</span> <span class="p">[</span><span class="n">guids2</span><span class="p">]</span>
+
+        <span class="k">for</span> <span class="n">guid1</span> <span class="ow">in</span> <span class="n">guids1</span><span class="p">:</span>
+            <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid1</span><span class="p">)</span>
+            <span class="n">rm</span><span class="o">.</span><span class="n">register_condition</span><span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">guids2</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.enable_trace"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.enable_trace">[docs]</a>    <span class="k">def</span> <span class="nf">enable_trace</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Enables a trace to be collected during the experiment run</span>
+
+<span class="sd">            :param name: Name of the trace</span>
+<span class="sd">            :type name: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+        <span class="n">rm</span><span class="o">.</span><span class="n">enable_trace</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.trace_enabled"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.trace_enabled">[docs]</a>    <span class="k">def</span> <span class="nf">trace_enabled</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns True if the trace of name &#39;name&#39; is enabled</span>
+
+<span class="sd">            :param name: Name of the trace</span>
+<span class="sd">            :type name: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">rm</span><span class="o">.</span><span class="n">trace_enabled</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.trace"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.trace">[docs]</a>    <span class="k">def</span> <span class="nf">trace</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">attr</span> <span class="o">=</span> <span class="n">TraceAttr</span><span class="o">.</span><span class="n">ALL</span><span class="p">,</span> <span class="n">block</span> <span class="o">=</span> <span class="mi">512</span><span class="p">,</span> <span class="n">offset</span> <span class="o">=</span> <span class="mi">0</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns information on a collected trace, the trace stream or </span>
+<span class="sd">        blocks (chunks) of the trace stream</span>
+
+<span class="sd">            :param name: Name of the trace</span>
+<span class="sd">            :type name: str</span>
+
+<span class="sd">            :param attr: Can be one of:</span>
+<span class="sd">                         - TraceAttr.ALL (complete trace content), </span>
+<span class="sd">                         - TraceAttr.STREAM (block in bytes to read starting </span>
+<span class="sd">                                at offset),</span>
+<span class="sd">                         - TraceAttr.PATH (full path to the trace file),</span>
+<span class="sd">                         - TraceAttr.SIZE (size of trace file). </span>
+<span class="sd">            :type attr: str</span>
+
+<span class="sd">            :param block: Number of bytes to retrieve from trace, when attr is </span>
+<span class="sd">                TraceAttr.STREAM </span>
+<span class="sd">            :type name: int</span>
+
+<span class="sd">            :param offset: Number of &#39;blocks&#39; to skip, when attr is TraceAttr.STREAM </span>
+<span class="sd">            :type name: int</span>
+
+<span class="sd">            :rtype: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">rm</span><span class="o">.</span><span class="n">trace</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="n">block</span><span class="p">,</span> <span class="n">offset</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.get_traces"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.get_traces">[docs]</a>    <span class="k">def</span> <span class="nf">get_traces</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the list of the trace names of the RM with guid &#39;guid&#39;</span>
+
+<span class="sd">            :param guid: Guid of the RM</span>
+<span class="sd">            :type guid: int</span>
+
+<span class="sd">            :return: List of trace names</span>
+<span class="sd">            :rtype: list</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">rm</span><span class="o">.</span><span class="n">get_traces</span><span class="p">()</span>
+
+</div>
+<div class="viewcode-block" id="ExperimentController.discover"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.discover">[docs]</a>    <span class="k">def</span> <span class="nf">discover</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Discovers an available resource matching the criteria defined</span>
+<span class="sd">        by the RM with guid &#39;guid&#39;, and associates that resource to the RM</span>
+
+<span class="sd">        Not all RM types require (or are capable of) performing resource </span>
+<span class="sd">        discovery. For the RM types which are not capable of doing so, </span>
+<span class="sd">        invoking this method does not have any consequences. </span>
+
+<span class="sd">            :param guid: Guid of the RM</span>
+<span class="sd">            :type guid: int</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">rm</span><span class="o">.</span><span class="n">discover</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.provision"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.provision">[docs]</a>    <span class="k">def</span> <span class="nf">provision</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Provisions the resource associated to the RM with guid &#39;guid&#39;.</span>
+
+<span class="sd">        Provisioning means making a resource &#39;accessible&#39; to the user. </span>
+<span class="sd">        Not all RM types require (or are capable of) performing resource </span>
+<span class="sd">        provisioning. For the RM types which are not capable of doing so, </span>
+<span class="sd">        invoking this method does not have any consequences. </span>
+
+<span class="sd">            :param guid: Guid of the RM</span>
+<span class="sd">            :type guid: int</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">rm</span><span class="o">.</span><span class="n">provision</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.get"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.get">[docs]</a>    <span class="k">def</span> <span class="nf">get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the value of the attribute with name &#39;name&#39; on the</span>
+<span class="sd">        RM with guid &#39;guid&#39;</span>
+
+<span class="sd">            :param guid: Guid of the RM</span>
+<span class="sd">            :type guid: int</span>
+
+<span class="sd">            :param name: Name of the attribute </span>
+<span class="sd">            :type name: str</span>
+
+<span class="sd">            :return: The value of the attribute with name &#39;name&#39;</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">rm</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.set"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.set">[docs]</a>    <span class="k">def</span> <span class="nf">set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Modifies the value of the attribute with name &#39;name&#39; on the </span>
+<span class="sd">        RM with guid &#39;guid&#39;.</span>
+
+<span class="sd">            :param guid: Guid of the RM</span>
+<span class="sd">            :type guid: int</span>
+
+<span class="sd">            :param name: Name of the attribute</span>
+<span class="sd">            :type name: str</span>
+
+<span class="sd">            :param value: Value of the attribute</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+        <span class="n">rm</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.get_global"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.get_global">[docs]</a>    <span class="k">def</span> <span class="nf">get_global</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">rtype</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the value of the global attribute with name &#39;name&#39; on the</span>
+<span class="sd">        RMs of rtype &#39;rtype&#39;.</span>
+
+<span class="sd">            :param guid: Guid of the RM</span>
+<span class="sd">            :type guid: int</span>
+
+<span class="sd">            :param name: Name of the attribute </span>
+<span class="sd">            :type name: str</span>
+
+<span class="sd">            :return: The value of the attribute with name &#39;name&#39;</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">rclass</span> <span class="o">=</span> <span class="n">ResourceFactory</span><span class="o">.</span><span class="n">get_resource_type</span><span class="p">(</span><span class="n">rtype</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">rclass</span><span class="o">.</span><span class="n">get_global</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.set_global"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.set_global">[docs]</a>    <span class="k">def</span> <span class="nf">set_global</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">rtype</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Modifies the value of the global attribute with name &#39;name&#39; on the </span>
+<span class="sd">        RMs of with rtype &#39;rtype&#39;.</span>
+
+<span class="sd">            :param guid: Guid of the RM</span>
+<span class="sd">            :type guid: int</span>
+
+<span class="sd">            :param name: Name of the attribute</span>
+<span class="sd">            :type name: str</span>
+
+<span class="sd">            :param value: Value of the attribute</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">rclass</span> <span class="o">=</span> <span class="n">ResourceFactory</span><span class="o">.</span><span class="n">get_resource_type</span><span class="p">(</span><span class="n">rtype</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">rclass</span><span class="o">.</span><span class="n">set_global</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.state"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.state">[docs]</a>    <span class="k">def</span> <span class="nf">state</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">,</span> <span class="n">hr</span> <span class="o">=</span> <span class="bp">False</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the state of a resource</span>
+
+<span class="sd">            :param guid: Resource guid</span>
+<span class="sd">            :type guid: integer</span>
+
+<span class="sd">            :param hr: Human readable. Forces return of a </span>
+<span class="sd">                status string instead of a number </span>
+<span class="sd">            :type hr: boolean</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+        <span class="n">state</span> <span class="o">=</span> <span class="n">rm</span><span class="o">.</span><span class="n">state</span>
+
+        <span class="k">if</span> <span class="n">hr</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">ResourceState2str</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">state</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">state</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.stop"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.stop">[docs]</a>    <span class="k">def</span> <span class="nf">stop</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Stops the RM with guid &#39;guid&#39;</span>
+
+<span class="sd">        Stopping a RM means that the resource it controls will</span>
+<span class="sd">        no longer take part of the experiment.</span>
+
+<span class="sd">            :param guid: Guid of the RM</span>
+<span class="sd">            :type guid: int</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">rm</span><span class="o">.</span><span class="n">stop</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.start"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.start">[docs]</a>    <span class="k">def</span> <span class="nf">start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Starts the RM with guid &#39;guid&#39;</span>
+
+<span class="sd">        Starting a RM means that the resource it controls will</span>
+<span class="sd">        begin taking part of the experiment.</span>
+
+<span class="sd">            :param guid: Guid of the RM</span>
+<span class="sd">            :type guid: int</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">rm</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.get_start_time"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.get_start_time">[docs]</a>    <span class="k">def</span> <span class="nf">get_start_time</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the start time of the RM as a timestamp &quot;&quot;&quot;</span>
+        <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">rm</span><span class="o">.</span><span class="n">start_time</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.get_stop_time"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.get_stop_time">[docs]</a>    <span class="k">def</span> <span class="nf">get_stop_time</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the stop time of the RM as a timestamp &quot;&quot;&quot;</span>
+        <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">rm</span><span class="o">.</span><span class="n">stop_time</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.get_discover_time"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.get_discover_time">[docs]</a>    <span class="k">def</span> <span class="nf">get_discover_time</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the discover time of the RM as a timestamp &quot;&quot;&quot;</span>
+        <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">rm</span><span class="o">.</span><span class="n">discover_time</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.get_provision_time"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.get_provision_time">[docs]</a>    <span class="k">def</span> <span class="nf">get_provision_time</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the provision time of the RM as a timestamp &quot;&quot;&quot;</span>
+        <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">rm</span><span class="o">.</span><span class="n">provision_time</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.get_ready_time"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.get_ready_time">[docs]</a>    <span class="k">def</span> <span class="nf">get_ready_time</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the deployment time of the RM as a timestamp &quot;&quot;&quot;</span>
+        <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">rm</span><span class="o">.</span><span class="n">ready_time</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.get_release_time"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.get_release_time">[docs]</a>    <span class="k">def</span> <span class="nf">get_release_time</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the release time of the RM as a timestamp &quot;&quot;&quot;</span>
+        <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">rm</span><span class="o">.</span><span class="n">release_time</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.get_failed_time"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.get_failed_time">[docs]</a>    <span class="k">def</span> <span class="nf">get_failed_time</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the time failure occured for the RM as a timestamp &quot;&quot;&quot;</span>
+        <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">rm</span><span class="o">.</span><span class="n">failed_time</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.set_with_conditions"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.set_with_conditions">[docs]</a>    <span class="k">def</span> <span class="nf">set_with_conditions</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">guids1</span><span class="p">,</span> <span class="n">guids2</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span>
+            <span class="n">time</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Modifies the value of attribute with name &#39;name&#39; on all RMs </span>
+<span class="sd">        on the guids1 list when time &#39;time&#39; has elapsed since all </span>
+<span class="sd">        elements in guids2 list have reached state &#39;state&#39;.</span>
+
+<span class="sd">            :param name: Name of attribute to set in RM</span>
+<span class="sd">            :type name: string</span>
+
+<span class="sd">            :param value: Value of attribute to set in RM</span>
+<span class="sd">            :type name: string</span>
+
+<span class="sd">            :param guids1: List of guids of RMs subjected to action</span>
+<span class="sd">            :type guids1: list</span>
+
+<span class="sd">            :param action: Action to register (either START or STOP)</span>
+<span class="sd">            :type action: ResourceAction</span>
+
+<span class="sd">            :param guids2: List of guids of RMs to we waited for</span>
+<span class="sd">            :type guids2: list</span>
+
+<span class="sd">            :param state: State to wait for on RMs (STARTED, STOPPED, etc)</span>
+<span class="sd">            :type state: ResourceState</span>
+
+<span class="sd">            :param time: Time to wait after guids2 has reached status </span>
+<span class="sd">            :type time: string</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">guids1</span><span class="p">,</span> <span class="nb">int</span><span class="p">):</span>
+            <span class="n">guids1</span> <span class="o">=</span> <span class="p">[</span><span class="n">guids1</span><span class="p">]</span>
+        <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">guids2</span><span class="p">,</span> <span class="nb">int</span><span class="p">):</span>
+            <span class="n">guids2</span> <span class="o">=</span> <span class="p">[</span><span class="n">guids2</span><span class="p">]</span>
+
+        <span class="k">for</span> <span class="n">guid1</span> <span class="ow">in</span> <span class="n">guids1</span><span class="p">:</span>
+            <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+            <span class="n">rm</span><span class="o">.</span><span class="n">set_with_conditions</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">guids2</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.deploy"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.deploy">[docs]</a>    <span class="k">def</span> <span class="nf">deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guids</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">wait_all_ready</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span> <span class="n">group</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Deploys all ResourceManagers in the guids list. </span>
+<span class="sd">        </span>
+<span class="sd">        If the argument &#39;guids&#39; is not given, all RMs with state NEW</span>
+<span class="sd">        are deployed.</span>
+
+<span class="sd">            :param guids: List of guids of RMs to deploy</span>
+<span class="sd">            :type guids: list</span>
+
+<span class="sd">            :param wait_all_ready: Wait until all RMs are ready in</span>
+<span class="sd">                order to start the RMs</span>
+<span class="sd">            :type guid: int</span>
+
+<span class="sd">            :param group: Id of deployment group in which to deploy RMs</span>
+<span class="sd">            :type group: int</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot; ------- DEPLOY START ------ &quot;</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">guids</span><span class="p">:</span>
+            <span class="c"># If no guids list was passed, all &#39;NEW&#39; RMs will be deployed</span>
+            <span class="n">guids</span> <span class="o">=</span> <span class="p">[]</span>
+            <span class="k">for</span> <span class="n">guid</span><span class="p">,</span> <span class="n">rm</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_resources</span><span class="o">.</span><span class="n">iteritems</span><span class="p">():</span>
+                <span class="k">if</span> <span class="n">rm</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">NEW</span><span class="p">:</span>
+                    <span class="n">guids</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+                
+        <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">guids</span><span class="p">,</span> <span class="nb">int</span><span class="p">):</span>
+            <span class="n">guids</span> <span class="o">=</span> <span class="p">[</span><span class="n">guids</span><span class="p">]</span>
+
+        <span class="c"># Create deployment group</span>
+        <span class="c"># New guids can be added to a same deployment group later on</span>
+        <span class="n">new_group</span> <span class="o">=</span> <span class="bp">False</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">group</span><span class="p">:</span>
+            <span class="n">new_group</span> <span class="o">=</span> <span class="bp">True</span>
+            <span class="n">group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_group_id_generator</span><span class="o">.</span><span class="n">next</span><span class="p">()</span>
+
+        <span class="k">if</span> <span class="n">group</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_groups</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_groups</span><span class="p">[</span><span class="n">group</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">_groups</span><span class="p">[</span><span class="n">group</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">guids</span><span class="p">)</span>
+
+        <span class="k">def</span> <span class="nf">wait_all_and_start</span><span class="p">(</span><span class="n">group</span><span class="p">):</span>
+            <span class="c"># Function that checks if all resources are READY</span>
+            <span class="c"># before scheduling a start_with_conditions for each RM</span>
+            <span class="n">reschedule</span> <span class="o">=</span> <span class="bp">False</span>
+            
+            <span class="c"># Get all guids in group</span>
+            <span class="n">guids</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_groups</span><span class="p">[</span><span class="n">group</span><span class="p">]</span>
+
+            <span class="k">for</span> <span class="n">guid</span> <span class="ow">in</span> <span class="n">guids</span><span class="p">:</span>
+                <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+                    <span class="n">reschedule</span> <span class="o">=</span> <span class="bp">True</span>
+                    <span class="k">break</span>
+
+            <span class="k">if</span> <span class="n">reschedule</span><span class="p">:</span>
+                <span class="n">callback</span> <span class="o">=</span> <span class="n">functools</span><span class="o">.</span><span class="n">partial</span><span class="p">(</span><span class="n">wait_all_and_start</span><span class="p">,</span> <span class="n">group</span><span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="s">&quot;1s&quot;</span><span class="p">,</span> <span class="n">callback</span><span class="p">)</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="c"># If all resources are ready, we schedule the start</span>
+                <span class="k">for</span> <span class="n">guid</span> <span class="ow">in</span> <span class="n">guids</span><span class="p">:</span>
+                    <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="s">&quot;0s&quot;</span><span class="p">,</span> <span class="n">rm</span><span class="o">.</span><span class="n">start_with_conditions</span><span class="p">)</span>
+
+                    <span class="k">if</span> <span class="n">rm</span><span class="o">.</span><span class="n">conditions</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">ResourceAction</span><span class="o">.</span><span class="n">STOP</span><span class="p">):</span>
+                        <span class="c"># Only if the RM has STOP conditions we</span>
+                        <span class="c"># schedule a stop. Otherwise the RM will stop immediately</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="s">&quot;0s&quot;</span><span class="p">,</span> <span class="n">rm</span><span class="o">.</span><span class="n">stop_with_conditions</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">wait_all_ready</span> <span class="ow">and</span> <span class="n">new_group</span><span class="p">:</span>
+            <span class="c"># Schedule a function to check that all resources are</span>
+            <span class="c"># READY, and only then schedule the start.</span>
+            <span class="c"># This aims at reducing the number of tasks looping in the </span>
+            <span class="c"># scheduler. </span>
+            <span class="c"># Instead of having many start tasks, we will have only one for </span>
+            <span class="c"># the whole group.</span>
+            <span class="n">callback</span> <span class="o">=</span> <span class="n">functools</span><span class="o">.</span><span class="n">partial</span><span class="p">(</span><span class="n">wait_all_and_start</span><span class="p">,</span> <span class="n">group</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="s">&quot;0s&quot;</span><span class="p">,</span> <span class="n">callback</span><span class="p">)</span>
+
+        <span class="k">for</span> <span class="n">guid</span> <span class="ow">in</span> <span class="n">guids</span><span class="p">:</span>
+            <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+            <span class="n">rm</span><span class="o">.</span><span class="n">deployment_group</span> <span class="o">=</span> <span class="n">group</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="s">&quot;0s&quot;</span><span class="p">,</span> <span class="n">rm</span><span class="o">.</span><span class="n">deploy_with_conditions</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="ow">not</span> <span class="n">wait_all_ready</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="s">&quot;0s&quot;</span><span class="p">,</span> <span class="n">rm</span><span class="o">.</span><span class="n">start_with_conditions</span><span class="p">)</span>
+
+                <span class="k">if</span> <span class="n">rm</span><span class="o">.</span><span class="n">conditions</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">ResourceAction</span><span class="o">.</span><span class="n">STOP</span><span class="p">):</span>
+                    <span class="c"># Only if the RM has STOP conditions we</span>
+                    <span class="c"># schedule a stop. Otherwise the RM will stop immediately</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="s">&quot;0s&quot;</span><span class="p">,</span> <span class="n">rm</span><span class="o">.</span><span class="n">stop_with_conditions</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.release"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.release">[docs]</a>    <span class="k">def</span> <span class="nf">release</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guids</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Releases all ResourceManagers in the guids list.</span>
+
+<span class="sd">        If the argument &#39;guids&#39; is not given, all RMs registered</span>
+<span class="sd">        in the experiment are released.</span>
+
+<span class="sd">            :param guids: List of RM guids</span>
+<span class="sd">            :type guids: list</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">==</span> <span class="n">ECState</span><span class="o">.</span><span class="n">RELEASED</span><span class="p">:</span>
+           <span class="k">return</span> 
+
+        <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">guids</span><span class="p">,</span> <span class="nb">int</span><span class="p">):</span>
+            <span class="n">guids</span> <span class="o">=</span> <span class="p">[</span><span class="n">guids</span><span class="p">]</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">guids</span><span class="p">:</span>
+            <span class="n">guids</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">resources</span>
+
+        <span class="k">for</span> <span class="n">guid</span> <span class="ow">in</span> <span class="n">guids</span><span class="p">:</span>
+            <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="s">&quot;0s&quot;</span><span class="p">,</span> <span class="n">rm</span><span class="o">.</span><span class="n">release</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">wait_released</span><span class="p">(</span><span class="n">guids</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">persist</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+
+        <span class="k">for</span> <span class="n">guid</span> <span class="ow">in</span> <span class="n">guids</span><span class="p">:</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">guid</span><span class="p">,</span> <span class="s">&quot;hardRelease&quot;</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">remove_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>\
+
+        <span class="c"># Mark the EC state as RELEASED</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">=</span> <span class="n">ECState</span><span class="o">.</span><span class="n">RELEASED</span>
+        </div>
+<div class="viewcode-block" id="ExperimentController.shutdown"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.shutdown">[docs]</a>    <span class="k">def</span> <span class="nf">shutdown</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Releases all resources and stops the ExperimentController</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="c"># If there was a major failure we can&#39;t exit gracefully</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">==</span> <span class="n">ECState</span><span class="o">.</span><span class="n">FAILED</span><span class="p">:</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s">&quot;EC failure. Can not exit gracefully&quot;</span><span class="p">)</span>
+
+        <span class="c"># Remove all pending tasks from the scheduler queue</span>
+        <span class="k">for</span> <span class="n">tid</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_scheduler</span><span class="o">.</span><span class="n">pending</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_scheduler</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">tid</span><span class="p">)</span>
+
+        <span class="c"># Remove pending tasks from the workers queue</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_runner</span><span class="o">.</span><span class="n">empty</span><span class="p">()</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">release</span><span class="p">()</span>
+
+        <span class="c"># Mark the EC state as TERMINATED</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">=</span> <span class="n">ECState</span><span class="o">.</span><span class="n">TERMINATED</span>
+
+        <span class="c"># Stop processing thread</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_stop</span> <span class="o">=</span> <span class="bp">True</span>
+
+        <span class="c"># Notify condition to wake up the processing thread</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_notify</span><span class="p">()</span>
+        
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_thread</span><span class="o">.</span><span class="n">is_alive</span><span class="p">():</span>
+           <span class="bp">self</span><span class="o">.</span><span class="n">_thread</span><span class="o">.</span><span class="n">join</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="ExperimentController.schedule"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.schedule">[docs]</a>    <span class="k">def</span> <span class="nf">schedule</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">date</span><span class="p">,</span> <span class="n">callback</span><span class="p">,</span> <span class="n">track</span> <span class="o">=</span> <span class="bp">False</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Schedules a callback to be executed at time &#39;date&#39;.</span>
+
+<span class="sd">            :param date: string containing execution time for the task.</span>
+<span class="sd">                    It can be expressed as an absolute time, using</span>
+<span class="sd">                    timestamp format, or as a relative time matching</span>
+<span class="sd">                    ^\d+.\d+(h|m|s|ms|us)$</span>
+
+<span class="sd">            :param callback: code to be executed for the task. Must be a</span>
+<span class="sd">                        Python function, and receives args and kwargs</span>
+<span class="sd">                        as arguments.</span>
+
+<span class="sd">            :param track: if set to True, the task will be retrievable with</span>
+<span class="sd">                    the get_task() method</span>
+
+<span class="sd">            :return : The Id of the task</span>
+<span class="sd">            :rtype: int</span>
+<span class="sd">            </span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">timestamp</span> <span class="o">=</span> <span class="n">stabsformat</span><span class="p">(</span><span class="n">date</span><span class="p">)</span>
+        <span class="n">task</span> <span class="o">=</span> <span class="n">Task</span><span class="p">(</span><span class="n">timestamp</span><span class="p">,</span> <span class="n">callback</span><span class="p">)</span>
+        <span class="n">task</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_scheduler</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="n">task</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">track</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_tasks</span><span class="p">[</span><span class="n">task</span><span class="o">.</span><span class="n">id</span><span class="p">]</span> <span class="o">=</span> <span class="n">task</span>
+
+        <span class="c"># Notify condition to wake up the processing thread</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_notify</span><span class="p">()</span>
+
+        <span class="k">return</span> <span class="n">task</span><span class="o">.</span><span class="n">id</span>
+     </div>
+    <span class="k">def</span> <span class="nf">_process</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Process scheduled tasks.</span>
+
+<span class="sd">        .. note::</span>
+<span class="sd">        </span>
+<span class="sd">        Tasks are scheduled by invoking the schedule method with a target </span>
+<span class="sd">        callback and an execution time. </span>
+<span class="sd">        The schedule method creates a new Task object with that callback </span>
+<span class="sd">        and execution time, and pushes it into the &#39;_scheduler&#39; queue. </span>
+<span class="sd">        The execution time and the order of arrival of tasks are used </span>
+<span class="sd">        to order the tasks in the queue.</span>
+
+<span class="sd">        The _process method is executed in an independent thread held by </span>
+<span class="sd">        the ExperimentController for as long as the experiment is running.</span>
+<span class="sd">        This method takes tasks from the &#39;_scheduler&#39; queue in a loop </span>
+<span class="sd">        and processes them in parallel using multithreading. </span>
+<span class="sd">        The environmental variable NEPI_NTHREADS can be used to control</span>
+<span class="sd">        the number of threads used to process tasks. The default value is </span>
+<span class="sd">        50.</span>
+
+<span class="sd">        To execute tasks in parallel, a ParallelRunner (PR) object is used.</span>
+<span class="sd">        This object keeps a pool of threads (workers), and a queue of tasks</span>
+<span class="sd">        scheduled for &#39;immediate&#39; execution. </span>
+<span class="sd">        </span>
+<span class="sd">        On each iteration, the &#39;_process&#39; loop will take the next task that </span>
+<span class="sd">        is scheduled for &#39;future&#39; execution from the &#39;_scheduler&#39; queue, </span>
+<span class="sd">        and if the execution time of that task is &gt;= to the current time, </span>
+<span class="sd">        it will push that task into the PR for &#39;immediate execution&#39;. </span>
+<span class="sd">        As soon as a worker is free, the PR will assign the next task to</span>
+<span class="sd">        that worker.</span>
+
+<span class="sd">        Upon receiving a task to execute, each PR worker (thread) will </span>
+<span class="sd">        invoke the  _execute method of the EC, passing the task as </span>
+<span class="sd">        argument.         </span>
+<span class="sd">        The _execute method will then invoke task.callback inside a </span>
+<span class="sd">        try/except block. If an exception is raised by the tasks.callback, </span>
+<span class="sd">        it will be trapped by the try block, logged to standard error </span>
+<span class="sd">        (usually the console), and the task will be marked as failed.</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">_nthreads</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;NEPI_NTHREADS&quot;</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_nthreads</span><span class="p">)))</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_runner</span> <span class="o">=</span> <span class="n">ParallelRun</span><span class="p">(</span><span class="n">maxthreads</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">nthreads</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_runner</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
+
+        <span class="k">while</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_stop</span><span class="p">:</span>
+            <span class="k">try</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_cond</span><span class="o">.</span><span class="n">acquire</span><span class="p">()</span>
+
+                <span class="n">task</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_scheduler</span><span class="o">.</span><span class="n">next</span><span class="p">()</span>
+                
+                <span class="k">if</span> <span class="ow">not</span> <span class="n">task</span><span class="p">:</span>
+                    <span class="c"># No task to execute. Wait for a new task to be scheduled.</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">_cond</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span>
+                <span class="k">else</span><span class="p">:</span>
+                    <span class="c"># The task timestamp is in the future. Wait for timeout </span>
+                    <span class="c"># or until another task is scheduled.</span>
+                    <span class="n">now</span> <span class="o">=</span> <span class="n">tnow</span><span class="p">()</span>
+                    <span class="k">if</span> <span class="n">now</span> <span class="o">&lt;</span> <span class="n">task</span><span class="o">.</span><span class="n">timestamp</span><span class="p">:</span>
+                        <span class="c"># Calculate timeout in seconds</span>
+                        <span class="n">timeout</span> <span class="o">=</span> <span class="n">tdiffsec</span><span class="p">(</span><span class="n">task</span><span class="o">.</span><span class="n">timestamp</span><span class="p">,</span> <span class="n">now</span><span class="p">)</span>
+
+                        <span class="c"># Re-schedule task with the same timestamp</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">_scheduler</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="n">task</span><span class="p">)</span>
+                        
+                        <span class="n">task</span> <span class="o">=</span> <span class="bp">None</span>
+
+                        <span class="c"># Wait timeout or until a new task awakes the condition</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">_cond</span><span class="o">.</span><span class="n">wait</span><span class="p">(</span><span class="n">timeout</span><span class="p">)</span>
+               
+                <span class="bp">self</span><span class="o">.</span><span class="n">_cond</span><span class="o">.</span><span class="n">release</span><span class="p">()</span>
+
+                <span class="k">if</span> <span class="n">task</span><span class="p">:</span>
+                    <span class="c"># Process tasks in parallel</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">_runner</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_execute</span><span class="p">,</span> <span class="n">task</span><span class="p">)</span>
+            <span class="k">except</span><span class="p">:</span> 
+                <span class="kn">import</span> <span class="nn">traceback</span>
+                <span class="n">err</span> <span class="o">=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">()</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s">&quot;Error while processing tasks in the EC: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">err</span><span class="p">)</span>
+
+                <span class="c"># Set the EC to FAILED state </span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">=</span> <span class="n">ECState</span><span class="o">.</span><span class="n">FAILED</span>
+            
+                <span class="c"># Set the FailureManager failure level to EC failure</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_fm</span><span class="o">.</span><span class="n">set_ec_failure</span><span class="p">()</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;Exiting the task processing loop ... &quot;</span><span class="p">)</span>
+        
+        <span class="bp">self</span><span class="o">.</span><span class="n">_runner</span><span class="o">.</span><span class="n">sync</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_runner</span><span class="o">.</span><span class="n">destroy</span><span class="p">()</span>
+
+    <span class="k">def</span> <span class="nf">_execute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">task</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Executes a single task. </span>
+
+<span class="sd">            :param task: Object containing the callback to execute</span>
+<span class="sd">            :type task: Task</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="c"># Invoke callback</span>
+            <span class="n">task</span><span class="o">.</span><span class="n">result</span> <span class="o">=</span> <span class="n">task</span><span class="o">.</span><span class="n">callback</span><span class="p">()</span>
+            <span class="n">task</span><span class="o">.</span><span class="n">status</span> <span class="o">=</span> <span class="n">TaskStatus</span><span class="o">.</span><span class="n">DONE</span>
+        <span class="k">except</span><span class="p">:</span>
+            <span class="kn">import</span> <span class="nn">traceback</span>
+            <span class="n">err</span> <span class="o">=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">()</span>
+            <span class="n">task</span><span class="o">.</span><span class="n">result</span> <span class="o">=</span> <span class="n">err</span>
+            <span class="n">task</span><span class="o">.</span><span class="n">status</span> <span class="o">=</span> <span class="n">TaskStatus</span><span class="o">.</span><span class="n">ERROR</span>
+            
+            <span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s">&quot;Error occurred while executing task: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">err</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_notify</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Awakes the processing thread if it is blocked waiting </span>
+<span class="sd">        for new tasks to arrive</span>
+<span class="sd">        </span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_cond</span><span class="o">.</span><span class="n">acquire</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_cond</span><span class="o">.</span><span class="n">notify</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_cond</span><span class="o">.</span><span class="n">release</span><span class="p">()</span>
+
+    <span class="k">def</span> <span class="nf">_build_from_netgraph</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">add_node_callback</span><span class="p">,</span> <span class="n">add_edge_callback</span><span class="p">,</span> 
+            <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Automates experiment description using a NetGraph instance.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_netgraph</span> <span class="o">=</span> <span class="n">NetGraph</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">add_node_callback</span><span class="p">:</span>
+            <span class="c">### Add resources to the EC</span>
+            <span class="k">for</span> <span class="n">nid</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">netgraph</span><span class="o">.</span><span class="n">nodes</span><span class="p">():</span>
+                <span class="n">add_node_callback</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nid</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">add_edge_callback</span><span class="p">:</span>
+            <span class="c">#### Add connections between resources</span>
+            <span class="k">for</span> <span class="n">nid1</span><span class="p">,</span> <span class="n">nid2</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">netgraph</span><span class="o">.</span><span class="n">edges</span><span class="p">():</span>
+                <span class="n">add_edge_callback</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nid1</span><span class="p">,</span> <span class="n">nid2</span><span class="p">)</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/execution/resource.html b/doc/sphinx/_build/html/_modules/nepi/execution/resource.html
new file mode 100644 (file)
index 0000000..dd535d7
--- /dev/null
@@ -0,0 +1,1326 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.execution.resource &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../index.html" />
+    <link rel="up" title="Module code" href="../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.execution.resource</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.util.timefuncs</span> <span class="kn">import</span> <span class="n">tnow</span><span class="p">,</span> <span class="n">tdiff</span><span class="p">,</span> <span class="n">tdiffsec</span><span class="p">,</span> <span class="n">stabsformat</span>
+<span class="kn">from</span> <span class="nn">nepi.util.logger</span> <span class="kn">import</span> <span class="n">Logger</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">TraceAttr</span>
+
+<span class="kn">import</span> <span class="nn">copy</span>
+<span class="kn">import</span> <span class="nn">functools</span>
+<span class="kn">import</span> <span class="nn">logging</span>
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">pkgutil</span>
+<span class="kn">import</span> <span class="nn">sys</span>
+<span class="kn">import</span> <span class="nn">threading</span>
+<span class="kn">import</span> <span class="nn">weakref</span>
+
+<div class="viewcode-block" id="ResourceAction"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceAction">[docs]</a><span class="k">class</span> <span class="nc">ResourceAction</span><span class="p">:</span>
+    <span class="sd">&quot;&quot;&quot; Action that a user can order to a Resource Manager</span>
+<span class="sd">   </span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">DEPLOY</span> <span class="o">=</span> <span class="mi">0</span>
+    <span class="n">START</span> <span class="o">=</span> <span class="mi">1</span>
+    <span class="n">STOP</span> <span class="o">=</span> <span class="mi">2</span>
+</div>
+<div class="viewcode-block" id="ResourceState"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceState">[docs]</a><span class="k">class</span> <span class="nc">ResourceState</span><span class="p">:</span>
+    <span class="sd">&quot;&quot;&quot; State of a Resource Manager</span>
+<span class="sd">   </span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">NEW</span> <span class="o">=</span> <span class="mi">0</span>
+    <span class="n">DISCOVERED</span> <span class="o">=</span> <span class="mi">1</span>
+    <span class="n">RESERVED</span> <span class="o">=</span> <span class="mi">2</span>
+    <span class="n">PROVISIONED</span> <span class="o">=</span> <span class="mi">3</span>
+    <span class="n">READY</span> <span class="o">=</span> <span class="mi">4</span>
+    <span class="n">STARTED</span> <span class="o">=</span> <span class="mi">5</span>
+    <span class="n">STOPPED</span> <span class="o">=</span> <span class="mi">6</span>
+    <span class="n">FAILED</span> <span class="o">=</span> <span class="mi">7</span>
+    <span class="n">RELEASED</span> <span class="o">=</span> <span class="mi">8</span>
+</div>
+<span class="n">ResourceState2str</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">({</span>
+    <span class="n">ResourceState</span><span class="o">.</span><span class="n">NEW</span> <span class="p">:</span> <span class="s">&quot;NEW&quot;</span><span class="p">,</span>
+    <span class="n">ResourceState</span><span class="o">.</span><span class="n">DISCOVERED</span> <span class="p">:</span> <span class="s">&quot;DISCOVERED&quot;</span><span class="p">,</span>
+    <span class="n">ResourceState</span><span class="o">.</span><span class="n">RESERVED</span> <span class="p">:</span> <span class="s">&quot;RESERVED&quot;</span><span class="p">,</span>
+    <span class="n">ResourceState</span><span class="o">.</span><span class="n">PROVISIONED</span> <span class="p">:</span> <span class="s">&quot;PROVISIONED&quot;</span><span class="p">,</span>
+    <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span> <span class="p">:</span> <span class="s">&quot;READY&quot;</span><span class="p">,</span>
+    <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span> <span class="p">:</span> <span class="s">&quot;STARTED&quot;</span><span class="p">,</span>
+    <span class="n">ResourceState</span><span class="o">.</span><span class="n">STOPPED</span> <span class="p">:</span> <span class="s">&quot;STOPPED&quot;</span><span class="p">,</span>
+    <span class="n">ResourceState</span><span class="o">.</span><span class="n">FAILED</span> <span class="p">:</span> <span class="s">&quot;FAILED&quot;</span><span class="p">,</span>
+    <span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span> <span class="p">:</span> <span class="s">&quot;RELEASED&quot;</span><span class="p">,</span>
+    <span class="p">})</span>
+
+<div class="viewcode-block" id="clsinit"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.clsinit">[docs]</a><span class="k">def</span> <span class="nf">clsinit</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot; Initializes template information (i.e. attributes and traces)</span>
+<span class="sd">    on classes derived from the ResourceManager class.</span>
+
+<span class="sd">    It is used as a decorator in the class declaration as follows:</span>
+
+<span class="sd">        @clsinit</span>
+<span class="sd">        class MyResourceManager(ResourceManager):</span>
+<span class="sd">        </span>
+<span class="sd">            ...</span>
+
+<span class="sd">     &quot;&quot;&quot;</span>
+
+    <span class="n">cls</span><span class="o">.</span><span class="n">_clsinit</span><span class="p">()</span>
+    <span class="k">return</span> <span class="n">cls</span>
+</div>
+<div class="viewcode-block" id="clsinit_copy"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.clsinit_copy">[docs]</a><span class="k">def</span> <span class="nf">clsinit_copy</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot; Initializes template information (i.e. attributes and traces)</span>
+<span class="sd">    on classes derived from the ResourceManager class.</span>
+<span class="sd">    It differs from the clsinit method in that it forces inheritance</span>
+<span class="sd">    of attributes and traces from the parent class.</span>
+
+<span class="sd">    It is used as a decorator in the class declaration as follows:</span>
+
+<span class="sd">        @clsinit</span>
+<span class="sd">        class MyResourceManager(ResourceManager):</span>
+<span class="sd">        </span>
+<span class="sd">            ...</span>
+
+
+<span class="sd">    clsinit_copy should be prefered to clsinit when creating new</span>
+<span class="sd">    ResourceManager child classes.</span>
+
+<span class="sd">    &quot;&quot;&quot;</span>
+    
+    <span class="n">cls</span><span class="o">.</span><span class="n">_clsinit_copy</span><span class="p">()</span>
+    <span class="k">return</span> <span class="n">cls</span>
+</div>
+<div class="viewcode-block" id="failtrap"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.failtrap">[docs]</a><span class="k">def</span> <span class="nf">failtrap</span><span class="p">(</span><span class="n">func</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot; Decorator function for instance methods that should set the </span>
+<span class="sd">    RM state to FAILED when an error is raised. The methods that must be</span>
+<span class="sd">    decorated are: discover, reserved, provision, deploy, start, stop.</span>
+
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="k">def</span> <span class="nf">wrapped</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">func</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+        <span class="k">except</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">fail</span><span class="p">()</span>
+            
+            <span class="kn">import</span> <span class="nn">traceback</span>
+            <span class="n">err</span> <span class="o">=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">()</span>
+            <span class="n">logger</span> <span class="o">=</span> <span class="n">Logger</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_rtype</span><span class="p">)</span>
+            <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">err</span><span class="p">)</span>
+            <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s">&quot;SETTING guid </span><span class="si">%d</span><span class="s"> to state FAILED&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">)</span>
+            <span class="k">raise</span>
+    
+    <span class="k">return</span> <span class="n">wrapped</span>
+</div>
+<span class="nd">@clsinit</span>
+<div class="viewcode-block" id="ResourceManager"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager">[docs]</a><span class="k">class</span> <span class="nc">ResourceManager</span><span class="p">(</span><span class="n">Logger</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot; Base clase for all ResourceManagers. </span>
+<span class="sd">    </span>
+<span class="sd">    A ResourceManger is specific to a resource type (e.g. Node, </span>
+<span class="sd">    Switch, Application, etc) on a specific platform (e.g. PlanetLab, </span>
+<span class="sd">    OMF, etc).</span>
+
+<span class="sd">    The ResourceManager instances are responsible for interacting with</span>
+<span class="sd">    and controlling concrete (physical or virtual) resources in the </span>
+<span class="sd">    experimental platforms.</span>
+<span class="sd">    </span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;Resource&quot;</span>
+    <span class="n">_attributes</span> <span class="o">=</span> <span class="bp">None</span>
+    <span class="n">_traces</span> <span class="o">=</span> <span class="bp">None</span>
+    <span class="n">_help</span> <span class="o">=</span> <span class="bp">None</span>
+    <span class="n">_platform</span> <span class="o">=</span> <span class="bp">None</span>
+    <span class="n">_reschedule_delay</span> <span class="o">=</span> <span class="s">&quot;0.5s&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attribute</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">attr</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Resource subclasses will invoke this method to add a </span>
+<span class="sd">        resource attribute</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        
+        <span class="n">cls</span><span class="o">.</span><span class="n">_attributes</span><span class="p">[</span><span class="n">attr</span><span class="o">.</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">attr</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_remove_attribute</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Resource subclasses will invoke this method to remove a </span>
+<span class="sd">        resource attribute</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        
+        <span class="k">del</span> <span class="n">cls</span><span class="o">.</span><span class="n">_attributes</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_trace</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">trace</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Resource subclasses will invoke this method to add a </span>
+<span class="sd">        resource trace</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        
+        <span class="n">cls</span><span class="o">.</span><span class="n">_traces</span><span class="p">[</span><span class="n">trace</span><span class="o">.</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">trace</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_remove_trace</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Resource subclasses will invoke this method to remove a </span>
+<span class="sd">        resource trace</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        
+        <span class="k">del</span> <span class="n">cls</span><span class="o">.</span><span class="n">_traces</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Resource subclasses will invoke this method to register</span>
+<span class="sd">        resource attributes.</span>
+
+<span class="sd">        This method should be overriden in the RMs that define</span>
+<span class="sd">        attributes.</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">critical</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;critical&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;Defines whether the resource is critical. &quot;</span>
+                <span class="s">&quot;A failure on a critical resource will interrupt &quot;</span>
+                <span class="s">&quot;the experiment. &quot;</span><span class="p">,</span>
+                <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+                <span class="n">default</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+        <span class="n">hard_release</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;hardRelease&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;Forces removal of all result files and directories associated &quot;</span>
+                <span class="s">&quot;to the RM upon resource release. After release the RM will &quot;</span>
+                <span class="s">&quot;be removed from the EC and the results will not longer be &quot;</span>
+                <span class="s">&quot;accessible&quot;</span><span class="p">,</span>
+                <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+                <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">critical</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">hard_release</span><span class="p">)</span>
+        
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Resource subclasses will invoke this method to register</span>
+<span class="sd">        resource traces</span>
+
+<span class="sd">        This method should be overridden in the RMs that define traces.</span>
+<span class="sd">        </span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        
+        <span class="k">pass</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_clsinit</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; ResourceManager classes have different attributes and traces.</span>
+<span class="sd">        Attribute and traces are stored in &#39;class attribute&#39; dictionaries.</span>
+<span class="sd">        When a new ResourceManager class is created, the _clsinit method is </span>
+<span class="sd">        called to create a new instance of those dictionaries and initialize </span>
+<span class="sd">        them.</span>
+<span class="sd">        </span>
+<span class="sd">        The _clsinit method is called by the clsinit decorator method.</span>
+<span class="sd">        </span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        
+        <span class="c"># static template for resource attributes</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_attributes</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attributes</span><span class="p">()</span>
+
+        <span class="c"># static template for resource traces</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_traces</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_traces</span><span class="p">()</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_clsinit_copy</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Same as _clsinit, except that after creating new instances of the</span>
+<span class="sd">        dictionaries it copies all the attributes and traces from the parent </span>
+<span class="sd">        class.</span>
+<span class="sd">        </span>
+<span class="sd">        The _clsinit_copy method is called by the clsinit_copy decorator method.</span>
+<span class="sd">        </span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="c"># static template for resource attributes</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_attributes</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="n">cls</span><span class="o">.</span><span class="n">_attributes</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attributes</span><span class="p">()</span>
+
+        <span class="c"># static template for resource traces</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_traces</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="n">cls</span><span class="o">.</span><span class="n">_traces</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_traces</span><span class="p">()</span>
+
+    <span class="nd">@classmethod</span>
+<div class="viewcode-block" id="ResourceManager.get_rtype"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.get_rtype">[docs]</a>    <span class="k">def</span> <span class="nf">get_rtype</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the type of the Resource Manager</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="n">cls</span><span class="o">.</span><span class="n">_rtype</span>
+</div>
+    <span class="nd">@classmethod</span>
+<div class="viewcode-block" id="ResourceManager.get_attributes"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.get_attributes">[docs]</a>    <span class="k">def</span> <span class="nf">get_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns a copy of the attributes</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="n">cls</span><span class="o">.</span><span class="n">_attributes</span><span class="o">.</span><span class="n">values</span><span class="p">())</span>
+</div>
+    <span class="nd">@classmethod</span>
+<div class="viewcode-block" id="ResourceManager.get_attribute"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.get_attribute">[docs]</a>    <span class="k">def</span> <span class="nf">get_attribute</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns a copy of the attribute with name &#39;name&#39;</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="n">cls</span><span class="o">.</span><span class="n">_attributes</span><span class="p">[</span><span class="n">name</span><span class="p">])</span>
+</div>
+    <span class="nd">@classmethod</span>
+<div class="viewcode-block" id="ResourceManager.get_traces"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.get_traces">[docs]</a>    <span class="k">def</span> <span class="nf">get_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns a copy of the traces</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="n">cls</span><span class="o">.</span><span class="n">_traces</span><span class="o">.</span><span class="n">values</span><span class="p">())</span>
+</div>
+    <span class="nd">@classmethod</span>
+<div class="viewcode-block" id="ResourceManager.get_help"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.get_help">[docs]</a>    <span class="k">def</span> <span class="nf">get_help</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the description of the type of Resource</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="n">cls</span><span class="o">.</span><span class="n">_help</span>
+</div>
+    <span class="nd">@classmethod</span>
+<div class="viewcode-block" id="ResourceManager.get_platform"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.get_platform">[docs]</a>    <span class="k">def</span> <span class="nf">get_platform</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the identified of the platform (i.e. testbed type)</span>
+<span class="sd">        for the Resource</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="n">cls</span><span class="o">.</span><span class="n">_platform</span>
+</div>
+    <span class="nd">@classmethod</span>
+<div class="viewcode-block" id="ResourceManager.get_global"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.get_global">[docs]</a>    <span class="k">def</span> <span class="nf">get_global</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the value of a global attribute</span>
+<span class="sd">            Global attribute meaning an attribute for </span>
+<span class="sd">            all the resources from a rtype</span>
+
+<span class="sd">        :param name: Name of the attribute</span>
+<span class="sd">        :type name: str</span>
+<span class="sd">        :rtype: str</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">global_attr</span> <span class="o">=</span> <span class="n">cls</span><span class="o">.</span><span class="n">_attributes</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
+        <span class="k">return</span> <span class="n">global_attr</span><span class="o">.</span><span class="n">value</span>
+</div>
+    <span class="nd">@classmethod</span>
+<div class="viewcode-block" id="ResourceManager.set_global"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_global">[docs]</a>    <span class="k">def</span> <span class="nf">set_global</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Set value for a global attribute</span>
+
+<span class="sd">        :param name: Name of the attribute</span>
+<span class="sd">        :type name: str</span>
+<span class="sd">        :param name: Value of the attribute</span>
+<span class="sd">        :type name: str</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">global_attr</span> <span class="o">=</span> <span class="n">cls</span><span class="o">.</span><span class="n">_attributes</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
+        <span class="n">global_attr</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">value</span>
+        <span class="k">return</span> <span class="n">value</span>
+</div>
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">ResourceManager</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+        
+        <span class="bp">self</span><span class="o">.</span><span class="n">_guid</span> <span class="o">=</span> <span class="n">guid</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_ec</span> <span class="o">=</span> <span class="n">weakref</span><span class="o">.</span><span class="n">ref</span><span class="p">(</span><span class="n">ec</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_connections</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_conditions</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span> 
+
+        <span class="c"># the resource instance gets a copy of all attributes</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_attrs</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_attributes</span><span class="p">)</span>
+
+        <span class="c"># the resource instance gets a copy of all traces</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_trcs</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_traces</span><span class="p">)</span>
+
+        <span class="c"># Each resource is placed on a deployment group by the EC</span>
+        <span class="c"># during deployment</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">deployment_group</span> <span class="o">=</span> <span class="bp">None</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">_start_time</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_stop_time</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_discover_time</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_reserved_time</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_provision_time</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_ready_time</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_release_time</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_failed_time</span> <span class="o">=</span> <span class="bp">None</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">=</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">NEW</span>
+
+        <span class="c"># instance lock to synchronize exclusive state change methods (such</span>
+        <span class="c"># as deploy and release methods), in order to prevent them from being </span>
+        <span class="c"># executed at the same time and corrupt internal resource state</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_release_lock</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Lock</span><span class="p">()</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="ResourceManager.guid"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.guid">[docs]</a>    <span class="k">def</span> <span class="nf">guid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the global unique identifier of the RM &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_guid</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="ResourceManager.ec"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.ec">[docs]</a>    <span class="k">def</span> <span class="nf">ec</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the Experiment Controller of the RM &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ec</span><span class="p">()</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="ResourceManager.connections"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.connections">[docs]</a>    <span class="k">def</span> <span class="nf">connections</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the set of guids of connected RMs &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_connections</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="ResourceManager.conditions"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.conditions">[docs]</a>    <span class="k">def</span> <span class="nf">conditions</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the conditions to which the RM is subjected to.</span>
+<span class="sd">        </span>
+<span class="sd">        This method returns a dictionary of conditions lists indexed by</span>
+<span class="sd">        a ResourceAction.</span>
+<span class="sd">        </span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_conditions</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="ResourceManager.start_time"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.start_time">[docs]</a>    <span class="k">def</span> <span class="nf">start_time</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the start time of the RM as a timestamp &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_start_time</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="ResourceManager.stop_time"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.stop_time">[docs]</a>    <span class="k">def</span> <span class="nf">stop_time</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the stop time of the RM as a timestamp &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_stop_time</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="ResourceManager.discover_time"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.discover_time">[docs]</a>    <span class="k">def</span> <span class="nf">discover_time</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the discover time of the RM as a timestamp &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_discover_time</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="ResourceManager.reserved_time"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.reserved_time">[docs]</a>    <span class="k">def</span> <span class="nf">reserved_time</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the reserved time of the RM as a timestamp &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_reserved_time</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="ResourceManager.provision_time"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.provision_time">[docs]</a>    <span class="k">def</span> <span class="nf">provision_time</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the provision time of the RM as a timestamp &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_provision_time</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="ResourceManager.ready_time"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.ready_time">[docs]</a>    <span class="k">def</span> <span class="nf">ready_time</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the deployment time of the RM as a timestamp &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ready_time</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="ResourceManager.release_time"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.release_time">[docs]</a>    <span class="k">def</span> <span class="nf">release_time</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the release time of the RM as a timestamp &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_release_time</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="ResourceManager.failed_time"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.failed_time">[docs]</a>    <span class="k">def</span> <span class="nf">failed_time</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the time failure occurred for the RM as a timestamp &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_failed_time</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="ResourceManager.state"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.state">[docs]</a>    <span class="k">def</span> <span class="nf">state</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Get the current state of the RM &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="ResourceManager.reschedule_delay"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.reschedule_delay">[docs]</a>    <span class="k">def</span> <span class="nf">reschedule_delay</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns default reschedule delay &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_reschedule_delay</span>
+</div>
+<div class="viewcode-block" id="ResourceManager.log_message"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.log_message">[docs]</a>    <span class="k">def</span> <span class="nf">log_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the log message formatted with added information.</span>
+
+<span class="sd">        :param msg: text message</span>
+<span class="sd">        :type msg: str</span>
+<span class="sd">        :rtype: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="s">&quot; </span><span class="si">%s</span><span class="s"> guid </span><span class="si">%d</span><span class="s"> - </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_rtype</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">,</span> <span class="n">msg</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="ResourceManager.register_connection"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.register_connection">[docs]</a>    <span class="k">def</span> <span class="nf">register_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Registers a connection to the RM identified by guid</span>
+
+<span class="sd">        This method should not be overridden. Specific functionality</span>
+<span class="sd">        should be added in the do_connect method.</span>
+
+<span class="sd">        :param guid: Global unique identified of the RM to connect to</span>
+<span class="sd">        :type guid: int</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">valid_connection</span><span class="p">(</span><span class="n">guid</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_connect</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_connections</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="ResourceManager.unregister_connection"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.unregister_connection">[docs]</a>    <span class="k">def</span> <span class="nf">unregister_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Removes a registered connection to the RM identified by guid</span>
+<span class="sd">        </span>
+<span class="sd">        This method should not be overridden. Specific functionality</span>
+<span class="sd">        should be added in the do_disconnect method.</span>
+
+<span class="sd">        :param guid: Global unique identified of the RM to connect to</span>
+<span class="sd">        :type guid: int</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="n">guid</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_connections</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_disconnect</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_connections</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+</div>
+    <span class="nd">@failtrap</span>
+<div class="viewcode-block" id="ResourceManager.discover"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.discover">[docs]</a>    <span class="k">def</span> <span class="nf">discover</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Performs resource discovery.</span>
+<span class="sd">        </span>
+<span class="sd">        This  method is responsible for selecting an individual resource</span>
+<span class="sd">        matching user requirements.</span>
+
+<span class="sd">        This method should not be overridden directly. Specific functionality</span>
+<span class="sd">        should be added in the do_discover method.</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">_release_lock</span><span class="p">:</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">!=</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+</div>
+    <span class="nd">@failtrap</span>
+<div class="viewcode-block" id="ResourceManager.reserve"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.reserve">[docs]</a>    <span class="k">def</span> <span class="nf">reserve</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Performs resource reserve.</span>
+<span class="sd">        </span>
+<span class="sd">        This  method is responsible for reserving an individual resource</span>
+<span class="sd">        matching user requirements.</span>
+
+<span class="sd">        This method should not be overridden directly. Specific functionality</span>
+<span class="sd">        should be added in the do_reserved method.</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">_release_lock</span><span class="p">:</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">!=</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">do_reserve</span><span class="p">()</span>
+</div>
+    <span class="nd">@failtrap</span>
+<div class="viewcode-block" id="ResourceManager.provision"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.provision">[docs]</a>    <span class="k">def</span> <span class="nf">provision</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Performs resource provisioning.</span>
+
+<span class="sd">        This  method is responsible for provisioning one resource.</span>
+<span class="sd">        After this method has been successfully invoked, the resource</span>
+<span class="sd">        should be accessible/controllable by the RM.</span>
+
+<span class="sd">        This method should not be overridden directly. Specific functionality</span>
+<span class="sd">        should be added in the do_provision method.</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">_release_lock</span><span class="p">:</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">!=</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">do_provision</span><span class="p">()</span>
+</div>
+    <span class="nd">@failtrap</span>
+<div class="viewcode-block" id="ResourceManager.configure"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.configure">[docs]</a>    <span class="k">def</span> <span class="nf">configure</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Performs resource configuration.</span>
+
+<span class="sd">        This  method is responsible for configuring one resource.</span>
+<span class="sd">        After this method has been successfully invoked, the resource</span>
+<span class="sd">        should be set up to start the experimentation.</span>
+
+<span class="sd">        This method should not be overridden directly. Specific functionality</span>
+<span class="sd">        should be added in the do_configure method.</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">_release_lock</span><span class="p">:</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">!=</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">do_configure</span><span class="p">()</span>
+</div>
+    <span class="nd">@failtrap</span>
+<div class="viewcode-block" id="ResourceManager.start"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.start">[docs]</a>    <span class="k">def</span> <span class="nf">start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Starts the RM (e.g. launch remote process).</span>
+<span class="sd">    </span>
+<span class="sd">        There is no standard start behavior. Some RMs will not need to perform</span>
+<span class="sd">        any actions upon start.</span>
+
+<span class="sd">        This method should not be overridden directly. Specific functionality</span>
+<span class="sd">        should be added in the do_start method.</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="ow">in</span> <span class="p">[</span><span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">,</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STOPPED</span><span class="p">]:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s">&quot;Wrong state </span><span class="si">%s</span><span class="s"> for start&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span><span class="p">)</span>
+            <span class="k">return</span>
+
+        <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">_release_lock</span><span class="p">:</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">!=</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">do_start</span><span class="p">()</span>
+</div>
+    <span class="nd">@failtrap</span>
+<div class="viewcode-block" id="ResourceManager.stop"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.stop">[docs]</a>    <span class="k">def</span> <span class="nf">stop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Interrupts the RM, stopping any tasks the RM was performing.</span>
+<span class="sd">     </span>
+<span class="sd">        There is no standard stop behavior. Some RMs will not need to perform</span>
+<span class="sd">        any actions upon stop.</span>
+<span class="sd">    </span>
+<span class="sd">        This method should not be overridden directly. Specific functionality</span>
+<span class="sd">        should be added in the do_stop method.</span>
+<span class="sd">      </span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="ow">in</span> <span class="p">[</span><span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">]:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s">&quot;Wrong state </span><span class="si">%s</span><span class="s"> for stop&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span><span class="p">)</span>
+            <span class="k">return</span>
+        
+        <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">_release_lock</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_stop</span><span class="p">()</span>
+</div>
+    <span class="nd">@failtrap</span>
+<div class="viewcode-block" id="ResourceManager.deploy"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.deploy">[docs]</a>    <span class="k">def</span> <span class="nf">deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Execute all steps required for the RM to reach the state READY.</span>
+
+<span class="sd">        This method is responsible for deploying the resource (and invoking </span>
+<span class="sd">        the discover and provision methods).</span>
+<span class="sd"> </span>
+<span class="sd">        This method should not be overridden directly. Specific functionality</span>
+<span class="sd">        should be added in the do_deploy method.</span>
+<span class="sd">       </span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">&gt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s">&quot;Wrong state </span><span class="si">%s</span><span class="s"> for deploy&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span><span class="p">)</span>
+            <span class="k">return</span>
+
+        <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">_release_lock</span><span class="p">:</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">!=</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">do_deploy</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="ResourceManager.release"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.release">[docs]</a>    <span class="k">def</span> <span class="nf">release</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Perform actions to free resources used by the RM.</span>
+<span class="sd">  </span>
+<span class="sd">        This  method is responsible for releasing resources that were</span>
+<span class="sd">        used during the experiment by the RM.</span>
+
+<span class="sd">        This method should not be overridden directly. Specific functionality</span>
+<span class="sd">        should be added in the do_release method.</span>
+<span class="sd">      </span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">_release_lock</span><span class="p">:</span>
+            <span class="k">try</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">do_release</span><span class="p">()</span>
+            <span class="k">except</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set_released</span><span class="p">()</span>
+
+                <span class="kn">import</span> <span class="nn">traceback</span>
+                <span class="n">err</span> <span class="o">=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">()</span>
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; </span><span class="si">%s</span><span class="s"> guid </span><span class="si">%d</span><span class="s"> ----- FAILED TO RELEASE ----- </span><span class="se">\n</span><span class="s"> </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="p">(</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">_rtype</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+                <span class="n">logger</span> <span class="o">=</span> <span class="n">Logger</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_rtype</span><span class="p">)</span>
+                <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="ResourceManager.fail"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.fail">[docs]</a>    <span class="k">def</span> <span class="nf">fail</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Sets the RM to state FAILED.</span>
+
+<span class="sd">        This method should not be overridden directly. Specific functionality</span>
+<span class="sd">        should be added in the do_fail method.</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">_release_lock</span><span class="p">:</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">!=</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">do_fail</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="ResourceManager.set"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set">[docs]</a>    <span class="k">def</span> <span class="nf">set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Set the value of the attribute</span>
+
+<span class="sd">        :param name: Name of the attribute</span>
+<span class="sd">        :type name: str</span>
+<span class="sd">        :param name: Value of the attribute</span>
+<span class="sd">        :type name: str</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">attr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attrs</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
+        <span class="n">attr</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">value</span>
+        <span class="k">return</span> <span class="n">value</span>
+</div>
+<div class="viewcode-block" id="ResourceManager.get"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.get">[docs]</a>    <span class="k">def</span> <span class="nf">get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the value of the attribute</span>
+
+<span class="sd">        :param name: Name of the attribute</span>
+<span class="sd">        :type name: str</span>
+<span class="sd">        :rtype: str</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">attr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attrs</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
+
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        A.Q. Commenting due to performance impact</span>
+<span class="sd">        if attr.has_flag(Flags.Global):</span>
+<span class="sd">            self.warning( &quot;Attribute %s is global. Use get_global instead.&quot; % name)</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+            
+        <span class="k">return</span> <span class="n">attr</span><span class="o">.</span><span class="n">value</span>
+</div>
+<div class="viewcode-block" id="ResourceManager.has_changed"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.has_changed">[docs]</a>    <span class="k">def</span> <span class="nf">has_changed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the True is the value of the attribute</span>
+<span class="sd">            has been modified by the user.</span>
+
+<span class="sd">        :param name: Name of the attribute</span>
+<span class="sd">        :type name: str</span>
+<span class="sd">        :rtype: str</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">attr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attrs</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
+        <span class="k">return</span> <span class="n">attr</span><span class="o">.</span><span class="n">has_changed</span>
+</div>
+<div class="viewcode-block" id="ResourceManager.has_flag"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.has_flag">[docs]</a>    <span class="k">def</span> <span class="nf">has_flag</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">flag</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns true if the attribute has the flag &#39;flag&#39;</span>
+
+<span class="sd">        :param flag: Flag to be checked</span>
+<span class="sd">        :type flag: Flags</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">attr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attrs</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
+        <span class="k">return</span> <span class="n">attr</span><span class="o">.</span><span class="n">has_flag</span><span class="p">(</span><span class="n">flag</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="ResourceManager.has_attribute"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.has_attribute">[docs]</a>    <span class="k">def</span> <span class="nf">has_attribute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns true if the RM has an attribute with name</span>
+
+<span class="sd">        :param name: name of the attribute</span>
+<span class="sd">        :type name: string</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attrs</span>
+</div>
+<div class="viewcode-block" id="ResourceManager.enable_trace"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.enable_trace">[docs]</a>    <span class="k">def</span> <span class="nf">enable_trace</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Explicitly enable trace generation</span>
+
+<span class="sd">        :param name: Name of the trace</span>
+<span class="sd">        :type name: str</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">trace</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_trcs</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
+        <span class="n">trace</span><span class="o">.</span><span class="n">enabled</span> <span class="o">=</span> <span class="bp">True</span>
+    </div>
+<div class="viewcode-block" id="ResourceManager.trace_enabled"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.trace_enabled">[docs]</a>    <span class="k">def</span> <span class="nf">trace_enabled</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;Returns True if trace is enables </span>
+
+<span class="sd">        :param name: Name of the trace</span>
+<span class="sd">        :type name: str</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">trace</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_trcs</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
+        <span class="k">return</span> <span class="n">trace</span><span class="o">.</span><span class="n">enabled</span>
+ </div>
+<div class="viewcode-block" id="ResourceManager.trace"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.trace">[docs]</a>    <span class="k">def</span> <span class="nf">trace</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">attr</span> <span class="o">=</span> <span class="n">TraceAttr</span><span class="o">.</span><span class="n">ALL</span><span class="p">,</span> <span class="n">block</span> <span class="o">=</span> <span class="mi">512</span><span class="p">,</span> <span class="n">offset</span> <span class="o">=</span> <span class="mi">0</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Get information on collected trace</span>
+
+<span class="sd">        :param name: Name of the trace</span>
+<span class="sd">        :type name: str</span>
+
+<span class="sd">        :param attr: Can be one of:</span>
+<span class="sd">                         - TraceAttr.ALL (complete trace content), </span>
+<span class="sd">                         - TraceAttr.STREAM (block in bytes to read starting at offset), </span>
+<span class="sd">                         - TraceAttr.PATH (full path to the trace file),</span>
+<span class="sd">                         - TraceAttr.SIZE (size of trace file). </span>
+<span class="sd">        :type attr: str</span>
+
+<span class="sd">        :param block: Number of bytes to retrieve from trace, when attr is TraceAttr.STREAM </span>
+<span class="sd">        :type name: int</span>
+
+<span class="sd">        :param offset: Number of &#39;blocks&#39; to skip, when attr is TraceAttr.STREAM </span>
+<span class="sd">        :type name: int</span>
+
+<span class="sd">        :rtype: str</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">pass</span>
+</div>
+<div class="viewcode-block" id="ResourceManager.register_condition"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.register_condition">[docs]</a>    <span class="k">def</span> <span class="nf">register_condition</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">action</span><span class="p">,</span> <span class="n">group</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Registers a condition on the resource manager to allow execution </span>
+<span class="sd">        of &#39;action&#39; only after &#39;time&#39; has elapsed from the moment all resources </span>
+<span class="sd">        in &#39;group&#39; reached state &#39;state&#39;</span>
+
+<span class="sd">        :param action: Action to restrict to condition (either &#39;START&#39; or &#39;STOP&#39;)</span>
+<span class="sd">        :type action: str</span>
+<span class="sd">        :param group: Group of RMs to wait for (list of guids)</span>
+<span class="sd">        :type group: int or list of int</span>
+<span class="sd">        :param state: State to wait for on all RM in group. (either &#39;STARTED&#39;, &#39;STOPPED&#39; or &#39;READY&#39;)</span>
+<span class="sd">        :type state: str</span>
+<span class="sd">        :param time: Time to wait after &#39;state&#39; is reached on all RMs in group. (e.g. &#39;2s&#39;)</span>
+<span class="sd">        :type time: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">action</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">conditions</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_conditions</span><span class="p">[</span><span class="n">action</span><span class="p">]</span> <span class="o">=</span> <span class="nb">list</span><span class="p">()</span>
+        
+        <span class="n">conditions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">conditions</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
+
+        <span class="c"># For each condition to register a tuple of (group, state, time) is </span>
+        <span class="c"># added to the &#39;action&#39; list</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">group</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
+            <span class="n">group</span> <span class="o">=</span> <span class="p">[</span><span class="n">group</span><span class="p">]</span>
+
+        <span class="n">conditions</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">group</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">))</span>
+</div>
+<div class="viewcode-block" id="ResourceManager.unregister_condition"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.unregister_condition">[docs]</a>    <span class="k">def</span> <span class="nf">unregister_condition</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">group</span><span class="p">,</span> <span class="n">action</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Removed conditions for a certain group of guids</span>
+
+<span class="sd">        :param action: Action to restrict to condition (either &#39;START&#39;, &#39;STOP&#39; or &#39;READY&#39;)</span>
+<span class="sd">        :type action: str</span>
+
+<span class="sd">        :param group: Group of RMs to wait for (list of guids)</span>
+<span class="sd">        :type group: int or list of int</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="c"># For each condition a tuple of (group, state, time) is </span>
+        <span class="c"># added to the &#39;action&#39; list</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">group</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
+            <span class="n">group</span> <span class="o">=</span> <span class="p">[</span><span class="n">group</span><span class="p">]</span>
+
+        <span class="k">for</span> <span class="n">act</span><span class="p">,</span> <span class="n">conditions</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">conditions</span><span class="o">.</span><span class="n">iteritems</span><span class="p">():</span>
+            <span class="k">if</span> <span class="n">action</span> <span class="ow">and</span> <span class="n">act</span> <span class="o">!=</span> <span class="n">action</span><span class="p">:</span>
+                <span class="k">continue</span>
+
+            <span class="k">for</span> <span class="n">condition</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">(</span><span class="n">conditions</span><span class="p">):</span>
+                <span class="p">(</span><span class="n">grp</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span> <span class="o">=</span> <span class="n">condition</span>
+
+                <span class="c"># If there is an intersection between grp and group,</span>
+                <span class="c"># then remove intersected elements</span>
+                <span class="n">intsec</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">group</span><span class="p">)</span><span class="o">.</span><span class="n">intersection</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">grp</span><span class="p">))</span>
+                <span class="k">if</span> <span class="n">intsec</span><span class="p">:</span>
+                    <span class="n">idx</span> <span class="o">=</span> <span class="n">conditions</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">condition</span><span class="p">)</span>
+                    <span class="n">newgrp</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">grp</span><span class="p">)</span>
+                    <span class="n">newgrp</span><span class="o">.</span><span class="n">difference_update</span><span class="p">(</span><span class="n">intsec</span><span class="p">)</span>
+                    <span class="n">conditions</span><span class="p">[</span><span class="n">idx</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">newgrp</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
+                 </div>
+<div class="viewcode-block" id="ResourceManager.get_connected"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.get_connected">[docs]</a>    <span class="k">def</span> <span class="nf">get_connected</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">rtype</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the list of RM with the type &#39;rtype&#39;</span>
+
+<span class="sd">        :param rtype: Type of the RM we look for</span>
+<span class="sd">        :type rtype: str</span>
+<span class="sd">        :return: list of guid</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">connected</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="n">rclass</span> <span class="o">=</span> <span class="n">ResourceFactory</span><span class="o">.</span><span class="n">get_resource_type</span><span class="p">(</span><span class="n">rtype</span><span class="p">)</span>
+        <span class="k">for</span> <span class="n">guid</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">connections</span><span class="p">:</span>
+            <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="n">rtype</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">rm</span><span class="p">,</span> <span class="n">rclass</span><span class="p">):</span>
+                <span class="n">connected</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">rm</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">connected</span>
+</div>
+<div class="viewcode-block" id="ResourceManager.is_rm_instance"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.is_rm_instance">[docs]</a>    <span class="k">def</span> <span class="nf">is_rm_instance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">rtype</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns True if the RM is instance of &#39;rtype&#39;</span>
+
+<span class="sd">        :param rtype: Type of the RM we look for</span>
+<span class="sd">        :type rtype: str</span>
+<span class="sd">        :return: True|False</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">rclass</span> <span class="o">=</span> <span class="n">ResourceFactory</span><span class="o">.</span><span class="n">get_resource_type</span><span class="p">(</span><span class="n">rtype</span><span class="p">)</span>
+        <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">rclass</span><span class="p">):</span>
+            <span class="k">return</span> <span class="bp">True</span>
+        <span class="k">return</span> <span class="bp">False</span>
+</div>
+    <span class="nd">@failtrap</span>
+    <span class="k">def</span> <span class="nf">_needs_reschedule</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">group</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Internal method that verify if &#39;time&#39; has elapsed since </span>
+<span class="sd">        all elements in &#39;group&#39; have reached state &#39;state&#39;.</span>
+
+<span class="sd">        :param group: Group of RMs to wait for (list of guids)</span>
+<span class="sd">        :type group: int or list of int</span>
+<span class="sd">        :param state: State to wait for on all RM in group. (either &#39;STARTED&#39;, &#39;STOPPED&#39; or &#39;READY&#39;)</span>
+<span class="sd">        :type state: str</span>
+<span class="sd">        :param time: Time to wait after &#39;state&#39; is reached on all RMs in group. (e.g. &#39;2s&#39;)</span>
+<span class="sd">        :type time: str</span>
+
+<span class="sd">        .. note : time should be written like &quot;2s&quot; or &quot;3m&quot; with s for seconds, m for minutes, h for hours, ...</span>
+<span class="sd">        If for example, you need to wait 2min 30sec, time could be &quot;150s&quot; or &quot;2.5m&quot;.</span>
+<span class="sd">        For the moment, 2m30s is not a correct syntax.</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">reschedule</span> <span class="o">=</span> <span class="bp">False</span>
+        <span class="n">delay</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span> 
+
+        <span class="c"># check state and time elapsed on all RMs</span>
+        <span class="k">for</span> <span class="n">guid</span> <span class="ow">in</span> <span class="n">group</span><span class="p">:</span>
+            <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+            
+            <span class="c"># If one of the RMs this resource needs to wait for has FAILED</span>
+            <span class="c"># and is critical we raise an exception</span>
+            <span class="k">if</span> <span class="n">rm</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">FAILED</span><span class="p">:</span>
+                <span class="k">if</span> <span class="ow">not</span> <span class="n">rm</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;critical&#39;</span><span class="p">):</span>
+                    <span class="k">continue</span>
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Resource can not wait for FAILED RM </span><span class="si">%d</span><span class="s">. Setting Resource to FAILED&quot;</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+            <span class="c"># If the RM state is lower than the requested state we must</span>
+            <span class="c"># reschedule (e.g. if RM is READY but we required STARTED).</span>
+            <span class="k">if</span> <span class="n">rm</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">state</span><span class="p">:</span>
+                <span class="n">reschedule</span> <span class="o">=</span> <span class="bp">True</span>
+                <span class="k">break</span>
+
+            <span class="c"># If there is a time restriction, we must verify the</span>
+            <span class="c"># restriction is satisfied </span>
+            <span class="k">if</span> <span class="n">time</span><span class="p">:</span>
+                <span class="k">if</span> <span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">DISCOVERED</span><span class="p">:</span>
+                    <span class="n">t</span> <span class="o">=</span> <span class="n">rm</span><span class="o">.</span><span class="n">discover_time</span>
+                <span class="k">elif</span> <span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">RESERVED</span><span class="p">:</span>
+                    <span class="n">t</span> <span class="o">=</span> <span class="n">rm</span><span class="o">.</span><span class="n">reserved_time</span>
+                <span class="k">elif</span> <span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">PROVISIONED</span><span class="p">:</span>
+                    <span class="n">t</span> <span class="o">=</span> <span class="n">rm</span><span class="o">.</span><span class="n">provision_time</span>
+                <span class="k">elif</span> <span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+                    <span class="n">t</span> <span class="o">=</span> <span class="n">rm</span><span class="o">.</span><span class="n">ready_time</span>
+                <span class="k">elif</span> <span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">:</span>
+                    <span class="n">t</span> <span class="o">=</span> <span class="n">rm</span><span class="o">.</span><span class="n">start_time</span>
+                <span class="k">elif</span> <span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STOPPED</span><span class="p">:</span>
+                    <span class="n">t</span> <span class="o">=</span> <span class="n">rm</span><span class="o">.</span><span class="n">stop_time</span>
+                <span class="k">elif</span> <span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span><span class="p">:</span>
+                    <span class="n">t</span> <span class="o">=</span> <span class="n">rm</span><span class="o">.</span><span class="n">release_time</span>
+                <span class="k">else</span><span class="p">:</span>
+                    <span class="k">break</span>
+
+                <span class="c"># time already elapsed since RM changed state</span>
+                <span class="n">waited</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%f</span><span class="s">s&quot;</span> <span class="o">%</span> <span class="n">tdiffsec</span><span class="p">(</span><span class="n">tnow</span><span class="p">(),</span> <span class="n">t</span><span class="p">)</span>
+
+                <span class="c"># time still to wait</span>
+                <span class="n">wait</span> <span class="o">=</span> <span class="n">tdiffsec</span><span class="p">(</span><span class="n">stabsformat</span><span class="p">(</span><span class="n">time</span><span class="p">),</span> <span class="n">stabsformat</span><span class="p">(</span><span class="n">waited</span><span class="p">))</span>
+
+                <span class="k">if</span> <span class="n">wait</span> <span class="o">&gt;</span> <span class="mf">0.001</span><span class="p">:</span>
+                    <span class="n">reschedule</span> <span class="o">=</span> <span class="bp">True</span>
+                    <span class="n">delay</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%f</span><span class="s">s&quot;</span> <span class="o">%</span> <span class="n">wait</span>
+                    <span class="k">break</span>
+
+        <span class="k">return</span> <span class="n">reschedule</span><span class="p">,</span> <span class="n">delay</span>
+
+<div class="viewcode-block" id="ResourceManager.set_with_conditions"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_with_conditions">[docs]</a>    <span class="k">def</span> <span class="nf">set_with_conditions</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">group</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Set value &#39;value&#39; on attribute with name &#39;name&#39; when &#39;time&#39; </span>
+<span class="sd">        has elapsed since all elements in &#39;group&#39; have reached state</span>
+<span class="sd">        &#39;state&#39;</span>
+
+<span class="sd">        :param name: Name of the attribute to set</span>
+<span class="sd">        :type name: str</span>
+<span class="sd">        :param name: Value of the attribute to set</span>
+<span class="sd">        :type name: str</span>
+<span class="sd">        :param group: Group of RMs to wait for (list of guids)</span>
+<span class="sd">        :type group: int or list of int</span>
+<span class="sd">        :param state: State to wait for on all RM in group. (either &#39;STARTED&#39;, &#39;STOPPED&#39; or &#39;READY&#39;)</span>
+<span class="sd">        :type state: str</span>
+<span class="sd">        :param time: Time to wait after &#39;state&#39; is reached on all RMs in group. (e.g. &#39;2s&#39;)</span>
+<span class="sd">        :type time: str</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+
+        <span class="n">reschedule</span> <span class="o">=</span> <span class="bp">False</span>
+        <span class="n">delay</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span> 
+
+        <span class="c">## evaluate if set conditions are met</span>
+
+        <span class="c"># only can set with conditions after the RM is started</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">!=</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">:</span>
+            <span class="n">reschedule</span> <span class="o">=</span> <span class="bp">True</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">reschedule</span><span class="p">,</span> <span class="n">delay</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_needs_reschedule</span><span class="p">(</span><span class="n">group</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">reschedule</span><span class="p">:</span>
+            <span class="n">callback</span> <span class="o">=</span> <span class="n">functools</span><span class="o">.</span><span class="n">partial</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">set_with_conditions</span><span class="p">,</span> 
+                    <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">group</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="n">delay</span><span class="p">,</span> <span class="n">callback</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="ResourceManager.start_with_conditions"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.start_with_conditions">[docs]</a>    <span class="k">def</span> <span class="nf">start_with_conditions</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Starts RM when all the conditions in self.conditions for</span>
+<span class="sd">        action &#39;START&#39; are satisfied.</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="c">#import pdb;pdb.set_trace()</span>
+
+        <span class="n">reschedule</span> <span class="o">=</span> <span class="bp">False</span>
+        <span class="n">delay</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span> 
+
+
+        <span class="c">## evaluate if conditions to start are met</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">abort</span><span class="p">:</span>
+            <span class="k">return</span> 
+
+        <span class="c"># Can only start when RM is either STOPPED or READY</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="n">ResourceState</span><span class="o">.</span><span class="n">STOPPED</span><span class="p">,</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">]:</span>
+            <span class="n">reschedule</span> <span class="o">=</span> <span class="bp">True</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;---- RESCHEDULING START ---- state </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">start_conditions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">conditions</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">ResourceAction</span><span class="o">.</span><span class="n">START</span><span class="p">,</span> <span class="p">[])</span>
+            
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;---- START CONDITIONS ---- </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">start_conditions</span><span class="p">)</span> 
+            
+            <span class="c"># Verify all start conditions are met</span>
+            <span class="k">for</span> <span class="p">(</span><span class="n">group</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span> <span class="ow">in</span> <span class="n">start_conditions</span><span class="p">:</span>
+                <span class="c"># Uncomment for debug</span>
+                <span class="c">#unmet = []</span>
+                <span class="c">#for guid in group:</span>
+                <span class="c">#    rm = self.ec.get_resource(guid)</span>
+                <span class="c">#    unmet.append((guid, rm._state))</span>
+                <span class="c">#</span>
+                <span class="c">#self.debug(&quot;---- WAITED STATES ---- %s&quot; % unmet )</span>
+
+                <span class="n">reschedule</span><span class="p">,</span> <span class="n">delay</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_needs_reschedule</span><span class="p">(</span><span class="n">group</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
+                <span class="k">if</span> <span class="n">reschedule</span><span class="p">:</span>
+                    <span class="k">break</span>
+
+        <span class="k">if</span> <span class="n">reschedule</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="n">delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">start_with_conditions</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;----- STARTING ---- &quot;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="ResourceManager.stop_with_conditions"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.stop_with_conditions">[docs]</a>    <span class="k">def</span> <span class="nf">stop_with_conditions</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Stops RM when all the conditions in self.conditions for</span>
+<span class="sd">        action &#39;STOP&#39; are satisfied.</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">reschedule</span> <span class="o">=</span> <span class="bp">False</span>
+        <span class="n">delay</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span> 
+
+        <span class="c">## evaluate if conditions to stop are met</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">abort</span><span class="p">:</span>
+            <span class="k">return</span> 
+
+        <span class="c"># only can stop when RM is STARTED</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">!=</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">:</span>
+            <span class="n">reschedule</span> <span class="o">=</span> <span class="bp">True</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;---- RESCHEDULING STOP ---- state </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot; ---- STOP CONDITIONS ---- </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> 
+                    <span class="bp">self</span><span class="o">.</span><span class="n">conditions</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">ResourceAction</span><span class="o">.</span><span class="n">STOP</span><span class="p">))</span>
+
+            <span class="n">stop_conditions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">conditions</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">ResourceAction</span><span class="o">.</span><span class="n">STOP</span><span class="p">,</span> <span class="p">[])</span> 
+            <span class="k">for</span> <span class="p">(</span><span class="n">group</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span> <span class="ow">in</span> <span class="n">stop_conditions</span><span class="p">:</span>
+                <span class="n">reschedule</span><span class="p">,</span> <span class="n">delay</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_needs_reschedule</span><span class="p">(</span><span class="n">group</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
+                <span class="k">if</span> <span class="n">reschedule</span><span class="p">:</span>
+                    <span class="k">break</span>
+
+        <span class="k">if</span> <span class="n">reschedule</span><span class="p">:</span>
+            <span class="n">callback</span> <span class="o">=</span> <span class="n">functools</span><span class="o">.</span><span class="n">partial</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">stop_with_conditions</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="n">delay</span><span class="p">,</span> <span class="n">callback</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot; ----- STOPPING ---- &quot;</span><span class="p">)</span> 
+            <span class="bp">self</span><span class="o">.</span><span class="n">stop</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="ResourceManager.deploy_with_conditions"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.deploy_with_conditions">[docs]</a>    <span class="k">def</span> <span class="nf">deploy_with_conditions</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Deploy RM when all the conditions in self.conditions for</span>
+<span class="sd">        action &#39;READY&#39; are satisfied.</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">reschedule</span> <span class="o">=</span> <span class="bp">False</span>
+        <span class="n">delay</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span> 
+
+        <span class="c">## evaluate if conditions to deploy are met</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">abort</span><span class="p">:</span>
+            <span class="k">return</span> 
+
+        <span class="c"># only can deploy when RM is either NEW, DISCOVERED or PROVISIONED </span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="n">ResourceState</span><span class="o">.</span><span class="n">NEW</span><span class="p">,</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">DISCOVERED</span><span class="p">,</span>
+                <span class="n">ResourceState</span><span class="o">.</span><span class="n">RESERVED</span><span class="p">,</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">PROVISIONED</span><span class="p">]:</span>
+            <span class="c">#### XXX: A.Q. IT SHOULD FAIL IF DEPLOY IS CALLED IN OTHER STATES!</span>
+            <span class="n">reschedule</span> <span class="o">=</span> <span class="bp">True</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;---- RESCHEDULING DEPLOY ---- state </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">deploy_conditions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">conditions</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">ResourceAction</span><span class="o">.</span><span class="n">DEPLOY</span><span class="p">,</span> <span class="p">[])</span>
+            
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;---- DEPLOY CONDITIONS ---- </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">deploy_conditions</span><span class="p">)</span> 
+            
+            <span class="c"># Verify all start conditions are met</span>
+            <span class="k">for</span> <span class="p">(</span><span class="n">group</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span> <span class="ow">in</span> <span class="n">deploy_conditions</span><span class="p">:</span>
+                <span class="c"># Uncomment for debug</span>
+                <span class="c">#unmet = []</span>
+                <span class="c">#for guid in group:</span>
+                <span class="c">#    rm = self.ec.get_resource(guid)</span>
+                <span class="c">#    unmet.append((guid, rm._state))</span>
+                
+                <span class="c">#self.debug(&quot;---- WAITED STATES ---- %s&quot; % unmet )</span>
+
+                <span class="n">reschedule</span><span class="p">,</span> <span class="n">delay</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_needs_reschedule</span><span class="p">(</span><span class="n">group</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
+                <span class="k">if</span> <span class="n">reschedule</span><span class="p">:</span>
+                    <span class="k">break</span>
+
+        <span class="k">if</span> <span class="n">reschedule</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="n">delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">deploy_with_conditions</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;----- DEPLOYING ---- &quot;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">deploy</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="ResourceManager.do_connect"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_connect">[docs]</a>    <span class="k">def</span> <span class="nf">do_connect</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Performs actions that need to be taken upon associating RMs.</span>
+<span class="sd">        This method should be redefined when necessary in child classes.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">pass</span>
+</div>
+<div class="viewcode-block" id="ResourceManager.do_disconnect"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_disconnect">[docs]</a>    <span class="k">def</span> <span class="nf">do_disconnect</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Performs actions that need to be taken upon disassociating RMs.</span>
+<span class="sd">        This method should be redefined when necessary in child classes.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">pass</span>
+</div>
+<div class="viewcode-block" id="ResourceManager.valid_connection"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.valid_connection">[docs]</a>    <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;Checks whether a connection with the other RM</span>
+<span class="sd">        is valid.</span>
+<span class="sd">        This method need to be redefined by each new Resource Manager.</span>
+
+<span class="sd">        :param guid: Guid of the current Resource Manager</span>
+<span class="sd">        :type guid: int</span>
+<span class="sd">        :rtype:  Boolean</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="c"># TODO: Validate!</span>
+        <span class="k">return</span> <span class="bp">True</span>
+</div>
+<div class="viewcode-block" id="ResourceManager.do_discover"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_discover">[docs]</a>    <span class="k">def</span> <span class="nf">do_discover</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set_discovered</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="ResourceManager.do_reserve"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_reserve">[docs]</a>    <span class="k">def</span> <span class="nf">do_reserve</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set_reserved</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="ResourceManager.do_provision"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_provision">[docs]</a>    <span class="k">def</span> <span class="nf">do_provision</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set_provisioned</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="ResourceManager.do_configure"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_configure">[docs]</a>    <span class="k">def</span> <span class="nf">do_configure</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">pass</span>
+</div>
+<div class="viewcode-block" id="ResourceManager.do_start"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_start">[docs]</a>    <span class="k">def</span> <span class="nf">do_start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set_started</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="ResourceManager.do_stop"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_stop">[docs]</a>    <span class="k">def</span> <span class="nf">do_stop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set_stopped</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="ResourceManager.do_deploy"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_deploy">[docs]</a>    <span class="k">def</span> <span class="nf">do_deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set_ready</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="ResourceManager.do_release"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_release">[docs]</a>    <span class="k">def</span> <span class="nf">do_release</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set_released</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="ResourceManager.do_fail"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_fail">[docs]</a>    <span class="k">def</span> <span class="nf">do_fail</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set_failed</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">inform_failure</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="ResourceManager.set_started"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_started">[docs]</a>    <span class="k">def</span> <span class="nf">set_started</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">time</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Mark ResourceManager as STARTED &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set_state</span><span class="p">(</span><span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">,</span> <span class="s">&quot;_start_time&quot;</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;----- STARTED ---- &quot;</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="ResourceManager.set_stopped"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_stopped">[docs]</a>    <span class="k">def</span> <span class="nf">set_stopped</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">time</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Mark ResourceManager as STOPPED &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set_state</span><span class="p">(</span><span class="n">ResourceState</span><span class="o">.</span><span class="n">STOPPED</span><span class="p">,</span> <span class="s">&quot;_stop_time&quot;</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;----- STOPPED ---- &quot;</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="ResourceManager.set_ready"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_ready">[docs]</a>    <span class="k">def</span> <span class="nf">set_ready</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">time</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Mark ResourceManager as READY &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set_state</span><span class="p">(</span><span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">,</span> <span class="s">&quot;_ready_time&quot;</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;----- READY ---- &quot;</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="ResourceManager.set_released"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_released">[docs]</a>    <span class="k">def</span> <span class="nf">set_released</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">time</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Mark ResourceManager as REALEASED &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set_state</span><span class="p">(</span><span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span><span class="p">,</span> <span class="s">&quot;_release_time&quot;</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
+
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; </span><span class="si">%s</span><span class="s"> guid </span><span class="si">%d</span><span class="s"> ----- RELEASED ----- &quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_rtype</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">)</span>
+        <span class="n">logger</span> <span class="o">=</span> <span class="n">Logger</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_rtype</span><span class="p">)</span>
+        <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="ResourceManager.set_failed"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_failed">[docs]</a>    <span class="k">def</span> <span class="nf">set_failed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">time</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Mark ResourceManager as FAILED &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set_state</span><span class="p">(</span><span class="n">ResourceState</span><span class="o">.</span><span class="n">FAILED</span><span class="p">,</span> <span class="s">&quot;_failed_time&quot;</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
+
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; </span><span class="si">%s</span><span class="s"> guid </span><span class="si">%d</span><span class="s"> ----- FAILED ----- &quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_rtype</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">)</span>
+        <span class="n">logger</span> <span class="o">=</span> <span class="n">Logger</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_rtype</span><span class="p">)</span>
+        <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="ResourceManager.set_discovered"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_discovered">[docs]</a>    <span class="k">def</span> <span class="nf">set_discovered</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">time</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Mark ResourceManager as DISCOVERED &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set_state</span><span class="p">(</span><span class="n">ResourceState</span><span class="o">.</span><span class="n">DISCOVERED</span><span class="p">,</span> <span class="s">&quot;_discover_time&quot;</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;----- DISCOVERED ---- &quot;</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="ResourceManager.set_reserved"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_reserved">[docs]</a>    <span class="k">def</span> <span class="nf">set_reserved</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">time</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Mark ResourceManager as RESERVED &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set_state</span><span class="p">(</span><span class="n">ResourceState</span><span class="o">.</span><span class="n">RESERVED</span><span class="p">,</span> <span class="s">&quot;_reserved_time&quot;</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;----- RESERVED ---- &quot;</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="ResourceManager.set_provisioned"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_provisioned">[docs]</a>    <span class="k">def</span> <span class="nf">set_provisioned</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">time</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Mark ResourceManager as PROVISIONED &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set_state</span><span class="p">(</span><span class="n">ResourceState</span><span class="o">.</span><span class="n">PROVISIONED</span><span class="p">,</span> <span class="s">&quot;_provision_time&quot;</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;----- PROVISIONED ---- &quot;</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="ResourceManager.set_state"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_state">[docs]</a>    <span class="k">def</span> <span class="nf">set_state</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">state_time_attr</span><span class="p">,</span> <span class="n">time</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Set the state of the RM while keeping a trace of the time &quot;&quot;&quot;</span>
+
+        <span class="c"># Ensure that RM state will not change after released</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span><span class="p">:</span>
+            <span class="k">return</span> 
+
+        <span class="n">time</span> <span class="o">=</span> <span class="n">time</span> <span class="ow">or</span> <span class="n">tnow</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set_state_time</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">state_time_attr</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
+  </div>
+<div class="viewcode-block" id="ResourceManager.set_state_time"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_state_time">[docs]</a>    <span class="k">def</span> <span class="nf">set_state_time</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">state_time_attr</span><span class="p">,</span> <span class="n">time</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Set the time for the RM state change &quot;&quot;&quot;</span>
+        <span class="nb">setattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">state_time_attr</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">=</span> <span class="n">state</span>
+</div></div>
+<div class="viewcode-block" id="ResourceFactory"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceFactory">[docs]</a><span class="k">class</span> <span class="nc">ResourceFactory</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+    <span class="n">_resource_types</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
+
+    <span class="nd">@classmethod</span>
+<div class="viewcode-block" id="ResourceFactory.resource_types"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceFactory.resource_types">[docs]</a>    <span class="k">def</span> <span class="nf">resource_types</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;Return the type of the Class&quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="n">cls</span><span class="o">.</span><span class="n">_resource_types</span>
+</div>
+    <span class="nd">@classmethod</span>
+<div class="viewcode-block" id="ResourceFactory.get_resource_type"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceFactory.get_resource_type">[docs]</a>    <span class="k">def</span> <span class="nf">get_resource_type</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">rtype</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;Return the type of the Class&quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="n">cls</span><span class="o">.</span><span class="n">_resource_types</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">rtype</span><span class="p">)</span>
+</div>
+    <span class="nd">@classmethod</span>
+<div class="viewcode-block" id="ResourceFactory.register_type"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceFactory.register_type">[docs]</a>    <span class="k">def</span> <span class="nf">register_type</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">rclass</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;Register a new Ressource Manager&quot;&quot;&quot;</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_resource_types</span><span class="p">[</span><span class="n">rclass</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">()]</span> <span class="o">=</span> <span class="n">rclass</span>
+</div>
+    <span class="nd">@classmethod</span>
+<div class="viewcode-block" id="ResourceFactory.create"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.ResourceFactory.create">[docs]</a>    <span class="k">def</span> <span class="nf">create</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">rtype</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;Create a new instance of a Ressource Manager&quot;&quot;&quot;</span>
+        <span class="n">rclass</span> <span class="o">=</span> <span class="n">cls</span><span class="o">.</span><span class="n">_resource_types</span><span class="p">[</span><span class="n">rtype</span><span class="p">]</span>
+        <span class="k">return</span> <span class="n">rclass</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+</div></div>
+<div class="viewcode-block" id="populate_factory"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.populate_factory">[docs]</a><span class="k">def</span> <span class="nf">populate_factory</span><span class="p">():</span>
+    <span class="sd">&quot;&quot;&quot;Find and rgister all available RMs</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="c"># Once the factory is populated, don&#39;t repopulate</span>
+    <span class="k">if</span> <span class="ow">not</span> <span class="n">ResourceFactory</span><span class="o">.</span><span class="n">resource_types</span><span class="p">():</span>
+        <span class="k">for</span> <span class="n">rclass</span> <span class="ow">in</span> <span class="n">find_types</span><span class="p">():</span>
+            <span class="n">ResourceFactory</span><span class="o">.</span><span class="n">register_type</span><span class="p">(</span><span class="n">rclass</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="find_types"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.resource.find_types">[docs]</a><span class="k">def</span> <span class="nf">find_types</span><span class="p">():</span>
+    <span class="sd">&quot;&quot;&quot;Look into the different folders to find all the </span>
+<span class="sd">    availables Resources Managers</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">search_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;NEPI_SEARCH_PATH&quot;</span><span class="p">,</span> <span class="s">&quot;&quot;</span><span class="p">)</span>
+    <span class="n">search_path</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">search_path</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot; &quot;</span><span class="p">))</span>
+   
+    <span class="kn">import</span> <span class="nn">inspect</span>
+    <span class="kn">import</span> <span class="nn">nepi.resources</span> 
+    <span class="n">path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">nepi</span><span class="o">.</span><span class="n">resources</span><span class="o">.</span><span class="n">__file__</span><span class="p">)</span>
+    <span class="n">search_path</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
+
+    <span class="n">types</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+
+    <span class="k">for</span> <span class="n">importer</span><span class="p">,</span> <span class="n">modname</span><span class="p">,</span> <span class="n">ispkg</span> <span class="ow">in</span> <span class="n">pkgutil</span><span class="o">.</span><span class="n">walk_packages</span><span class="p">(</span><span class="n">search_path</span><span class="p">,</span> 
+            <span class="n">prefix</span> <span class="o">=</span> <span class="s">&quot;nepi.resources.&quot;</span><span class="p">):</span>
+
+        <span class="n">loader</span> <span class="o">=</span> <span class="n">importer</span><span class="o">.</span><span class="n">find_module</span><span class="p">(</span><span class="n">modname</span><span class="p">)</span>
+        
+        <span class="k">try</span><span class="p">:</span>
+            <span class="c"># Notice: Repeated calls to load_module will act as a reload of the module</span>
+            <span class="k">if</span> <span class="n">modname</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">modules</span><span class="p">:</span>
+                <span class="n">module</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">modules</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">modname</span><span class="p">)</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="n">module</span> <span class="o">=</span> <span class="n">loader</span><span class="o">.</span><span class="n">load_module</span><span class="p">(</span><span class="n">modname</span><span class="p">)</span>
+
+            <span class="k">for</span> <span class="n">attrname</span> <span class="ow">in</span> <span class="nb">dir</span><span class="p">(</span><span class="n">module</span><span class="p">):</span>
+                <span class="k">if</span> <span class="n">attrname</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&quot;_&quot;</span><span class="p">):</span>
+                    <span class="k">continue</span>
+
+                <span class="n">attr</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">module</span><span class="p">,</span> <span class="n">attrname</span><span class="p">)</span>
+
+                <span class="k">if</span> <span class="n">attr</span> <span class="o">==</span> <span class="n">ResourceManager</span><span class="p">:</span>
+                    <span class="k">continue</span>
+
+                <span class="k">if</span> <span class="ow">not</span> <span class="n">inspect</span><span class="o">.</span><span class="n">isclass</span><span class="p">(</span><span class="n">attr</span><span class="p">):</span>
+                    <span class="k">continue</span>
+
+                <span class="k">if</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">attr</span><span class="p">,</span> <span class="n">ResourceManager</span><span class="p">):</span>
+                    <span class="n">types</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">attr</span><span class="p">)</span>
+
+                    <span class="k">if</span> <span class="ow">not</span> <span class="n">modname</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">modules</span><span class="p">:</span>
+                        <span class="n">sys</span><span class="o">.</span><span class="n">modules</span><span class="p">[</span><span class="n">modname</span><span class="p">]</span> <span class="o">=</span> <span class="n">module</span>
+
+        <span class="k">except</span><span class="p">:</span>
+            <span class="kn">import</span> <span class="nn">traceback</span>
+            <span class="kn">import</span> <span class="nn">logging</span>
+            <span class="n">err</span> <span class="o">=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">()</span>
+            <span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s">&quot;Resource.find_types()&quot;</span><span class="p">)</span>
+            <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s">&quot;Error while loading Resource Managers </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">err</span><span class="p">)</span>
+
+    <span class="k">return</span> <span class="n">types</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/execution/runner.html b/doc/sphinx/_build/html/_modules/nepi/execution/runner.html
new file mode 100644 (file)
index 0000000..63b0f15
--- /dev/null
@@ -0,0 +1,267 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.execution.runner &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../index.html" />
+    <link rel="up" title="Module code" href="../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.execution.runner</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.ec</span> <span class="kn">import</span> <span class="n">ExperimentController</span><span class="p">,</span> <span class="n">ECState</span>
+
+<span class="kn">import</span> <span class="nn">math</span>
+<span class="kn">import</span> <span class="nn">numpy</span>
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">time</span>
+
+<div class="viewcode-block" id="ExperimentRunner"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.runner.ExperimentRunner">[docs]</a><span class="k">class</span> <span class="nc">ExperimentRunner</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot; The ExperimentRunner entity is responsible of</span>
+<span class="sd">    re-running an experiment described by an ExperimentController </span>
+<span class="sd">    multiple time</span>
+
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">ExperimentRunner</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+    
+<div class="viewcode-block" id="ExperimentRunner.run"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.runner.ExperimentRunner.run">[docs]</a>    <span class="k">def</span> <span class="nf">run</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">min_runs</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">max_runs</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">wait_time</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> 
+            <span class="n">wait_guids</span> <span class="o">=</span> <span class="p">[],</span> <span class="n">compute_metric_callback</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> 
+            <span class="n">evaluate_convergence_callback</span> <span class="o">=</span> <span class="bp">None</span> <span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Run a same experiment independently multiple times, until the </span>
+<span class="sd">        evaluate_convergence_callback function returns True</span>
+
+<span class="sd">        :param ec: Description of experiment to replicate. </span>
+<span class="sd">            The runner takes care of deploying the EC, so ec.deploy()</span>
+<span class="sd">            must not be invoked directly before or after invoking</span>
+<span class="sd">            runner.run().</span>
+<span class="sd">        :type ec: ExperimentController</span>
+
+<span class="sd">        :param min_runs: Minimum number of times the experiment must be </span>
+<span class="sd">            replicated</span>
+<span class="sd">        :type min_runs: int</span>
+
+<span class="sd">        :param max_runs: Maximum number of times the experiment can be </span>
+<span class="sd">            replicated</span>
+<span class="sd">        :type max_runs: int</span>
+
+<span class="sd">        :param wait_time: Time to wait in seconds on each run between invoking</span>
+<span class="sd">            ec.deploy() and ec.release().</span>
+<span class="sd">        :type wait_time: float</span>
+
+<span class="sd">        :param wait_guids: List of guids wait for finalization on each run.</span>
+<span class="sd">            This list is passed to ec.wait_finished()</span>
+<span class="sd">        :type wait_guids: list </span>
+
+<span class="sd">        :param compute_metric_callback: User defined function invoked after </span>
+<span class="sd">            each experiment run to compute a metric. The metric is usually</span>
+<span class="sd">            a network measurement obtained from the data collected </span>
+<span class="sd">            during experiment execution.</span>
+<span class="sd">            The function is invoked passing the ec and the run number as arguments. </span>
+<span class="sd">            It must return the value for the computed metric(s) (usually a single </span>
+<span class="sd">            numerical value, but it can be several).</span>
+
+<span class="sd">                metric = compute_metric_callback(ec, run)</span>
+<span class="sd">            </span>
+<span class="sd">        :type compute_metric_callback: function </span>
+
+<span class="sd">        :param evaluate_convergence_callback: User defined function invoked after</span>
+<span class="sd">            computing the metric on each run, to evaluate the experiment was</span>
+<span class="sd">            run enough times. It takes the list of cumulated metrics produced by </span>
+<span class="sd">            the compute_metric_callback up to the current run, and decided </span>
+<span class="sd">            whether the metrics have statistically converged to a meaningful value</span>
+<span class="sd">            or not. It must return either True or False. </span>
+
+<span class="sd">                stop = evaluate_convergence_callback(ec, run, metrics)</span>
+
+<span class="sd">            If stop is True, then the runner will exit.</span>
+<span class="sd">            </span>
+<span class="sd">        :type evaluate_convergence_callback: function </span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+
+        <span class="k">if</span> <span class="p">(</span><span class="ow">not</span> <span class="n">max_runs</span> <span class="ow">or</span> <span class="n">max_runs</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">compute_metric_callback</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Undefined STOP condition, set stop_callback or max_runs&quot;</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">if</span> <span class="n">compute_metric_callback</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">evaluate_convergence_callback</span><span class="p">:</span>
+            <span class="n">evaluate_convergence_callback</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">evaluate_normal_convergence</span>
+            <span class="n">ec</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot; Treating data as normal to evaluate convergence. &quot;</span>
+                    <span class="s">&quot;Experiment will stop when the standard error with 95% &quot;</span>
+                    <span class="s">&quot;confidence interval is &gt;= 5</span><span class="si">% o</span><span class="s">f the mean of the collected samples &quot;</span><span class="p">)</span>
+        
+        <span class="c"># Force persistence of experiment controller</span>
+        <span class="n">ec</span><span class="o">.</span><span class="n">_persist</span> <span class="o">=</span> <span class="bp">True</span>
+
+        <span class="n">filepath</span> <span class="o">=</span> <span class="n">ec</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">dirpath</span> <span class="o">=</span> <span class="n">ec</span><span class="o">.</span><span class="n">exp_dir</span><span class="p">)</span>
+
+        <span class="n">samples</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="n">run</span> <span class="o">=</span> <span class="mi">0</span>
+        <span class="n">stop</span> <span class="o">=</span> <span class="bp">False</span>
+
+        <span class="k">while</span> <span class="ow">not</span> <span class="n">stop</span><span class="p">:</span> 
+            <span class="n">run</span> <span class="o">+=</span> <span class="mi">1</span>
+
+            <span class="n">ec</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_experiment</span><span class="p">(</span><span class="n">filepath</span><span class="p">,</span> <span class="n">wait_time</span><span class="p">,</span> <span class="n">wait_guids</span><span class="p">)</span>
+            
+            <span class="n">ec</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot; RUN </span><span class="si">%d</span><span class="s"> </span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">run</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="n">compute_metric_callback</span><span class="p">:</span>
+                <span class="n">metric</span> <span class="o">=</span> <span class="n">compute_metric_callback</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">run</span><span class="p">)</span>
+                <span class="k">if</span> <span class="n">metric</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
+                    <span class="n">samples</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">metric</span><span class="p">)</span>
+
+                    <span class="k">if</span> <span class="n">run</span> <span class="o">&gt;=</span> <span class="n">min_runs</span> <span class="ow">and</span> <span class="n">evaluate_convergence_callback</span><span class="p">:</span>
+                        <span class="k">if</span> <span class="n">evaluate_convergence_callback</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">run</span><span class="p">,</span> <span class="n">samples</span><span class="p">):</span>
+                            <span class="n">stop</span> <span class="o">=</span> <span class="bp">True</span>
+
+            <span class="k">if</span> <span class="n">run</span> <span class="o">&gt;=</span> <span class="n">min_runs</span> <span class="ow">and</span> <span class="n">max_runs</span> <span class="o">&gt;</span> <span class="o">-</span><span class="mi">1</span> <span class="ow">and</span> <span class="n">run</span> <span class="o">&gt;=</span> <span class="n">max_runs</span> <span class="p">:</span>
+                <span class="n">stop</span> <span class="o">=</span> <span class="bp">True</span>
+
+            <span class="n">ec</span><span class="o">.</span><span class="n">shutdown</span><span class="p">()</span>
+            <span class="k">del</span> <span class="n">ec</span>
+
+        <span class="k">return</span> <span class="n">run</span>
+</div>
+<div class="viewcode-block" id="ExperimentRunner.evaluate_normal_convergence"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.runner.ExperimentRunner.evaluate_normal_convergence">[docs]</a>    <span class="k">def</span> <span class="nf">evaluate_normal_convergence</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">run</span><span class="p">,</span> <span class="n">metrics</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns True when the confidence interval of the sample mean is</span>
+<span class="sd">        less than 5% of the mean value, for a 95% confidence level,</span>
+<span class="sd">        assuming normal distribution of the data</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+
+        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">metrics</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;0 samples collected&quot;</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="n">x</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">metrics</span><span class="p">)</span>
+        <span class="n">n</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">metrics</span><span class="p">)</span>
+        <span class="n">std</span> <span class="o">=</span> <span class="n">x</span><span class="o">.</span><span class="n">std</span><span class="p">()</span>
+        <span class="n">se</span> <span class="o">=</span> <span class="n">std</span> <span class="o">/</span> <span class="n">math</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">n</span><span class="p">)</span>
+        <span class="n">m</span> <span class="o">=</span> <span class="n">x</span><span class="o">.</span><span class="n">mean</span><span class="p">()</span>
+
+        <span class="c"># Confidence interval for 95% confidence level, </span>
+        <span class="c"># assuming normally distributed data.</span>
+        <span class="n">ci95</span> <span class="o">=</span> <span class="n">se</span> <span class="o">*</span> <span class="mi">2</span>
+        
+        <span class="n">ec</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot; RUN </span><span class="si">%d</span><span class="s"> - SAMPLES </span><span class="si">%d</span><span class="s"> MEAN </span><span class="si">%.2f</span><span class="s"> STD </span><span class="si">%.2f</span><span class="s"> CI (95</span><span class="si">%%</span><span class="s">) </span><span class="si">%.2f</span><span class="s"> </span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span>
+            <span class="n">run</span><span class="p">,</span> <span class="n">n</span><span class="p">,</span> <span class="n">m</span><span class="p">,</span> <span class="n">std</span><span class="p">,</span> <span class="n">ci95</span> <span class="p">)</span> <span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">m</span> <span class="o">*</span> <span class="mf">0.05</span> <span class="o">&gt;=</span> <span class="n">ci95</span>
+</div>
+<div class="viewcode-block" id="ExperimentRunner.run_experiment"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.runner.ExperimentRunner.run_experiment">[docs]</a>    <span class="k">def</span> <span class="nf">run_experiment</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filepath</span><span class="p">,</span> <span class="n">wait_time</span><span class="p">,</span> <span class="n">wait_guids</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Run an experiment based on the description stored</span>
+<span class="sd">        in filepath.</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">ec</span> <span class="o">=</span> <span class="n">ExperimentController</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">filepath</span><span class="p">)</span>
+
+        <span class="n">ec</span><span class="o">.</span><span class="n">deploy</span><span class="p">()</span>
+    
+        <span class="n">ec</span><span class="o">.</span><span class="n">wait_finished</span><span class="p">(</span><span class="n">wait_guids</span><span class="p">)</span>
+        <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="n">wait_time</span><span class="p">)</span>
+
+        <span class="n">ec</span><span class="o">.</span><span class="n">release</span><span class="p">()</span>
+
+        <span class="k">if</span> <span class="n">ec</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ECState</span><span class="o">.</span><span class="n">FAILED</span><span class="p">:</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="s">&quot;Experiment failed&quot;</span>
+
+        <span class="k">return</span> <span class="n">ec</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/execution/scheduler.html b/doc/sphinx/_build/html/_modules/nepi/execution/scheduler.html
new file mode 100644 (file)
index 0000000..f5ff0e1
--- /dev/null
@@ -0,0 +1,201 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.execution.scheduler &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../index.html" />
+    <link rel="up" title="Module code" href="../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.execution.scheduler</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">import</span> <span class="nn">itertools</span>
+<span class="kn">import</span> <span class="nn">heapq</span>
+
+<div class="viewcode-block" id="TaskStatus"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.scheduler.TaskStatus">[docs]</a><span class="k">class</span> <span class="nc">TaskStatus</span><span class="p">:</span>
+    <span class="sd">&quot;&quot;&quot; Execution state of the Task</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">NEW</span> <span class="o">=</span> <span class="mi">0</span>
+    <span class="n">DONE</span> <span class="o">=</span> <span class="mi">1</span>
+    <span class="n">ERROR</span> <span class="o">=</span> <span class="mi">2</span>
+</div>
+<div class="viewcode-block" id="Task"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.scheduler.Task">[docs]</a><span class="k">class</span> <span class="nc">Task</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot; A Task represents an operation to be executed by the </span>
+<span class="sd">    ExperimentController scheduler</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">timestamp</span><span class="p">,</span> <span class="n">callback</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        :param timestamp: Future execution date of the operation</span>
+<span class="sd">        :type timestamp: str</span>
+
+<span class="sd">        :param callback: A function to invoke in order to execute the operation</span>
+<span class="sd">        :type callback: function</span>
+
+<span class="sd">        &quot;&quot;&quot;</span> 
+        <span class="bp">self</span><span class="o">.</span><span class="n">id</span> <span class="o">=</span> <span class="bp">None</span> 
+        <span class="bp">self</span><span class="o">.</span><span class="n">timestamp</span> <span class="o">=</span> <span class="n">timestamp</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">callback</span> <span class="o">=</span> <span class="n">callback</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">result</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">status</span> <span class="o">=</span> <span class="n">TaskStatus</span><span class="o">.</span><span class="n">NEW</span>
+</div>
+<div class="viewcode-block" id="HeapScheduler"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.scheduler.HeapScheduler">[docs]</a><span class="k">class</span> <span class="nc">HeapScheduler</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot; Create a Heap Scheduler</span>
+
+<span class="sd">    .. note::</span>
+
+<span class="sd">        This class is thread safe.</span>
+<span class="sd">        All calls to C Extensions are made atomic by the GIL in the CPython implementation.</span>
+<span class="sd">        heapq.heappush, heapq.heappop, and list access are therefore thread-safe.</span>
+
+<span class="sd">    &quot;&quot;&quot;</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">HeapScheduler</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_queue</span> <span class="o">=</span> <span class="nb">list</span><span class="p">()</span> 
+        <span class="bp">self</span><span class="o">.</span><span class="n">_valid</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_idgen</span> <span class="o">=</span> <span class="n">itertools</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="HeapScheduler.pending"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.scheduler.HeapScheduler.pending">[docs]</a>    <span class="k">def</span> <span class="nf">pending</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the list of pending task ids &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_valid</span>
+</div>
+<div class="viewcode-block" id="HeapScheduler.schedule"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.scheduler.HeapScheduler.schedule">[docs]</a>    <span class="k">def</span> <span class="nf">schedule</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">task</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Add a task to the queue ordered by task.timestamp and arrival order</span>
+
+<span class="sd">        :param task: task to schedule</span>
+<span class="sd">        :type task: task</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="n">task</span><span class="o">.</span><span class="n">id</span> <span class="o">==</span> <span class="bp">None</span><span class="p">:</span>
+            <span class="n">task</span><span class="o">.</span><span class="n">id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_idgen</span><span class="o">.</span><span class="n">next</span><span class="p">()</span>
+
+        <span class="n">entry</span> <span class="o">=</span> <span class="p">(</span><span class="n">task</span><span class="o">.</span><span class="n">timestamp</span><span class="p">,</span> <span class="n">task</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> <span class="n">task</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_valid</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">task</span><span class="o">.</span><span class="n">id</span><span class="p">)</span>
+        <span class="n">heapq</span><span class="o">.</span><span class="n">heappush</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_queue</span><span class="p">,</span> <span class="n">entry</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">task</span>
+</div>
+<div class="viewcode-block" id="HeapScheduler.remove"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.scheduler.HeapScheduler.remove">[docs]</a>    <span class="k">def</span> <span class="nf">remove</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Remove a task form the queue</span>
+
+<span class="sd">        :param tid: Id of the task to be removed</span>
+<span class="sd">        :type tid: int</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_valid</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">tid</span><span class="p">)</span>
+        <span class="k">except</span><span class="p">:</span>
+            <span class="k">pass</span>
+</div>
+<div class="viewcode-block" id="HeapScheduler.next"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.scheduler.HeapScheduler.next">[docs]</a>    <span class="k">def</span> <span class="nf">next</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Get the next task in the queue by timestamp and arrival order</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_queue</span><span class="p">:</span>
+            <span class="k">try</span><span class="p">:</span>
+                <span class="n">timestamp</span><span class="p">,</span> <span class="n">tid</span><span class="p">,</span> <span class="n">task</span> <span class="o">=</span> <span class="n">heapq</span><span class="o">.</span><span class="n">heappop</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_queue</span><span class="p">)</span>
+                <span class="k">if</span> <span class="n">tid</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_valid</span><span class="p">:</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">tid</span><span class="p">)</span>
+                    <span class="k">return</span> <span class="n">task</span>
+            <span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span>
+                <span class="c"># heap empty</span>
+                <span class="k">pass</span>
+        <span class="k">return</span> <span class="bp">None</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/execution/trace.html b/doc/sphinx/_build/html/_modules/nepi/execution/trace.html
new file mode 100644 (file)
index 0000000..dfe0bb1
--- /dev/null
@@ -0,0 +1,148 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.execution.trace &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../index.html" />
+    <link rel="up" title="Module code" href="../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.execution.trace</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<div class="viewcode-block" id="TraceAttr"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.trace.TraceAttr">[docs]</a><span class="k">class</span> <span class="nc">TraceAttr</span><span class="p">:</span>
+    <span class="sd">&quot;&quot;&quot;A Trace attribute defines information about a Trace that can</span>
+<span class="sd">    be queried</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">ALL</span> <span class="o">=</span> <span class="s">&quot;all&quot;</span>
+    <span class="n">STREAM</span> <span class="o">=</span> <span class="s">&quot;stream&quot;</span>
+    <span class="n">PATH</span> <span class="o">=</span> <span class="s">&quot;path&quot;</span>
+    <span class="n">SIZE</span> <span class="o">=</span> <span class="s">&quot;size&quot;</span>
+</div>
+<div class="viewcode-block" id="Trace"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.trace.Trace">[docs]</a><span class="k">class</span> <span class="nc">Trace</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot; A Trace represents information about a Resource that can </span>
+<span class="sd">    be collected </span>
+<span class="sd">    &quot;&quot;&quot;</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">help</span><span class="p">,</span> <span class="n">enabled</span> <span class="o">=</span> <span class="bp">False</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        :param name: Name of the Trace</span>
+<span class="sd">        :type name: str</span>
+
+<span class="sd">        :param help: Description of the Trace</span>
+<span class="sd">        :type help: str</span>
+<span class="sd">        </span>
+<span class="sd">        :param enabled: Sets activation state of Trace</span>
+<span class="sd">        :type enabled: bool</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_name</span> <span class="o">=</span> <span class="n">name</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_help</span> <span class="o">=</span> <span class="n">help</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">enabled</span> <span class="o">=</span> <span class="n">enabled</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="Trace.name"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.trace.Trace.name">[docs]</a>    <span class="k">def</span> <span class="nf">name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the name of the trace &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_name</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="Trace.help"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.trace.Trace.help">[docs]</a>    <span class="k">def</span> <span class="nf">help</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the help of the trace &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_help</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/all/collector.html b/doc/sphinx/_build/html/_modules/nepi/resources/all/collector.html
new file mode 100644 (file)
index 0000000..55ec554
--- /dev/null
@@ -0,0 +1,227 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.all.collector &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.all.collector</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span><span class="p">,</span> <span class="n">ResourceAction</span>
+<span class="kn">from</span> <span class="nn">nepi.util.sshfuncs</span> <span class="kn">import</span> <span class="n">ProcStatus</span>
+
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">tempfile</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="Collector"><a class="viewcode-back" href="../../../../_layout/nepi.resources.all.html#nepi.resources.all.collector.Collector">[docs]</a><span class="k">class</span> <span class="nc">Collector</span><span class="p">(</span><span class="n">ResourceManager</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot; The collector entity is reponsible of collecting traces</span>
+<span class="sd">    of a same type associated to RMs into a local directory.</span>
+
+<span class="sd">    .. class:: Class Args :</span>
+
+<span class="sd">        :param ec: The Experiment controller</span>
+<span class="sd">        :type ec: ExperimentController</span>
+<span class="sd">        :param guid: guid of the RM</span>
+<span class="sd">        :type guid: int</span>
+
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;Collector&quot;</span>
+    <span class="n">_help</span> <span class="o">=</span> <span class="s">&quot;A Collector can be attached to a trace name on another &quot;</span> \
+        <span class="s">&quot;ResourceManager and will retrieve and store the trace content &quot;</span> \
+        <span class="s">&quot;in a local file at the end of the experiment&quot;</span>
+    <span class="n">_platform</span> <span class="o">=</span> <span class="s">&quot;all&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">trace_name</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;traceName&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;Name of the trace to be collected&quot;</span><span class="p">,</span> 
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">sub_dir</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;subDir&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;Sub directory to collect traces into&quot;</span><span class="p">,</span> 
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">rename</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;rename&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;Name to give to the collected trace file&quot;</span><span class="p">,</span> 
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">trace_name</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">sub_dir</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">rename</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">Collector</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_store_path</span> <span class="o">=</span>  <span class="bp">None</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="Collector.store_path"><a class="viewcode-back" href="../../../../_layout/nepi.resources.all.html#nepi.resources.all.collector.Collector.store_path">[docs]</a>    <span class="k">def</span> <span class="nf">store_path</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_store_path</span>
+   </div>
+<div class="viewcode-block" id="Collector.do_provision"><a class="viewcode-back" href="../../../../_layout/nepi.resources.all.html#nepi.resources.all.collector.Collector.do_provision">[docs]</a>    <span class="k">def</span> <span class="nf">do_provision</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">trace_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;traceName&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">trace_name</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">fail</span><span class="p">()</span>
+            
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;No traceName was specified&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">_store_path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">run_dir</span>
+
+        <span class="n">subdir</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;subDir&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">subdir</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_store_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">store_path</span><span class="p">,</span> <span class="n">subdir</span><span class="p">)</span>
+        
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Creating local directory at </span><span class="si">%s</span><span class="s"> to store </span><span class="si">%s</span><span class="s"> traces &quot;</span> <span class="o">%</span> <span class="p">(</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">store_path</span><span class="p">,</span> <span class="n">trace_name</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">store_path</span><span class="p">)</span>
+        <span class="k">except</span> <span class="ne">OSError</span><span class="p">:</span>
+            <span class="k">pass</span>
+
+        <span class="nb">super</span><span class="p">(</span><span class="n">Collector</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_provision</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="Collector.do_deploy"><a class="viewcode-back" href="../../../../_layout/nepi.resources.all.html#nepi.resources.all.collector.Collector.do_deploy">[docs]</a>    <span class="k">def</span> <span class="nf">do_deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">do_provision</span><span class="p">()</span>
+
+        <span class="nb">super</span><span class="p">(</span><span class="n">Collector</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_deploy</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="Collector.do_release"><a class="viewcode-back" href="../../../../_layout/nepi.resources.all.html#nepi.resources.all.collector.Collector.do_release">[docs]</a>    <span class="k">def</span> <span class="nf">do_release</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">trace_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;traceName&quot;</span><span class="p">)</span>
+        <span class="n">rename</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;rename&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">trace_name</span>
+
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Collecting &#39;</span><span class="si">%s</span><span class="s">&#39; traces to local directory </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span>
+            <span class="n">trace_name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">store_path</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+
+        <span class="n">rms</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">()</span>
+        <span class="k">for</span> <span class="n">rm</span> <span class="ow">in</span> <span class="n">rms</span><span class="p">:</span>
+            <span class="n">fpath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">store_path</span><span class="p">,</span> <span class="s">&quot;</span><span class="si">%d</span><span class="s">.</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">rm</span><span class="o">.</span><span class="n">guid</span><span class="p">,</span> 
+                 <span class="n">rename</span><span class="p">))</span>
+
+            <span class="k">try</span><span class="p">:</span>
+                <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">trace</span><span class="p">(</span><span class="n">rm</span><span class="o">.</span><span class="n">guid</span><span class="p">,</span> <span class="n">trace_name</span><span class="p">)</span>
+                <span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">fpath</span><span class="p">,</span> <span class="s">&quot;w&quot;</span><span class="p">)</span>
+                <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
+                <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+            <span class="k">except</span><span class="p">:</span>
+                <span class="kn">import</span> <span class="nn">traceback</span>
+                <span class="n">err</span> <span class="o">=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">()</span>
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Couldn&#39;t retrieve trace </span><span class="si">%s</span><span class="s"> for </span><span class="si">%d</span><span class="s"> at </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">trace_name</span><span class="p">,</span> 
+                        <span class="n">rm</span><span class="o">.</span><span class="n">guid</span><span class="p">,</span> <span class="n">fpath</span><span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span> <span class="o">=</span> <span class="s">&quot;&quot;</span><span class="p">,</span> <span class="n">err</span> <span class="o">=</span> <span class="n">err</span><span class="p">)</span>
+                <span class="k">continue</span>
+
+        <span class="nb">super</span><span class="p">(</span><span class="n">Collector</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_release</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="Collector.valid_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.all.html#nepi.resources.all.collector.Collector.valid_connection">[docs]</a>    <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="c"># TODO: Validate!</span>
+        <span class="k">return</span> <span class="bp">True</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/application.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/application.html
new file mode 100644 (file)
index 0000000..3749356
--- /dev/null
@@ -0,0 +1,860 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.application &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.application</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.node</span> <span class="kn">import</span> <span class="n">LinuxNode</span>
+<span class="kn">from</span> <span class="nn">nepi.util.sshfuncs</span> <span class="kn">import</span> <span class="n">ProcStatus</span>
+<span class="kn">from</span> <span class="nn">nepi.util.timefuncs</span> <span class="kn">import</span> <span class="n">tnow</span><span class="p">,</span> <span class="n">tdiffsec</span>
+
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">subprocess</span>
+
+<span class="c"># TODO: Resolve wildcards in commands!!</span>
+<span class="c"># TODO: When a failure occurs during deployment, scp and ssh processes are left running behind!!</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="LinuxApplication"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication">[docs]</a><span class="k">class</span> <span class="nc">LinuxApplication</span><span class="p">(</span><span class="n">ResourceManager</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    .. class:: Class Args :</span>
+<span class="sd">      </span>
+<span class="sd">        :param ec: The Experiment controller</span>
+<span class="sd">        :type ec: ExperimentController</span>
+<span class="sd">        :param guid: guid of the RM</span>
+<span class="sd">        :type guid: int</span>
+
+<span class="sd">    .. note::</span>
+
+<span class="sd">        A LinuxApplication RM represents a process that can be executed in</span>
+<span class="sd">        a remote Linux host using SSH.</span>
+
+<span class="sd">        The LinuxApplication RM takes care of uploadin sources and any files</span>
+<span class="sd">        needed to run the experiment, to the remote host. </span>
+<span class="sd">        It also allows to provide source compilation (build) and installation </span>
+<span class="sd">        instructions, and takes care of automating the sources build and </span>
+<span class="sd">        installation tasks for the user.</span>
+
+<span class="sd">        It is important to note that files uploaded to the remote host have</span>
+<span class="sd">        two possible scopes: single-experiment or multi-experiment.</span>
+<span class="sd">        Single experiment files are those that will not be re-used by other </span>
+<span class="sd">        experiments. Multi-experiment files are those that will.</span>
+<span class="sd">        Sources and shared files are always made available to all experiments.</span>
+
+<span class="sd">        Directory structure:</span>
+
+<span class="sd">        The directory structure used by LinuxApplication RM at the Linux</span>
+<span class="sd">        host is the following:</span>
+
+<span class="sd">        ${HOME}/.nepi/nepi-usr --&gt; Base directory for multi-experiment files</span>
+<span class="sd">                      |</span>
+<span class="sd">        ${LIB}        |- /lib --&gt; Base directory for libraries</span>
+<span class="sd">        ${BIN}        |- /bin --&gt; Base directory for binary files</span>
+<span class="sd">        ${SRC}        |- /src --&gt; Base directory for sources</span>
+<span class="sd">        ${SHARE}      |- /share --&gt; Base directory for other files</span>
+
+<span class="sd">        ${HOME}/.nepi/nepi-exp --&gt; Base directory for single-experiment files</span>
+<span class="sd">                      |</span>
+<span class="sd">        ${EXP_HOME}   |- /&lt;exp-id&gt;  --&gt; Base directory for experiment exp-id</span>
+<span class="sd">                          |</span>
+<span class="sd">        ${APP_HOME}       |- /&lt;app-guid&gt; --&gt; Base directory for application </span>
+<span class="sd">                               |     specific files (e.g. command.sh, input)</span>
+<span class="sd">                               | </span>
+<span class="sd">        ${RUN_HOME}            |- /&lt;run-id&gt; --&gt; Base directory for run specific</span>
+
+<span class="sd">    &quot;&quot;&quot;</span>
+
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;linux::Application&quot;</span>
+    <span class="n">_help</span> <span class="o">=</span> <span class="s">&quot;Runs an application on a Linux host with a BASH command &quot;</span>
+    <span class="n">_platform</span> <span class="o">=</span> <span class="s">&quot;linux&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">,</span> <span class="s">&quot;Command to execute at application start. &quot;</span>
+                <span class="s">&quot;Note that commands will be executed in the ${RUN_HOME} directory, &quot;</span>
+                <span class="s">&quot;make sure to take this into account when using relative paths. &quot;</span><span class="p">,</span> 
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+        <span class="n">forward_x11</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;forwardX11&quot;</span><span class="p">,</span> <span class="s">&quot;Enables X11 forwarding for SSH connections&quot;</span><span class="p">,</span> 
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+        <span class="n">env</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">,</span> <span class="s">&quot;Environment variables string for command execution&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+        <span class="n">sudo</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;sudo&quot;</span><span class="p">,</span> <span class="s">&quot;Run with root privileges&quot;</span><span class="p">,</span> 
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+        <span class="n">depends</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;depends&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;Space-separated list of packages required to run the application&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+        <span class="n">sources</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;sources&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;semi-colon separated list of regular files to be uploaded to ${SRC} &quot;</span>
+                <span class="s">&quot;directory prior to building. Archives won&#39;t be expanded automatically. &quot;</span>
+                <span class="s">&quot;Sources are globally available for all experiments unless &quot;</span>
+                <span class="s">&quot;cleanHome is set to True (This will delete all sources). &quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+        <span class="n">files</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;files&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;semi-colon separated list of regular miscellaneous files to be uploaded &quot;</span>
+                <span class="s">&quot;to ${SHARE} directory. &quot;</span>
+                <span class="s">&quot;Files are globally available for all experiments unless &quot;</span>
+                <span class="s">&quot;cleanHome is set to True (This will delete all files). &quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+        <span class="n">libs</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;libs&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;semi-colon separated list of libraries (e.g. .so files) to be uploaded &quot;</span>
+                <span class="s">&quot;to ${LIB} directory. &quot;</span>
+                <span class="s">&quot;Libraries are globally available for all experiments unless &quot;</span>
+                <span class="s">&quot;cleanHome is set to True (This will delete all files). &quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+        <span class="n">bins</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;bins&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;semi-colon separated list of binary files to be uploaded &quot;</span>
+                <span class="s">&quot;to ${BIN} directory. &quot;</span>
+                <span class="s">&quot;Binaries are globally available for all experiments unless &quot;</span>
+                <span class="s">&quot;cleanHome is set to True (This will delete all files). &quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+        <span class="n">code</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;code&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;Plain text source code to be uploaded to the ${APP_HOME} directory. &quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+        <span class="n">build</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;build&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;Build commands to execute after deploying the sources. &quot;</span>
+                <span class="s">&quot;Sources are uploaded to the ${SRC} directory and code &quot;</span>
+                <span class="s">&quot;is uploaded to the ${APP_HOME} directory. </span><span class="se">\n</span><span class="s">&quot;</span>
+                <span class="s">&quot;Usage example: tar xzf ${SRC}/my-app.tgz &amp;&amp; cd my-app &amp;&amp; &quot;</span>
+                <span class="s">&quot;./configure &amp;&amp; make &amp;&amp; make clean.</span><span class="se">\n</span><span class="s">&quot;</span>
+                <span class="s">&quot;Make sure to make the build commands return with a nonzero exit &quot;</span>
+                <span class="s">&quot;code on error.&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+        <span class="n">install</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;install&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;Commands to transfer built files to their final destinations. &quot;</span>
+                <span class="s">&quot;Install commands are executed after build commands. &quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+        <span class="n">stdin</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;stdin&quot;</span><span class="p">,</span> <span class="s">&quot;Standard input for the &#39;command&#39;&quot;</span><span class="p">,</span> 
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+        <span class="n">tear_down</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;tearDown&quot;</span><span class="p">,</span> <span class="s">&quot;Command to be executed just before &quot;</span> 
+                <span class="s">&quot;releasing the resource&quot;</span><span class="p">,</span> 
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">forward_x11</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">env</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">sudo</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">depends</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">sources</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">code</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">files</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">bins</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">libs</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">build</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">install</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">stdin</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">tear_down</span><span class="p">)</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">stdout</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;stdout&quot;</span><span class="p">,</span> <span class="s">&quot;Standard output stream&quot;</span><span class="p">,</span> <span class="n">enabled</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+        <span class="n">stderr</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;stderr&quot;</span><span class="p">,</span> <span class="s">&quot;Standard error stream&quot;</span><span class="p">,</span> <span class="n">enabled</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">stdout</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">stderr</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxApplication</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_pid</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_ppid</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_node</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;app-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span>
+
+        <span class="c"># whether the command should run in foreground attached</span>
+        <span class="c"># to a terminal</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_in_foreground</span> <span class="o">=</span> <span class="bp">False</span>
+
+        <span class="c"># whether to use sudo to kill the application process</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_sudo_kill</span> <span class="o">=</span> <span class="bp">False</span>
+
+        <span class="c"># keep a reference to the running process handler when </span>
+        <span class="c"># the command is not executed as remote daemon in background</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_proc</span> <span class="o">=</span> <span class="bp">None</span>
+
+        <span class="c"># timestamp of last state check of the application</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_last_state_check</span> <span class="o">=</span> <span class="n">tnow</span><span class="p">()</span>
+        
+<div class="viewcode-block" id="LinuxApplication.log_message"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.log_message">[docs]</a>    <span class="k">def</span> <span class="nf">log_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s">&quot; guid </span><span class="si">%d</span><span class="s"> - host </span><span class="si">%s</span><span class="s"> - </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">,</span> 
+                <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;hostname&quot;</span><span class="p">),</span> <span class="n">msg</span><span class="p">)</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxApplication.node"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.node">[docs]</a>    <span class="k">def</span> <span class="nf">node</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_node</span><span class="p">:</span>
+            <span class="n">node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">LinuxNode</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="n">node</span><span class="p">:</span> 
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Application </span><span class="si">%s</span><span class="s"> guid </span><span class="si">%d</span><span class="s"> NOT connected to Node&quot;</span> <span class="o">%</span> <span class="p">(</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">_rtype</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">)</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">_node</span> <span class="o">=</span> <span class="n">node</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_node</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxApplication.app_home"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.app_home">[docs]</a>    <span class="k">def</span> <span class="nf">app_home</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">exp_home</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_home</span><span class="p">)</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxApplication.run_home"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.run_home">[docs]</a>    <span class="k">def</span> <span class="nf">run_home</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">run_id</span><span class="p">)</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxApplication.pid"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.pid">[docs]</a>    <span class="k">def</span> <span class="nf">pid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pid</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxApplication.ppid"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.ppid">[docs]</a>    <span class="k">def</span> <span class="nf">ppid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ppid</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxApplication.in_foreground"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.in_foreground">[docs]</a>    <span class="k">def</span> <span class="nf">in_foreground</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns True if the command needs to be executed in foreground.</span>
+<span class="sd">        This means that command will be executed using &#39;execute&#39; instead of</span>
+<span class="sd">        &#39;run&#39; (&#39;run&#39; executes a command in background and detached from the </span>
+<span class="sd">        terminal)</span>
+<span class="sd">        </span>
+<span class="sd">        When using X11 forwarding option, the command can not run in background</span>
+<span class="sd">        and detached from a terminal, since we need to keep the terminal attached </span>
+<span class="sd">        to interact with it.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;forwardX11&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_in_foreground</span>
+</div>
+<div class="viewcode-block" id="LinuxApplication.trace_filepath"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.trace_filepath">[docs]</a>    <span class="k">def</span> <span class="nf">trace_filepath</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filename</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">,</span> <span class="n">filename</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxApplication.trace"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.trace">[docs]</a>    <span class="k">def</span> <span class="nf">trace</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">attr</span> <span class="o">=</span> <span class="n">TraceAttr</span><span class="o">.</span><span class="n">ALL</span><span class="p">,</span> <span class="n">block</span> <span class="o">=</span> <span class="mi">512</span><span class="p">,</span> <span class="n">offset</span> <span class="o">=</span> <span class="mi">0</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Retrieving &#39;</span><span class="si">%s</span><span class="s">&#39; trace </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">attr</span><span class="p">))</span>
+
+        <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">trace_filepath</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
+        
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot;(test -f </span><span class="si">%s</span><span class="s"> &amp;&amp; echo &#39;success&#39;) || echo &#39;error&#39;&quot;</span> <span class="o">%</span> <span class="n">path</span>
+        <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="p">(</span><span class="n">err</span> <span class="ow">and</span> <span class="n">proc</span><span class="o">.</span><span class="n">poll</span><span class="p">())</span> <span class="ow">or</span> <span class="n">out</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&quot;error&quot;</span><span class="p">)</span> <span class="o">!=</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Couldn&#39;t find trace </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="n">name</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+            <span class="k">return</span> <span class="bp">None</span>
+    
+        <span class="k">if</span> <span class="n">attr</span> <span class="o">==</span> <span class="n">TraceAttr</span><span class="o">.</span><span class="n">PATH</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">path</span>
+
+        <span class="k">if</span> <span class="n">attr</span> <span class="o">==</span> <span class="n">TraceAttr</span><span class="o">.</span><span class="n">ALL</span><span class="p">:</span>
+            <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">check_output</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
+            
+            <span class="k">if</span> <span class="n">proc</span><span class="o">.</span><span class="n">poll</span><span class="p">():</span>
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Couldn&#39;t read trace </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="n">name</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+                <span class="k">return</span> <span class="bp">None</span>
+
+            <span class="k">return</span> <span class="n">out</span>
+
+        <span class="k">if</span> <span class="n">attr</span> <span class="o">==</span> <span class="n">TraceAttr</span><span class="o">.</span><span class="n">STREAM</span><span class="p">:</span>
+            <span class="n">cmd</span> <span class="o">=</span> <span class="s">&quot;dd if=</span><span class="si">%s</span><span class="s"> bs=</span><span class="si">%d</span><span class="s"> count=1 skip=</span><span class="si">%d</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">block</span><span class="p">,</span> <span class="n">offset</span><span class="p">)</span>
+        <span class="k">elif</span> <span class="n">attr</span> <span class="o">==</span> <span class="n">TraceAttr</span><span class="o">.</span><span class="n">SIZE</span><span class="p">:</span>
+            <span class="n">cmd</span> <span class="o">=</span> <span class="s">&quot;stat -c</span><span class="si">%%</span><span class="s">s </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="n">path</span>
+
+        <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">cmd</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">proc</span><span class="o">.</span><span class="n">poll</span><span class="p">():</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Couldn&#39;t find trace </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="n">name</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+            <span class="k">return</span> <span class="bp">None</span>
+        
+        <span class="k">if</span> <span class="n">attr</span> <span class="o">==</span> <span class="n">TraceAttr</span><span class="o">.</span><span class="n">SIZE</span><span class="p">:</span>
+            <span class="n">out</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">out</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
+
+        <span class="k">return</span> <span class="n">out</span>
+</div>
+<div class="viewcode-block" id="LinuxApplication.do_provision"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.do_provision">[docs]</a>    <span class="k">def</span> <span class="nf">do_provision</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="c"># take a snapshot of the system if user is root</span>
+        <span class="c"># to ensure that cleanProcess will not kill</span>
+        <span class="c"># pre-existent processes</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;username&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="s">&#39;root&#39;</span><span class="p">:</span>
+            <span class="kn">import</span> <span class="nn">pickle</span>
+            <span class="n">procs</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
+            <span class="n">ps_aux</span> <span class="o">=</span> <span class="s">&quot;ps aux |awk &#39;{print $2,$11}&#39;&quot;</span>
+            <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">ps_aux</span><span class="p">)</span>
+            <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">out</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
+                <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">out</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">):</span>
+                    <span class="n">parts</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot; &quot;</span><span class="p">)</span>
+                    <span class="n">procs</span><span class="p">[</span><span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
+                <span class="n">pickle</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">procs</span><span class="p">,</span> <span class="nb">open</span><span class="p">(</span><span class="s">&quot;/tmp/save.proc&quot;</span><span class="p">,</span> <span class="s">&quot;wb&quot;</span><span class="p">))</span>
+            
+        <span class="c"># create run dir for application</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">)</span>
+   
+        <span class="c"># List of all the provision methods to invoke</span>
+        <span class="n">steps</span> <span class="o">=</span> <span class="p">[</span>
+            <span class="c"># upload sources</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">upload_sources</span><span class="p">,</span>
+            <span class="c"># upload files</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">upload_files</span><span class="p">,</span>
+            <span class="c"># upload binaries</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">upload_binaries</span><span class="p">,</span>
+            <span class="c"># upload libraries</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">upload_libraries</span><span class="p">,</span>
+            <span class="c"># upload code</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">upload_code</span><span class="p">,</span>
+            <span class="c"># upload stdin</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">upload_stdin</span><span class="p">,</span>
+            <span class="c"># install dependencies</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">install_dependencies</span><span class="p">,</span>
+            <span class="c"># build</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">build</span><span class="p">,</span>
+            <span class="c"># Install</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">install</span><span class="p">]</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="p">[]</span>
+
+        <span class="c"># Since provisioning takes a long time, before</span>
+        <span class="c"># each step we check that the EC is still </span>
+        <span class="k">for</span> <span class="n">step</span> <span class="ow">in</span> <span class="n">steps</span><span class="p">:</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">abort</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;Interrupting provisioning. EC says &#39;ABORT&quot;</span><span class="p">)</span>
+                <span class="k">return</span>
+            
+            <span class="n">ret</span> <span class="o">=</span> <span class="n">step</span><span class="p">()</span>
+            <span class="k">if</span> <span class="n">ret</span><span class="p">:</span>
+                <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">ret</span><span class="p">)</span>
+
+        <span class="c"># upload deploy script</span>
+        <span class="n">deploy_command</span> <span class="o">=</span> <span class="s">&quot;;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">execute_deploy_command</span><span class="p">(</span><span class="n">deploy_command</span><span class="p">)</span>
+
+        <span class="c"># upload start script</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">upload_start_command</span><span class="p">()</span>
+       
+        <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Provisioning finished&quot;</span><span class="p">)</span>
+
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxApplication</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_provision</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="LinuxApplication.upload_start_command"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.upload_start_command">[docs]</a>    <span class="k">def</span> <span class="nf">upload_start_command</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">False</span><span class="p">):</span>
+        <span class="c"># Upload command to remote bash script</span>
+        <span class="c"># - only if command can be executed in background and detached</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">command</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">in_foreground</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Uploading command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
+
+            <span class="c"># replace application specific paths in the command</span>
+            <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_paths</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+            <span class="c"># replace application specific paths in the environment</span>
+            <span class="n">env</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">)</span>
+            <span class="n">env</span> <span class="o">=</span> <span class="n">env</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_paths</span><span class="p">(</span><span class="n">env</span><span class="p">)</span>
+
+            <span class="n">shfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">,</span> <span class="s">&quot;start.sh&quot;</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">upload_command</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> 
+                    <span class="n">shfile</span> <span class="o">=</span> <span class="n">shfile</span><span class="p">,</span>
+                    <span class="n">env</span> <span class="o">=</span> <span class="n">env</span><span class="p">,</span>
+                    <span class="n">overwrite</span> <span class="o">=</span> <span class="n">overwrite</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxApplication.execute_deploy_command"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.execute_deploy_command">[docs]</a>    <span class="k">def</span> <span class="nf">execute_deploy_command</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">command</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s">&quot;deploy&quot;</span><span class="p">):</span>
+        <span class="k">if</span> <span class="n">command</span><span class="p">:</span>
+            <span class="c"># replace application specific paths in the command</span>
+            <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_paths</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+            
+            <span class="c"># replace application specific paths in the environment</span>
+            <span class="n">env</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">)</span>
+            <span class="n">env</span> <span class="o">=</span> <span class="n">env</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_paths</span><span class="p">(</span><span class="n">env</span><span class="p">)</span>
+
+            <span class="c"># Upload the command to a bash script and run it</span>
+            <span class="c"># in background ( but wait until the command has</span>
+            <span class="c"># finished to continue )</span>
+            <span class="n">shfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">,</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">.sh&quot;</span> <span class="o">%</span> <span class="n">prefix</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">run_and_wait</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">,</span>
+                    <span class="n">shfile</span> <span class="o">=</span> <span class="n">shfile</span><span class="p">,</span> 
+                    <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+                    <span class="n">pidfile</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">_pidfile&quot;</span> <span class="o">%</span> <span class="n">prefix</span><span class="p">,</span> 
+                    <span class="n">ecodefile</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">_exitcode&quot;</span> <span class="o">%</span> <span class="n">prefix</span><span class="p">,</span> 
+                    <span class="n">stdout</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">_stdout&quot;</span> <span class="o">%</span> <span class="n">prefix</span><span class="p">,</span> 
+                    <span class="n">stderr</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">_stderr&quot;</span> <span class="o">%</span> <span class="n">prefix</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxApplication.upload_sources"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.upload_sources">[docs]</a>    <span class="k">def</span> <span class="nf">upload_sources</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sources</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">src_dir</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">sources</span><span class="p">:</span>
+            <span class="n">sources</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;sources&quot;</span><span class="p">)</span>
+   
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot;&quot;</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">src_dir</span><span class="p">:</span>
+            <span class="n">src_dir</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">src_dir</span>
+
+        <span class="k">if</span> <span class="n">sources</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Uploading sources &quot;</span><span class="p">)</span>
+
+            <span class="n">sources</span> <span class="o">=</span> <span class="nb">map</span><span class="p">(</span><span class="nb">str</span><span class="o">.</span><span class="n">strip</span><span class="p">,</span> <span class="n">sources</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;;&quot;</span><span class="p">))</span>
+
+            <span class="c"># Separate sources that should be downloaded from </span>
+            <span class="c"># the web, from sources that should be uploaded from</span>
+            <span class="c"># the local machine</span>
+            <span class="n">command</span> <span class="o">=</span> <span class="p">[]</span>
+            <span class="k">for</span> <span class="n">source</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">(</span><span class="n">sources</span><span class="p">):</span>
+                <span class="k">if</span> <span class="n">source</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&quot;http&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">source</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&quot;https&quot;</span><span class="p">):</span>
+                    <span class="c"># remove the hhtp source from the sources list</span>
+                    <span class="n">sources</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">source</span><span class="p">)</span>
+
+                    <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span> <span class="s">&quot; ( &quot;</span> 
+                            <span class="c"># Check if the source already exists</span>
+                            <span class="s">&quot; ls </span><span class="si">%(src_dir)s</span><span class="s">/</span><span class="si">%(basename)s</span><span class="s"> &quot;</span>
+                            <span class="s">&quot; || ( &quot;</span>
+                            <span class="c"># If source doesn&#39;t exist, download it and check</span>
+                            <span class="c"># that it it downloaded ok</span>
+                            <span class="s">&quot;   wget -c --directory-prefix=</span><span class="si">%(src_dir)s</span><span class="s"> </span><span class="si">%(source)s</span><span class="s"> &amp;&amp; &quot;</span>
+                            <span class="s">&quot;   ls </span><span class="si">%(src_dir)s</span><span class="s">/</span><span class="si">%(basename)s</span><span class="s"> &quot;</span>
+                            <span class="s">&quot; ) ) &quot;</span> <span class="o">%</span> <span class="p">{</span>
+                                <span class="s">&quot;basename&quot;</span><span class="p">:</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">source</span><span class="p">),</span>
+                                <span class="s">&quot;source&quot;</span><span class="p">:</span> <span class="n">source</span><span class="p">,</span>
+                                <span class="s">&quot;src_dir&quot;</span><span class="p">:</span> <span class="n">src_dir</span>
+                                <span class="p">})</span>
+
+            <span class="n">command</span> <span class="o">=</span> <span class="s">&quot; &amp;&amp; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+
+            <span class="c"># replace application specific paths in the command</span>
+            <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_paths</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+       
+            <span class="k">if</span> <span class="n">sources</span><span class="p">:</span>
+                <span class="n">sources</span> <span class="o">=</span> <span class="s">&#39;;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">sources</span><span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">upload</span><span class="p">(</span><span class="n">sources</span><span class="p">,</span> <span class="n">src_dir</span><span class="p">,</span> <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">False</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">command</span>
+</div>
+<div class="viewcode-block" id="LinuxApplication.upload_files"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.upload_files">[docs]</a>    <span class="k">def</span> <span class="nf">upload_files</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">files</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">files</span><span class="p">:</span>
+            <span class="n">files</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;files&quot;</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">files</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Uploading files </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="n">files</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">upload</span><span class="p">(</span><span class="n">files</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">share_dir</span><span class="p">,</span> <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">False</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxApplication.upload_libraries"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.upload_libraries">[docs]</a>    <span class="k">def</span> <span class="nf">upload_libraries</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">libs</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">libs</span><span class="p">:</span>
+            <span class="n">libs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;libs&quot;</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">libs</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Uploading libraries </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="n">libaries</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">upload</span><span class="p">(</span><span class="n">libs</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">lib_dir</span><span class="p">,</span> <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">False</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxApplication.upload_binaries"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.upload_binaries">[docs]</a>    <span class="k">def</span> <span class="nf">upload_binaries</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">bins</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">bins</span><span class="p">:</span>
+            <span class="n">bins</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;bins&quot;</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">bins</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Uploading binaries </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="n">binaries</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">upload</span><span class="p">(</span><span class="n">bins</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">bin_dir</span><span class="p">,</span> <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">False</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxApplication.upload_code"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.upload_code">[docs]</a>    <span class="k">def</span> <span class="nf">upload_code</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">code</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">code</span><span class="p">:</span>
+            <span class="n">code</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;code&quot;</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">code</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Uploading code&quot;</span><span class="p">)</span>
+
+            <span class="n">dst</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">,</span> <span class="s">&quot;code&quot;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">upload</span><span class="p">(</span><span class="n">code</span><span class="p">,</span> <span class="n">dst</span><span class="p">,</span> <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span> <span class="n">text</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxApplication.upload_stdin"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.upload_stdin">[docs]</a>    <span class="k">def</span> <span class="nf">upload_stdin</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">stdin</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">stdin</span><span class="p">:</span>
+           <span class="n">stdin</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;stdin&quot;</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">stdin</span><span class="p">:</span>
+            <span class="c"># create dir for sources</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Uploading stdin&quot;</span><span class="p">)</span>
+            
+            <span class="c"># upload stdin file to ${SHARE_DIR} directory</span>
+            <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">stdin</span><span class="p">):</span>
+                <span class="n">basename</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">stdin</span><span class="p">)</span>
+                <span class="n">dst</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">share_dir</span><span class="p">,</span> <span class="n">basename</span><span class="p">)</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="n">dst</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">,</span> <span class="s">&quot;stdin&quot;</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">upload</span><span class="p">(</span><span class="n">stdin</span><span class="p">,</span> <span class="n">dst</span><span class="p">,</span> <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span> <span class="n">text</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+
+            <span class="c"># create &quot;stdin&quot; symlink on ${APP_HOME} directory</span>
+            <span class="n">command</span> <span class="o">=</span> <span class="s">&quot;( cd </span><span class="si">%(app_home)s</span><span class="s"> ; [ ! -f stdin ] &amp;&amp;  ln -s </span><span class="si">%(stdin)s</span><span class="s"> stdin )&quot;</span> <span class="o">%</span> <span class="p">({</span>
+                <span class="s">&quot;app_home&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">,</span> 
+                <span class="s">&quot;stdin&quot;</span><span class="p">:</span> <span class="n">dst</span> <span class="p">})</span>
+
+            <span class="k">return</span> <span class="n">command</span>
+</div>
+<div class="viewcode-block" id="LinuxApplication.install_dependencies"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.install_dependencies">[docs]</a>    <span class="k">def</span> <span class="nf">install_dependencies</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">depends</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">depends</span><span class="p">:</span>
+            <span class="n">depends</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;depends&quot;</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">depends</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Installing dependencies </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">depends</span><span class="p">)</span>
+            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">install_packages_command</span><span class="p">(</span><span class="n">depends</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxApplication.build"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.build">[docs]</a>    <span class="k">def</span> <span class="nf">build</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">build</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">build</span><span class="p">:</span>
+            <span class="n">build</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;build&quot;</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">build</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Building sources &quot;</span><span class="p">)</span>
+            
+            <span class="c"># replace application specific paths in the command</span>
+            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_paths</span><span class="p">(</span><span class="n">build</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxApplication.install"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.install">[docs]</a>    <span class="k">def</span> <span class="nf">install</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">install</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">install</span><span class="p">:</span>
+            <span class="n">install</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;install&quot;</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">install</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Installing sources &quot;</span><span class="p">)</span>
+
+            <span class="c"># replace application specific paths in the command</span>
+            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_paths</span><span class="p">(</span><span class="n">install</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxApplication.do_deploy"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.do_deploy">[docs]</a>    <span class="k">def</span> <span class="nf">do_deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="c"># Wait until node is associated and deployed</span>
+        <span class="n">node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">node</span> <span class="ow">or</span> <span class="n">node</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;---- RESCHEDULING DEPLOY ---- node state </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">state</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">deploy</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&quot;&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Deploying command &#39;</span><span class="si">%s</span><span class="s">&#39; &quot;</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_provision</span><span class="p">()</span>
+
+            <span class="nb">super</span><span class="p">(</span><span class="n">LinuxApplication</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_deploy</span><span class="p">()</span>
+   </div>
+<div class="viewcode-block" id="LinuxApplication.do_start"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.do_start">[docs]</a>    <span class="k">def</span> <span class="nf">do_start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Starting command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">command</span><span class="p">:</span>
+            <span class="c"># If no command was given (i.e. Application was used for dependency</span>
+            <span class="c"># installation), then the application is directly marked as STOPPED</span>
+            <span class="nb">super</span><span class="p">(</span><span class="n">LinuxApplication</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">set_stopped</span><span class="p">()</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">in_foreground</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_run_in_foreground</span><span class="p">()</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_run_in_background</span><span class="p">()</span>
+
+            <span class="nb">super</span><span class="p">(</span><span class="n">LinuxApplication</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_start</span><span class="p">()</span>
+</div>
+    <span class="k">def</span> <span class="nf">_run_in_foreground</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span>
+        <span class="n">sudo</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;sudo&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">False</span>
+        <span class="n">x11</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;forwardX11&quot;</span><span class="p">)</span>
+        <span class="n">env</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">)</span>
+
+        <span class="c"># Command will be launched in foreground and attached to the</span>
+        <span class="c"># terminal using the node &#39;execute&#39; in non blocking mode.</span>
+
+        <span class="c"># We save the reference to the process in self._proc </span>
+        <span class="c"># to be able to kill the process from the stop method.</span>
+        <span class="c"># We also set blocking = False, since we don&#39;t want the</span>
+        <span class="c"># thread to block until the execution finishes.</span>
+        <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">execute_command</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> 
+                <span class="n">env</span> <span class="o">=</span> <span class="n">env</span><span class="p">,</span>
+                <span class="n">sudo</span> <span class="o">=</span> <span class="n">sudo</span><span class="p">,</span>
+                <span class="n">forward_x11</span> <span class="o">=</span> <span class="n">x11</span><span class="p">,</span>
+                <span class="n">blocking</span> <span class="o">=</span> <span class="bp">False</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_proc</span><span class="o">.</span><span class="n">poll</span><span class="p">():</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+    <span class="k">def</span> <span class="nf">_run_in_background</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span>
+        <span class="n">env</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">)</span>
+        <span class="n">sudo</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;sudo&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">False</span>
+
+        <span class="n">stdout</span> <span class="o">=</span> <span class="s">&quot;stdout&quot;</span>
+        <span class="n">stderr</span> <span class="o">=</span> <span class="s">&quot;stderr&quot;</span>
+        <span class="n">stdin</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">,</span> <span class="s">&quot;stdin&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;stdin&quot;</span><span class="p">)</span> \
+                <span class="k">else</span> <span class="bp">None</span>
+
+        <span class="c"># Command will be run as a daemon in baground and detached from any</span>
+        <span class="c"># terminal.</span>
+        <span class="c"># The command to run was previously uploaded to a bash script</span>
+        <span class="c"># during deployment, now we launch the remote script using &#39;run&#39;</span>
+        <span class="c"># method from the node.</span>
+        <span class="n">cmd</span> <span class="o">=</span> <span class="s">&quot;bash </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">,</span> <span class="s">&quot;start.sh&quot;</span><span class="p">)</span>
+        <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">,</span> 
+            <span class="n">stdin</span> <span class="o">=</span> <span class="n">stdin</span><span class="p">,</span> 
+            <span class="n">stdout</span> <span class="o">=</span> <span class="n">stdout</span><span class="p">,</span>
+            <span class="n">stderr</span> <span class="o">=</span> <span class="n">stderr</span><span class="p">,</span>
+            <span class="n">sudo</span> <span class="o">=</span> <span class="n">sudo</span><span class="p">)</span>
+
+        <span class="c"># check if execution errors occurred</span>
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Failed to start command &#39;</span><span class="si">%s</span><span class="s">&#39; &quot;</span> <span class="o">%</span> <span class="n">command</span>
+        
+        <span class="k">if</span> <span class="n">proc</span><span class="o">.</span><span class="n">poll</span><span class="p">():</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+    
+        <span class="c"># Wait for pid file to be generated</span>
+        <span class="n">pid</span><span class="p">,</span> <span class="n">ppid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">wait_pid</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">pid</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pid</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">pid</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">ppid</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ppid</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">ppid</span><span class="p">)</span>
+
+        <span class="c"># If the process is not running, check for error information</span>
+        <span class="c"># on the remote machine</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">pid</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">ppid</span><span class="p">:</span>
+            <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">check_errors</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">,</span>
+                    <span class="n">stderr</span> <span class="o">=</span> <span class="n">stderr</span><span class="p">)</span> 
+
+            <span class="c"># Out is what was written in the stderr file</span>
+            <span class="k">if</span> <span class="n">err</span><span class="p">:</span>
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Failed to start command &#39;</span><span class="si">%s</span><span class="s">&#39; &quot;</span> <span class="o">%</span> <span class="n">command</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+    
+<div class="viewcode-block" id="LinuxApplication.do_stop"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.do_stop">[docs]</a>    <span class="k">def</span> <span class="nf">do_stop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Stops application execution</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;command&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">:</span>
+        
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Stopping command &#39;</span><span class="si">%s</span><span class="s">&#39; &quot;</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
+        
+            <span class="c"># If the command is running in foreground (it was launched using</span>
+            <span class="c"># the node &#39;execute&#39; method), then we use the handler to the Popen</span>
+            <span class="c"># process to kill it. Else we send a kill signal using the pid and ppid</span>
+            <span class="c"># retrieved after running the command with the node &#39;run&#39; method</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_proc</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_proc</span><span class="o">.</span><span class="n">kill</span><span class="p">()</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="c"># Only try to kill the process if the pid and ppid</span>
+                <span class="c"># were retrieved</span>
+                <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pid</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">ppid</span><span class="p">:</span>
+                    <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">kill</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">pid</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">ppid</span><span class="p">,</span>
+                            <span class="n">sudo</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_sudo_kill</span><span class="p">)</span>
+
+                    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">                    # TODO: check if execution errors occurred</span>
+<span class="sd">                    if (proc and proc.poll()) or err:</span>
+<span class="sd">                        msg = &quot; Failed to STOP command &#39;%s&#39; &quot; % self.get(&quot;command&quot;)</span>
+<span class="sd">                        self.error(msg, out, err)</span>
+<span class="sd">                    &quot;&quot;&quot;</span>
+
+            <span class="nb">super</span><span class="p">(</span><span class="n">LinuxApplication</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_stop</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="LinuxApplication.do_release"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.do_release">[docs]</a>    <span class="k">def</span> <span class="nf">do_release</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Releasing resource&quot;</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">do_stop</span><span class="p">()</span>
+        
+        <span class="n">tear_down</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;tearDown&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">tear_down</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">tear_down</span><span class="p">)</span>
+
+        <span class="n">hard_release</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;hardRelease&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">hard_release</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">rmdir</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">)</span>
+
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxApplication</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_release</span><span class="p">()</span>
+        </div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxApplication.state"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.state">[docs]</a>    <span class="k">def</span> <span class="nf">state</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the state of the application</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">:</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">in_foreground</span><span class="p">:</span>
+                <span class="c"># Check if the process we used to execute the command</span>
+                <span class="c"># is still running ...</span>
+                <span class="n">retcode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_proc</span><span class="o">.</span><span class="n">poll</span><span class="p">()</span>
+
+                <span class="c"># retcode == None -&gt; running</span>
+                <span class="c"># retcode &gt; 0 -&gt; error</span>
+                <span class="c"># retcode == 0 -&gt; finished</span>
+                <span class="k">if</span> <span class="n">retcode</span><span class="p">:</span>
+                    <span class="n">out</span> <span class="o">=</span> <span class="s">&quot;&quot;</span>
+                    <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Failed to execute command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span>
+                    <span class="n">err</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_proc</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">do_fail</span><span class="p">()</span>
+
+                <span class="k">elif</span> <span class="n">retcode</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">set_stopped</span><span class="p">()</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="c"># We need to query the status of the command we launched in </span>
+                <span class="c"># background. In order to avoid overwhelming the remote host and</span>
+                <span class="c"># the local processor with too many ssh queries, the state is only</span>
+                <span class="c"># requested every &#39;state_check_delay&#39; seconds.</span>
+                <span class="n">state_check_delay</span> <span class="o">=</span> <span class="mf">0.5</span>
+                <span class="k">if</span> <span class="n">tdiffsec</span><span class="p">(</span><span class="n">tnow</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_last_state_check</span><span class="p">)</span> <span class="o">&gt;</span> <span class="n">state_check_delay</span><span class="p">:</span>
+                    <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pid</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">ppid</span><span class="p">:</span>
+                        <span class="c"># Make sure the process is still running in background</span>
+                        <span class="n">status</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">status</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">pid</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">ppid</span><span class="p">)</span>
+
+                        <span class="k">if</span> <span class="n">status</span> <span class="o">==</span> <span class="n">ProcStatus</span><span class="o">.</span><span class="n">FINISHED</span><span class="p">:</span>
+                            <span class="c"># If the program finished, check if execution</span>
+                            <span class="c"># errors occurred</span>
+                            <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">check_errors</span><span class="p">(</span>
+                                    <span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">)</span>
+
+                            <span class="k">if</span> <span class="n">err</span><span class="p">:</span>
+                                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Failed to execute command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> \
+                                        <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span>
+                                <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+                                <span class="bp">self</span><span class="o">.</span><span class="n">do_fail</span><span class="p">()</span>
+                            <span class="k">else</span><span class="p">:</span>
+                                <span class="bp">self</span><span class="o">.</span><span class="n">set_stopped</span><span class="p">()</span>
+
+                    <span class="bp">self</span><span class="o">.</span><span class="n">_last_state_check</span> <span class="o">=</span> <span class="n">tnow</span><span class="p">()</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span>
+</div>
+<div class="viewcode-block" id="LinuxApplication.execute_command"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.execute_command">[docs]</a>    <span class="k">def</span> <span class="nf">execute_command</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">command</span><span class="p">,</span> 
+            <span class="n">env</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span>
+            <span class="n">sudo</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span>
+            <span class="n">tty</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span>
+            <span class="n">forward_x11</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span>
+            <span class="n">blocking</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span>
+
+        <span class="n">environ</span> <span class="o">=</span> <span class="s">&quot;&quot;</span>
+        <span class="k">if</span> <span class="n">env</span><span class="p">:</span>
+            <span class="n">environ</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">format_environment</span><span class="p">(</span><span class="n">env</span><span class="p">,</span> <span class="n">inline</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="n">environ</span> <span class="o">+</span> <span class="n">command</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_paths</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">command</span><span class="p">,</span>
+                <span class="n">sudo</span><span class="o">=</span><span class="n">sudo</span><span class="p">,</span>
+                <span class="n">tty</span><span class="o">=</span><span class="n">tty</span><span class="p">,</span>
+                <span class="n">forward_x11</span><span class="o">=</span><span class="n">forward_x11</span><span class="p">,</span>
+                <span class="n">blocking</span><span class="o">=</span><span class="n">blocking</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxApplication.replace_paths"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.replace_paths">[docs]</a>    <span class="k">def</span> <span class="nf">replace_paths</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">command</span><span class="p">,</span> <span class="n">node</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">app_home</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">run_home</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Replace all special path tags with shell-escaped actual paths.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">node</span><span class="p">:</span>
+            <span class="n">node</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">app_home</span><span class="p">:</span>
+            <span class="n">app_home</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">app_home</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">run_home</span><span class="p">:</span>
+            <span class="n">run_home</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_home</span>
+
+        <span class="k">return</span> <span class="p">(</span> <span class="n">command</span>
+            <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;${USR}&quot;</span><span class="p">,</span> <span class="n">node</span><span class="o">.</span><span class="n">usr_dir</span><span class="p">)</span>
+            <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;${LIB}&quot;</span><span class="p">,</span> <span class="n">node</span><span class="o">.</span><span class="n">lib_dir</span><span class="p">)</span>
+            <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;${BIN}&quot;</span><span class="p">,</span> <span class="n">node</span><span class="o">.</span><span class="n">bin_dir</span><span class="p">)</span>
+            <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;${SRC}&quot;</span><span class="p">,</span> <span class="n">node</span><span class="o">.</span><span class="n">src_dir</span><span class="p">)</span>
+            <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;${SHARE}&quot;</span><span class="p">,</span> <span class="n">node</span><span class="o">.</span><span class="n">share_dir</span><span class="p">)</span>
+            <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;${EXP}&quot;</span><span class="p">,</span> <span class="n">node</span><span class="o">.</span><span class="n">exp_dir</span><span class="p">)</span>
+            <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;${EXP_HOME}&quot;</span><span class="p">,</span> <span class="n">node</span><span class="o">.</span><span class="n">exp_home</span><span class="p">)</span>
+            <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;${APP_HOME}&quot;</span><span class="p">,</span> <span class="n">app_home</span><span class="p">)</span>
+            <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;${RUN_HOME}&quot;</span><span class="p">,</span> <span class="n">run_home</span><span class="p">)</span>
+            <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;${NODE_HOME}&quot;</span><span class="p">,</span> <span class="n">node</span><span class="o">.</span><span class="n">node_home</span><span class="p">)</span>
+            <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;${HOME}&quot;</span><span class="p">,</span> <span class="n">node</span><span class="o">.</span><span class="n">home_dir</span><span class="p">)</span>
+            <span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxApplication.valid_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.valid_connection">[docs]</a>    <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="c"># TODO: Validate!</span>
+        <span class="k">return</span> <span class="bp">True</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/ccn/ccnapplication.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/ccn/ccnapplication.html
new file mode 100644 (file)
index 0000000..b46dd26
--- /dev/null
@@ -0,0 +1,159 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.ccn.ccnapplication &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.ccn.ccnapplication</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span><span class="p">,</span> <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.application</span> <span class="kn">import</span> <span class="n">LinuxApplication</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.ccn.ccnd</span> <span class="kn">import</span> <span class="n">LinuxCCND</span>
+
+<span class="kn">import</span> <span class="nn">os</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="LinuxCCNApplication"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnapplication.LinuxCCNApplication">[docs]</a><span class="k">class</span> <span class="nc">LinuxCCNApplication</span><span class="p">(</span><span class="n">LinuxApplication</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;linux::CCNApplication&quot;</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxCCNApplication</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ccnapp-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxCCNApplication.ccnd"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnapplication.LinuxCCNApplication.ccnd">[docs]</a>    <span class="k">def</span> <span class="nf">ccnd</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">ccnd</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">LinuxCCND</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+        <span class="k">if</span> <span class="n">ccnd</span><span class="p">:</span> <span class="k">return</span> <span class="n">ccnd</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+        <span class="k">return</span> <span class="bp">None</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxCCNApplication.node"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnapplication.LinuxCCNApplication.node">[docs]</a>    <span class="k">def</span> <span class="nf">node</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ccnd</span><span class="p">:</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">ccnd</span><span class="o">.</span><span class="n">node</span>
+        <span class="k">return</span> <span class="bp">None</span>
+</div>
+<div class="viewcode-block" id="LinuxCCNApplication.do_deploy"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnapplication.LinuxCCNApplication.do_deploy">[docs]</a>    <span class="k">def</span> <span class="nf">do_deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">ccnd</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">ccnd</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;---- RESCHEDULING DEPLOY ---- node state </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">state</span> <span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">deploy</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&quot;&quot;</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Deploying command &#39;</span><span class="si">%s</span><span class="s">&#39; &quot;</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
+            
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_environment</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_provision</span><span class="p">()</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_ready</span><span class="p">()</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_environment</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">ccnd</span><span class="o">.</span><span class="n">path</span>
+       
+<div class="viewcode-block" id="LinuxCCNApplication.valid_connection"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnapplication.LinuxCCNApplication.valid_connection">[docs]</a>    <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="c"># TODO: Validate!</span>
+        <span class="k">return</span> <span class="bp">True</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/ccn/ccncat.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/ccn/ccncat.html
new file mode 100644 (file)
index 0000000..f2bbea9
--- /dev/null
@@ -0,0 +1,163 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.ccn.ccncat &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.ccn.ccncat</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span><span class="p">,</span> <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.ccn.ccnapplication</span> <span class="kn">import</span> <span class="n">LinuxCCNApplication</span>
+
+<span class="kn">import</span> <span class="nn">os</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="LinuxCCNCat"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccncat.LinuxCCNCat">[docs]</a><span class="k">class</span> <span class="nc">LinuxCCNCat</span><span class="p">(</span><span class="n">LinuxCCNApplication</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;linux::CCNCat&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">content_name</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;contentName&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Content name for the content to peek&quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">pipeline</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;pipeline&quot;</span><span class="p">,</span>
+            <span class="s">&quot;CCNCat pipeline&quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">content_name</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">pipeline</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxCCNCat</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ccncat-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span>
+
+<div class="viewcode-block" id="LinuxCCNCat.do_deploy"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccncat.LinuxCCNCat.do_deploy">[docs]</a>    <span class="k">def</span> <span class="nf">do_deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">ccnd</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">ccnd</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;---- RESCHEDULING DEPLOY ---- node state </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">state</span> <span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">deploy</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="n">command</span><span class="p">:</span>
+                <span class="n">command</span> <span class="o">=</span> <span class="s">&quot;ccncat </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;contentName&quot;</span><span class="p">)</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;pipeline&quot;</span><span class="p">):</span>
+                <span class="n">command</span> <span class="o">+=</span> <span class="s">&quot; -p </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;pipeline&quot;</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">,</span> <span class="n">command</span><span class="p">)</span> 
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Deploying command &#39;</span><span class="si">%s</span><span class="s">&#39; &quot;</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
+            
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_environment</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_provision</span><span class="p">()</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_ready</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="LinuxCCNCat.valid_connection"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccncat.LinuxCCNCat.valid_connection">[docs]</a>    <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="c"># TODO: Validate!</span>
+        <span class="k">return</span> <span class="bp">True</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/ccn/ccncontent.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/ccn/ccncontent.html
new file mode 100644 (file)
index 0000000..9d0f247
--- /dev/null
@@ -0,0 +1,241 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.ccn.ccncontent &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.ccn.ccncontent</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span><span class="p">,</span> <span class="n">ResourceState</span><span class="p">,</span> \
+    <span class="n">ResourceAction</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.application</span> <span class="kn">import</span> <span class="n">LinuxApplication</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.ccn.ccnr</span> <span class="kn">import</span> <span class="n">LinuxCCNR</span>
+<span class="kn">from</span> <span class="nn">nepi.util.timefuncs</span> <span class="kn">import</span> <span class="n">tnow</span>
+
+<span class="kn">import</span> <span class="nn">os</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="LinuxCCNContent"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccncontent.LinuxCCNContent">[docs]</a><span class="k">class</span> <span class="nc">LinuxCCNContent</span><span class="p">(</span><span class="n">LinuxApplication</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;linux::CCNContent&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">content_name</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;contentName&quot;</span><span class="p">,</span>
+                <span class="s">&quot;The name of the content to publish (e.g. ccn:/VIDEO) &quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">content</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;content&quot;</span><span class="p">,</span>
+                <span class="s">&quot;The content to publish. It can be a path to a file or plain text &quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">scope</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;scope&quot;</span><span class="p">,</span>
+                <span class="s">&quot;Use the given scope on the start-write request (if -r specified). &quot;</span>
+                <span class="s">&quot;scope can be 1 (local), 2 (neighborhood), or 3 (unlimited). &quot;</span>
+                <span class="s">&quot;Note that a scope of 3 is encoded as the absence of any scope in the interest. &quot;</span><span class="p">,</span>
+                <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+                <span class="n">default</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">content_name</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">content</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">scope</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxCCNContent</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;content-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span>
+        
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxCCNContent.ccnr"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccncontent.LinuxCCNContent.ccnr">[docs]</a>    <span class="k">def</span> <span class="nf">ccnr</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">ccnr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">LinuxCCNR</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+        <span class="k">if</span> <span class="n">ccnr</span><span class="p">:</span> <span class="k">return</span> <span class="n">ccnr</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+        <span class="k">return</span> <span class="bp">None</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxCCNContent.ccnd"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccncontent.LinuxCCNContent.ccnd">[docs]</a>    <span class="k">def</span> <span class="nf">ccnd</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ccnr</span><span class="p">:</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">ccnr</span><span class="o">.</span><span class="n">ccnd</span>
+        <span class="k">return</span> <span class="bp">None</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxCCNContent.node"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccncontent.LinuxCCNContent.node">[docs]</a>    <span class="k">def</span> <span class="nf">node</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ccnr</span><span class="p">:</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">ccnr</span><span class="o">.</span><span class="n">node</span>
+        <span class="k">return</span> <span class="bp">None</span>
+</div>
+<div class="viewcode-block" id="LinuxCCNContent.do_deploy"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccncontent.LinuxCCNContent.do_deploy">[docs]</a>    <span class="k">def</span> <span class="nf">do_deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">ccnr</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">ccnr</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;---- RESCHEDULING DEPLOY ---- node state </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">state</span> <span class="p">)</span>
+            
+            <span class="c"># ccnr needs to wait until ccnd is deployed and running</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">deploy</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_start_command</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_environment</span><span class="p">)</span>
+
+            <span class="c"># set content to stdin, so the content will be</span>
+            <span class="c"># uploaded during provision</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;stdin&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;content&quot;</span><span class="p">))</span>
+
+            <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Deploying command &#39;</span><span class="si">%s</span><span class="s">&#39; &quot;</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_provision</span><span class="p">()</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_ready</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="LinuxCCNContent.upload_start_command"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccncontent.LinuxCCNContent.upload_start_command">[docs]</a>    <span class="k">def</span> <span class="nf">upload_start_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span>
+        <span class="n">env</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Uploading command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
+
+        <span class="c"># We want to make sure the content is published</span>
+        <span class="c"># before the experiment starts.</span>
+        <span class="c"># Run the command as a bash script in the background, </span>
+        <span class="c"># in the host ( but wait until the command has</span>
+        <span class="c"># finished to continue )</span>
+        <span class="n">env</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_paths</span><span class="p">(</span><span class="n">env</span><span class="p">)</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_paths</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+
+        <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">execute_command</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> 
+                <span class="n">env</span><span class="p">,</span> <span class="n">blocking</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">proc</span><span class="o">.</span><span class="n">poll</span><span class="p">():</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Failed to execute command&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+</div>
+<div class="viewcode-block" id="LinuxCCNContent.do_start"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccncontent.LinuxCCNContent.do_start">[docs]</a>    <span class="k">def</span> <span class="nf">do_start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+            <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Starting command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_started</span><span class="p">()</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Failed to execute command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">command</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_start_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;ccnseqwriter&quot;</span><span class="p">]</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-r </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;contentName&quot;</span><span class="p">))</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-s </span><span class="si">%d</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;scope&quot;</span><span class="p">))</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;&lt; </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">,</span> <span class="s">&#39;stdin&#39;</span><span class="p">))</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">command</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_environment</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">ccnd</span><span class="o">.</span><span class="n">path</span>
+       
+<div class="viewcode-block" id="LinuxCCNContent.valid_connection"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccncontent.LinuxCCNContent.valid_connection">[docs]</a>    <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="c"># TODO: Validate!</span>
+        <span class="k">return</span> <span class="bp">True</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/ccn/ccnd.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/ccn/ccnd.html
new file mode 100644 (file)
index 0000000..062828a
--- /dev/null
@@ -0,0 +1,442 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.ccn.ccnd &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.ccn.ccnd</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.application</span> <span class="kn">import</span> <span class="n">LinuxApplication</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.node</span> <span class="kn">import</span> <span class="n">OSType</span>
+<span class="kn">from</span> <span class="nn">nepi.util.timefuncs</span> <span class="kn">import</span> <span class="n">tnow</span><span class="p">,</span> <span class="n">tdiffsec</span>
+
+<span class="kn">import</span> <span class="nn">os</span>
+
+<span class="c"># TODO: use ccndlogging to dynamically change the logging level</span>
+
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="LinuxCCND"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnd.LinuxCCND">[docs]</a><span class="k">class</span> <span class="nc">LinuxCCND</span><span class="p">(</span><span class="n">LinuxApplication</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;linux::CCND&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">debug</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;debug&quot;</span><span class="p">,</span> <span class="s">&quot;Sets the CCND_DEBUG environmental variable. &quot;</span>
+            <span class="s">&quot; Allowed values are : </span><span class="se">\n</span><span class="s">&quot;</span>
+            <span class="s">&quot;  0 - no messages </span><span class="se">\n</span><span class="s">&quot;</span>
+            <span class="s">&quot;  1 - basic messages (any non-zero value gets these) </span><span class="se">\n</span><span class="s">&quot;</span>
+            <span class="s">&quot;  2 - interest messages </span><span class="se">\n</span><span class="s">&quot;</span>
+            <span class="s">&quot;  4 - content messages </span><span class="se">\n</span><span class="s">&quot;</span>
+            <span class="s">&quot;  8 - matching details </span><span class="se">\n</span><span class="s">&quot;</span>
+            <span class="s">&quot;  16 - interest details </span><span class="se">\n</span><span class="s">&quot;</span>
+            <span class="s">&quot;  32 - gory interest details </span><span class="se">\n</span><span class="s">&quot;</span>
+            <span class="s">&quot;  64 - log occasional human-readable timestamps </span><span class="se">\n</span><span class="s">&quot;</span>
+            <span class="s">&quot;  128 - face registration debugging </span><span class="se">\n</span><span class="s">&quot;</span>
+            <span class="s">&quot;  -1 - max logging </span><span class="se">\n</span><span class="s">&quot;</span>
+            <span class="s">&quot;  Or apply bitwise OR to these values to get combinations of them&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">port</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;port&quot;</span><span class="p">,</span> <span class="s">&quot;Sets the CCN_LOCAL_PORT environmental variable. &quot;</span>
+            <span class="s">&quot;Defaults to 9695 &quot;</span><span class="p">,</span> 
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+        <span class="n">sockname</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;sockname&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCN_LOCAL_SCOKNAME environmental variable. &quot;</span>
+            <span class="s">&quot;Defaults to /tmp/.ccnd.sock&quot;</span><span class="p">,</span> 
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">capacity</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;capacity&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCND_CAP environmental variable. &quot;</span>
+            <span class="s">&quot;Capacity limit in terms of ContentObjects&quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">mtu</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;mtu&quot;</span><span class="p">,</span> <span class="s">&quot;Sets the CCND_MTU environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+  
+        <span class="n">data_pause</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;dataPauseMicrosec&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCND_DATA_PAUSE_MICROSEC environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">default_stale</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;defaultTimeToStale&quot;</span><span class="p">,</span>
+             <span class="s">&quot;Sets the CCND_DEFAULT_TIME_TO_STALE environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">max_stale</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;maxTimeToStale&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCND_MAX_TIME_TO_STALE environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">max_rte</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;maxRteMicrosec&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCND_MAX_RTE_MICROSEC environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">keystore</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;keyStoreDirectory&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCND_KEYSTORE_DIRECTORY environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">listen_on</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;listenOn&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCND_LISTEN_ON environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">autoreg</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;autoreg&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCND_AUTOREG environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">prefix</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;prefix&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCND_PREFIX environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">debug</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">port</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">sockname</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">capacity</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">mtu</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">data_pause</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">default_stale</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">max_stale</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">max_rte</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">keystore</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">listen_on</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">autoreg</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">prefix</span><span class="p">)</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">log</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;log&quot;</span><span class="p">,</span> <span class="s">&quot;CCND log output&quot;</span><span class="p">)</span>
+        <span class="n">status</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;status&quot;</span><span class="p">,</span> <span class="s">&quot;ccndstatus output&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">log</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">status</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxCCND</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ccnd-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_version</span> <span class="o">=</span> <span class="s">&quot;ccnx&quot;</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxCCND.version"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnd.LinuxCCND.version">[docs]</a>    <span class="k">def</span> <span class="nf">version</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_version</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxCCND.path"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnd.LinuxCCND.path">[docs]</a>    <span class="k">def</span> <span class="nf">path</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s">&quot;PATH=$PATH:${BIN}/</span><span class="si">%s</span><span class="s">/&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">version</span> 
+</div>
+<div class="viewcode-block" id="LinuxCCND.do_deploy"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnd.LinuxCCND.do_deploy">[docs]</a>    <span class="k">def</span> <span class="nf">do_deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;---- RESCHEDULING DEPLOY ---- node state </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">state</span> <span class="p">)</span>
+            
+            <span class="c"># ccnd needs to wait until node is deployed and running</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">deploy</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_start_command</span><span class="p">)</span>
+            
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;depends&quot;</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;depends&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_dependencies</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;sources&quot;</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;sources&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_sources</span><span class="p">)</span>
+
+            <span class="n">sources</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;sources&quot;</span><span class="p">)</span>
+            <span class="n">source</span> <span class="o">=</span> <span class="n">sources</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot; &quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+            <span class="n">basename</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">source</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_version</span> <span class="o">=</span> <span class="p">(</span> <span class="n">basename</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;.tar.gz&quot;</span><span class="p">,</span> <span class="s">&quot;&quot;</span><span class="p">)</span>
+                    <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;.tar&quot;</span><span class="p">,</span><span class="s">&quot;&quot;</span><span class="p">)</span>
+                    <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;.gz&quot;</span><span class="p">,</span><span class="s">&quot;&quot;</span><span class="p">)</span>
+                    <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;.zip&quot;</span><span class="p">,</span><span class="s">&quot;&quot;</span><span class="p">)</span> <span class="p">)</span>
+
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;build&quot;</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;build&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_build</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;install&quot;</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;install&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_install</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_environment</span><span class="p">)</span>
+
+            <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Deploying command &#39;</span><span class="si">%s</span><span class="s">&#39; &quot;</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_provision</span><span class="p">()</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_ready</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="LinuxCCND.upload_start_command"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnd.LinuxCCND.upload_start_command">[docs]</a>    <span class="k">def</span> <span class="nf">upload_start_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span>
+        <span class="n">env</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">)</span>
+
+        <span class="c"># We want to make sure the ccnd is running</span>
+        <span class="c"># before the experiment starts.</span>
+        <span class="c"># Run the command as a bash script in background,</span>
+        <span class="c"># in the host ( but wait until the command has</span>
+        <span class="c"># finished to continue )</span>
+        <span class="n">env</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_paths</span><span class="p">(</span><span class="n">env</span><span class="p">)</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_paths</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+
+        <span class="n">shfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">,</span> <span class="s">&quot;start.sh&quot;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">run_and_wait</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">,</span>
+                <span class="n">shfile</span> <span class="o">=</span> <span class="n">shfile</span><span class="p">,</span>
+                <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+                <span class="n">env</span> <span class="o">=</span> <span class="n">env</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxCCND.do_start"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnd.LinuxCCND.do_start">[docs]</a>    <span class="k">def</span> <span class="nf">do_start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+            <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Starting command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_started</span><span class="p">()</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Failed to execute command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">command</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+</div>
+<div class="viewcode-block" id="LinuxCCND.do_stop"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnd.LinuxCCND.do_stop">[docs]</a>    <span class="k">def</span> <span class="nf">do_stop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;command&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span>
+        
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Stopping command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
+
+            <span class="n">command</span> <span class="o">=</span> <span class="s">&quot;ccndstop&quot;</span>
+            <span class="n">env</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">)</span> 
+
+            <span class="c"># replace application specific paths in the command</span>
+            <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_paths</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+            <span class="n">env</span> <span class="o">=</span> <span class="n">env</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_paths</span><span class="p">(</span><span class="n">env</span><span class="p">)</span>
+
+            <span class="c"># Upload the command to a file, and execute asynchronously</span>
+            <span class="n">shfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">,</span> <span class="s">&quot;stop.sh&quot;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">run_and_wait</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">,</span>
+                        <span class="n">shfile</span> <span class="o">=</span> <span class="n">shfile</span><span class="p">,</span>
+                        <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+                        <span class="n">env</span> <span class="o">=</span> <span class="n">env</span><span class="p">,</span>
+                        <span class="n">pidfile</span> <span class="o">=</span> <span class="s">&quot;ccndstop_pidfile&quot;</span><span class="p">,</span> 
+                        <span class="n">ecodefile</span> <span class="o">=</span> <span class="s">&quot;ccndstop_exitcode&quot;</span><span class="p">,</span> 
+                        <span class="n">stdout</span> <span class="o">=</span> <span class="s">&quot;ccndstop_stdout&quot;</span><span class="p">,</span> 
+                        <span class="n">stderr</span> <span class="o">=</span> <span class="s">&quot;ccndstop_stderr&quot;</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_stopped</span><span class="p">()</span>
+    </div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxCCND.state"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnd.LinuxCCND.state">[docs]</a>    <span class="k">def</span> <span class="nf">state</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="c"># First check if the ccnd has failed</span>
+        <span class="n">state_check_delay</span> <span class="o">=</span> <span class="mf">0.5</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span> <span class="ow">and</span> \
+                <span class="n">tdiffsec</span><span class="p">(</span><span class="n">tnow</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_last_state_check</span><span class="p">)</span> <span class="o">&gt;</span> <span class="n">state_check_delay</span><span class="p">:</span>
+            <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ccndstatus</span><span class="p">()</span>
+
+            <span class="n">retcode</span> <span class="o">=</span> <span class="n">proc</span><span class="o">.</span><span class="n">poll</span><span class="p">()</span>
+
+            <span class="k">if</span> <span class="n">retcode</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">and</span> <span class="n">err</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&quot;No such file or directory&quot;</span><span class="p">)</span> <span class="o">&gt;</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
+                <span class="c"># ccnd is not running (socket not found)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set_stopped</span><span class="p">()</span>
+            <span class="k">elif</span> <span class="n">retcode</span><span class="p">:</span>
+                <span class="c"># other errors ...</span>
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Failed to execute command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">fail</span><span class="p">()</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">_last_state_check</span> <span class="o">=</span> <span class="n">tnow</span><span class="p">()</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span>
+</div>
+    <span class="k">def</span> <span class="nf">_ccndstatus</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">env</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;env&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&quot;&quot;</span>
+        <span class="n">environ</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">format_environment</span><span class="p">(</span><span class="n">env</span><span class="p">,</span> <span class="n">inline</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="n">environ</span> <span class="o">+</span> <span class="s">&quot; ccndstatus&quot;</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_paths</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+    
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_start_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s">&quot;ccndstart&quot;</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_dependencies</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">use_rpm</span><span class="p">:</span>
+            <span class="k">return</span> <span class="p">(</span> <span class="s">&quot; autoconf openssl-devel  expat-devel libpcap-devel &quot;</span>
+                <span class="s">&quot; ecryptfs-utils-devel libxml2-devel automake gawk &quot;</span> 
+                <span class="s">&quot; gcc gcc-c++ git pcre-devel make &quot;</span><span class="p">)</span>
+        <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">use_deb</span><span class="p">:</span>
+            <span class="k">return</span> <span class="p">(</span> <span class="s">&quot; autoconf libssl-dev libexpat-dev libpcap-dev &quot;</span>
+                <span class="s">&quot; libecryptfs0 libxml2-utils automake gawk gcc g++ &quot;</span>
+                <span class="s">&quot; git-core pkg-config libpcre3-dev make &quot;</span><span class="p">)</span>
+        <span class="k">return</span> <span class="s">&quot;&quot;</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_sources</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s">&quot;http://www.ccnx.org/releases/ccnx-0.8.2.tar.gz&quot;</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_build</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">sources</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;sources&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot; &quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+        <span class="n">sources</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">sources</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="p">(</span>
+            <span class="c"># Evaluate if ccnx binaries are already installed</span>
+            <span class="s">&quot; ( &quot;</span>
+                <span class="s">&quot; test -f ${BIN}/</span><span class="si">%(version)s</span><span class="s">/ccnd &amp;&amp; &quot;</span>
+                <span class="s">&quot; echo &#39;binaries found, nothing to do&#39; &quot;</span>
+            <span class="s">&quot; ) || ( &quot;</span>
+            <span class="c"># If not, untar and build</span>
+                <span class="s">&quot; ( &quot;</span>
+                    <span class="s">&quot; mkdir -p ${SRC}/</span><span class="si">%(version)s</span><span class="s"> &amp;&amp; &quot;</span>
+                    <span class="s">&quot; tar xf ${SRC}/</span><span class="si">%(sources)s</span><span class="s"> --strip-components=1 -C ${SRC}/</span><span class="si">%(version)s</span><span class="s"> &quot;</span>
+                 <span class="s">&quot; ) &amp;&amp; &quot;</span>
+                    <span class="s">&quot;cd ${SRC}/</span><span class="si">%(version)s</span><span class="s"> &amp;&amp; &quot;</span>
+                    <span class="c"># Just execute and silence warnings...</span>
+                    <span class="s">&quot; ( ./configure &amp;&amp; make ) &quot;</span>
+             <span class="s">&quot; )&quot;</span><span class="p">)</span> <span class="o">%</span> <span class="p">({</span> <span class="s">&#39;sources&#39;</span><span class="p">:</span> <span class="n">sources</span><span class="p">,</span>
+                        <span class="s">&#39;version&#39;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">version</span>
+                 <span class="p">})</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_install</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="p">(</span>
+            <span class="c"># Evaluate if ccnx binaries are already installed</span>
+            <span class="s">&quot; ( &quot;</span>
+                <span class="s">&quot; test -f ${BIN}/</span><span class="si">%(version)s</span><span class="s">/ccnd &amp;&amp; &quot;</span>
+                <span class="s">&quot; echo &#39;binaries found, nothing to do&#39; &quot;</span>
+            <span class="s">&quot; ) || ( &quot;</span>
+            <span class="c"># If not, install</span>
+                <span class="s">&quot;  mkdir -p ${BIN}/</span><span class="si">%(version)s</span><span class="s"> &amp;&amp; &quot;</span>
+                <span class="s">&quot;  mv ${SRC}/</span><span class="si">%(version)s</span><span class="s">/bin/* ${BIN}/</span><span class="si">%(version)s</span><span class="s">/ &quot;</span>
+            <span class="s">&quot; )&quot;</span>
+            <span class="p">)</span> <span class="o">%</span> <span class="p">({</span> <span class="s">&#39;version&#39;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">version</span>
+                 <span class="p">})</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_environment</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">envs</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">({</span>
+            <span class="s">&quot;debug&quot;</span><span class="p">:</span> <span class="s">&quot;CCND_DEBUG&quot;</span><span class="p">,</span>
+            <span class="s">&quot;port&quot;</span><span class="p">:</span> <span class="s">&quot;CCN_LOCAL_PORT&quot;</span><span class="p">,</span>
+            <span class="s">&quot;sockname&quot;</span> <span class="p">:</span> <span class="s">&quot;CCN_LOCAL_SOCKNAME&quot;</span><span class="p">,</span>
+            <span class="s">&quot;capacity&quot;</span> <span class="p">:</span> <span class="s">&quot;CCND_CAP&quot;</span><span class="p">,</span>
+            <span class="s">&quot;mtu&quot;</span> <span class="p">:</span> <span class="s">&quot;CCND_MTU&quot;</span><span class="p">,</span>
+            <span class="s">&quot;dataPauseMicrosec&quot;</span> <span class="p">:</span> <span class="s">&quot;CCND_DATA_PAUSE_MICROSEC&quot;</span><span class="p">,</span>
+            <span class="s">&quot;defaultTimeToStale&quot;</span> <span class="p">:</span> <span class="s">&quot;CCND_DEFAULT_TIME_TO_STALE&quot;</span><span class="p">,</span>
+            <span class="s">&quot;maxTimeToStale&quot;</span> <span class="p">:</span> <span class="s">&quot;CCND_MAX_TIME_TO_STALE&quot;</span><span class="p">,</span>
+            <span class="s">&quot;maxRteMicrosec&quot;</span> <span class="p">:</span> <span class="s">&quot;CCND_MAX_RTE_MICROSEC&quot;</span><span class="p">,</span>
+            <span class="s">&quot;keyStoreDirectory&quot;</span> <span class="p">:</span> <span class="s">&quot;CCND_KEYSTORE_DIRECTORY&quot;</span><span class="p">,</span>
+            <span class="s">&quot;listenOn&quot;</span> <span class="p">:</span> <span class="s">&quot;CCND_LISTEN_ON&quot;</span><span class="p">,</span>
+            <span class="s">&quot;autoreg&quot;</span> <span class="p">:</span> <span class="s">&quot;CCND_AUTOREG&quot;</span><span class="p">,</span>
+            <span class="s">&quot;prefix&quot;</span> <span class="p">:</span> <span class="s">&quot;CCND_PREFIX&quot;</span><span class="p">,</span>
+            <span class="p">})</span>
+
+        <span class="n">env</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">path</span> 
+        <span class="n">env</span> <span class="o">+=</span> <span class="s">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="k">lambda</span> <span class="n">k</span><span class="p">:</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">=</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">envs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">k</span><span class="p">),</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">k</span><span class="p">)))</span> \
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">k</span><span class="p">)</span> <span class="k">else</span> <span class="s">&quot;&quot;</span><span class="p">,</span> <span class="n">envs</span><span class="o">.</span><span class="n">keys</span><span class="p">()))</span>
+        
+        <span class="k">return</span> <span class="n">env</span>            
+
+<div class="viewcode-block" id="LinuxCCND.valid_connection"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnd.LinuxCCND.valid_connection">[docs]</a>    <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="c"># TODO: Validate!</span>
+        <span class="k">return</span> <span class="bp">True</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/ccn/ccnpeek.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/ccn/ccnpeek.html
new file mode 100644 (file)
index 0000000..8d52c8f
--- /dev/null
@@ -0,0 +1,155 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.ccn.ccnpeek &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.ccn.ccnpeek</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span><span class="p">,</span> <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.ccn.ccnapplication</span> <span class="kn">import</span> <span class="n">LinuxCCNApplication</span>
+
+<span class="kn">import</span> <span class="nn">os</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="LinuxCCNPeek"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnpeek.LinuxCCNPeek">[docs]</a><span class="k">class</span> <span class="nc">LinuxCCNPeek</span><span class="p">(</span><span class="n">LinuxCCNApplication</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;linux::CCNPeek&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">content_name</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;contentName&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Content name for the content to peek&quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">content_name</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxCCNPeek</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ccnpeek-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span>
+
+<div class="viewcode-block" id="LinuxCCNPeek.do_deploy"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnpeek.LinuxCCNPeek.do_deploy">[docs]</a>    <span class="k">def</span> <span class="nf">do_deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">ccnd</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">ccnd</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;---- RESCHEDULING DEPLOY ---- node state </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">state</span> <span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">deploy</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="n">command</span><span class="p">:</span>
+                <span class="n">command</span> <span class="o">=</span> <span class="s">&quot;ccnpeek </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;contentName&quot;</span><span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">,</span> <span class="n">command</span><span class="p">)</span> 
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Deploying command &#39;</span><span class="si">%s</span><span class="s">&#39; &quot;</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
+            
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_environment</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_provision</span><span class="p">()</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_ready</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="LinuxCCNPeek.valid_connection"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnpeek.LinuxCCNPeek.valid_connection">[docs]</a>    <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="c"># TODO: Validate!</span>
+        <span class="k">return</span> <span class="bp">True</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/ccn/ccnping.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/ccn/ccnping.html
new file mode 100644 (file)
index 0000000..fcac090
--- /dev/null
@@ -0,0 +1,186 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.ccn.ccnping &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.ccn.ccnping</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.ccn.ccnpingserver</span> <span class="kn">import</span> <span class="n">LinuxCCNPingServer</span>
+<span class="kn">from</span> <span class="nn">nepi.util.timefuncs</span> <span class="kn">import</span> <span class="n">tnow</span><span class="p">,</span> <span class="n">tdiffsec</span>
+
+<span class="kn">import</span> <span class="nn">os</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="LinuxCCNPing"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnping.LinuxCCNPing">[docs]</a><span class="k">class</span> <span class="nc">LinuxCCNPing</span><span class="p">(</span><span class="n">LinuxCCNPingServer</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;linux::CCNPing&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">interval</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;i&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Set ping interval in seconds (minimum 0.10 second) &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">count</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;c&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Total number of pings&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">number</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;n&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Set the starting number, the number is incremented by 1 after each Interest &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+        <span class="n">prefix</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;prefix&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Prefix to serve content (e.g. ccnx:/name/prefix)&quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">interval</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">count</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">number</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">prefix</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxCCNPing</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ccnping-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxCCNPing.ccnpingserver"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnping.LinuxCCNPing.ccnpingserver">[docs]</a>    <span class="k">def</span> <span class="nf">ccnpingserver</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">ccnpingserver</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">LinuxCCNPingServer</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+        <span class="k">if</span> <span class="n">ccnpingserver</span><span class="p">:</span> <span class="k">return</span> <span class="n">ccnpingserver</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+        <span class="k">return</span> <span class="bp">None</span>
+</div>
+<div class="viewcode-block" id="LinuxCCNPing.do_start"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnping.LinuxCCNPing.do_start">[docs]</a>    <span class="k">def</span> <span class="nf">do_start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">ccnpingserver</span> <span class="ow">or</span> \
+                <span class="bp">self</span><span class="o">.</span><span class="n">ccnpingserver</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;---- RESCHEDULING START----  ccnpingserver state </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> \
+                    <span class="bp">self</span><span class="o">.</span><span class="n">ccnpingserver</span><span class="o">.</span><span class="n">state</span> <span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">start</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="nb">super</span><span class="p">(</span><span class="n">LinuxCCNPing</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_start</span><span class="p">()</span>
+ </div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_start_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;ccnping&quot;</span><span class="p">)</span>
+        <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;prefix&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;c&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-c </span><span class="si">%d</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;c&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;n&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-n </span><span class="si">%d</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;n&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;i&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-i </span><span class="si">%.2f</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;i&quot;</span><span class="p">))</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">command</span>
+
+<div class="viewcode-block" id="LinuxCCNPing.valid_connection"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnping.LinuxCCNPing.valid_connection">[docs]</a>    <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="c"># TODO: Validate!</span>
+        <span class="k">return</span> <span class="bp">True</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/ccn/ccnpingserver.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/ccn/ccnpingserver.html
new file mode 100644 (file)
index 0000000..d3b8af6
--- /dev/null
@@ -0,0 +1,225 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.ccn.ccnpingserver &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.ccn.ccnpingserver</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.ccn.ccnapplication</span> <span class="kn">import</span> <span class="n">LinuxCCNApplication</span>
+<span class="kn">from</span> <span class="nn">nepi.util.timefuncs</span> <span class="kn">import</span> <span class="n">tnow</span><span class="p">,</span> <span class="n">tdiffsec</span>
+
+<span class="kn">import</span> <span class="nn">os</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="LinuxCCNPingServer"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnpingserver.LinuxCCNPingServer">[docs]</a><span class="k">class</span> <span class="nc">LinuxCCNPingServer</span><span class="p">(</span><span class="n">LinuxCCNApplication</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;linux::CCNPingServer&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">daemon</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;d&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Run ccnping server as a daemon in background&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">freshness</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;x&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Set FreshnessSeconds&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">prefix</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;prefix&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Prefix to serve content (e.g. ccnx:/name/prefix)&quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">daemon</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">freshness</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">prefix</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxCCNPingServer</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ccnping-serv-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span>
+
+<div class="viewcode-block" id="LinuxCCNPingServer.do_deploy"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnpingserver.LinuxCCNPingServer.do_deploy">[docs]</a>    <span class="k">def</span> <span class="nf">do_deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_start_command</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_environment</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;depends&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;depends&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_dependencies</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;build&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;build&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_build</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;install&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;install&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_install</span><span class="p">)</span>
+
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxCCNPingServer</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_deploy</span><span class="p">()</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_start_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;ccnpingserver&quot;</span><span class="p">)</span>
+        <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;prefix&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;d&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-d&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;x&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-x </span><span class="si">%d</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;x&quot;</span><span class="p">))</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">command</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_dependencies</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s">&quot;git&quot;</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_build</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="p">(</span>
+            <span class="c"># Evaluate if ccnx binaries are already installed</span>
+            <span class="s">&quot; ( &quot;</span>
+                <span class="s">&quot; test -f ${BIN}/ccnping &amp;&amp; &quot;</span>
+                <span class="s">&quot; echo &#39;binaries found, nothing to do&#39; &quot;</span>
+            <span class="s">&quot; ) || ( &quot;</span>
+            <span class="c"># If not, untar and build</span>
+                <span class="s">&quot; ( &quot;</span>
+                    <span class="s">&quot; git clone git://github.com/NDN-Routing/ccnping ${SRC}/ccnping &quot;</span>
+                 <span class="s">&quot; ) &amp;&amp; &quot;</span>
+                    <span class="c"># build</span>
+                    <span class="s">&quot;cd ${SRC}/ccnping &amp;&amp; &quot;</span>
+                    <span class="s">&quot; ( &quot;</span>
+                    <span class="s">&quot; ./configure LDFLAGS=-L${SRC}/ccnx-0.7.2/lib CFLAGS=-I${SRC}/ccnx-0.7.2/include &quot;</span>
+                    <span class="s">&quot; --prefix=${BIN}/ccnping &amp;&amp; make &quot;</span>
+                    <span class="s">&quot; ) &quot;</span>
+             <span class="s">&quot; )&quot;</span><span class="p">)</span> 
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_install</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="p">(</span>
+            <span class="c"># Evaluate if ccnx binaries are already installed</span>
+            <span class="s">&quot; ( &quot;</span>
+                <span class="s">&quot; test -f ${BIN}/ccnping &amp;&amp; &quot;</span>
+                <span class="s">&quot; echo &#39;binaries found, nothing to do&#39; &quot;</span>
+            <span class="s">&quot; ) || ( &quot;</span>
+            <span class="c"># If not, install</span>
+                <span class="s">&quot;  mkdir -p ${BIN}/ccnping &amp;&amp; &quot;</span>
+                <span class="s">&quot;  mv ${SRC}/ccnping/ccnping ${BIN}/ccnping/ &amp;&amp; &quot;</span>
+                <span class="s">&quot;  mv ${SRC}/ccnping/ccnpingserver ${BIN}/ccnping/ &quot;</span>
+            <span class="s">&quot; )&quot;</span>
+            <span class="p">)</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_environment</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">:</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ccnd</span><span class="o">.</span><span class="n">path</span><span class="p">,</span> <span class="s">&quot;${BIN}/ccnping&quot;</span><span class="p">)</span>
+       
+<div class="viewcode-block" id="LinuxCCNPingServer.valid_connection"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnpingserver.LinuxCCNPingServer.valid_connection">[docs]</a>    <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="c"># TODO: Validate!</span>
+        <span class="k">return</span> <span class="bp">True</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/ccn/ccnpoke.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/ccn/ccnpoke.html
new file mode 100644 (file)
index 0000000..71ff3d7
--- /dev/null
@@ -0,0 +1,163 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.ccn.ccnpoke &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.ccn.ccnpoke</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span><span class="p">,</span> <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.ccn.ccnapplication</span> <span class="kn">import</span> <span class="n">LinuxCCNApplication</span>
+
+<span class="kn">import</span> <span class="nn">os</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="LinuxCCNPoke"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnpoke.LinuxCCNPoke">[docs]</a><span class="k">class</span> <span class="nc">LinuxCCNPoke</span><span class="p">(</span><span class="n">LinuxCCNApplication</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;linux::CCNPoke&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">content_name</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;contentName&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Content name for the content to peek&quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">content</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;content&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Content to poke (as a text string)&quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">content_name</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">content</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxCCNPoke</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ccnpoke-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span>
+
+<div class="viewcode-block" id="LinuxCCNPoke.do_deploy"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnpoke.LinuxCCNPoke.do_deploy">[docs]</a>    <span class="k">def</span> <span class="nf">do_deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">ccnd</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">ccnd</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;---- RESCHEDULING DEPLOY ---- node state </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">state</span> <span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">deploy</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="n">command</span><span class="p">:</span>
+                <span class="n">command</span> <span class="o">=</span> <span class="s">&quot;ccnpoke </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;contentName&quot;</span><span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">,</span> <span class="n">command</span><span class="p">)</span> 
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Deploying command &#39;</span><span class="si">%s</span><span class="s">&#39; &quot;</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;content&quot;</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;stdin&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;content&quot;</span><span class="p">))</span>
+            
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_environment</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_provision</span><span class="p">()</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_ready</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="LinuxCCNPoke.valid_connection"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnpoke.LinuxCCNPoke.valid_connection">[docs]</a>    <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="c"># TODO: Validate!</span>
+        <span class="k">return</span> <span class="bp">True</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/ccn/ccnr.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/ccn/ccnr.html
new file mode 100644 (file)
index 0000000..382fc97
--- /dev/null
@@ -0,0 +1,397 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.ccn.ccnr &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.ccn.ccnr</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span><span class="p">,</span> <span class="n">ResourceState</span><span class="p">,</span> \
+    <span class="n">ResourceAction</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.application</span> <span class="kn">import</span> <span class="n">LinuxApplication</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.ccn.ccnd</span> <span class="kn">import</span> <span class="n">LinuxCCND</span>
+<span class="kn">from</span> <span class="nn">nepi.util.timefuncs</span> <span class="kn">import</span> <span class="n">tnow</span>
+
+<span class="kn">import</span> <span class="nn">os</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="LinuxCCNR"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnr.LinuxCCNR">[docs]</a><span class="k">class</span> <span class="nc">LinuxCCNR</span><span class="p">(</span><span class="n">LinuxApplication</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;linux::CCNR&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">max_fanout</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;maxFanout&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNR_BTREE_MAX_FANOUT environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">max_leaf_entries</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;maxLeafEntries&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNR_BTREE_MAX_LEAF_ENTRIES environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">max_node_bytes</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;maxNodeBytes&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNR_BTREE_MAX_NODE_BYTES environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">max_node_pool</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;maxNodePool&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNR_BTREE_MAX_NODE_POOL environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">content_cache</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;contentCache&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNR_CONTENT_CACHE environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">debug</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;debug&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNR_DEBUG environmental variable. &quot;</span>
+            <span class="s">&quot;Logging level for ccnr. Defaults to WARNING.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Enumerate</span><span class="p">,</span>
+            <span class="n">allowed</span> <span class="o">=</span> <span class="p">[</span>
+                    <span class="s">&quot;NONE&quot;</span><span class="p">,</span>
+                    <span class="s">&quot;SEVERE&quot;</span><span class="p">,</span>
+                    <span class="s">&quot;ERROR&quot;</span><span class="p">,</span>
+                    <span class="s">&quot;WARNING&quot;</span><span class="p">,</span>
+                    <span class="s">&quot;INFO&quot;</span><span class="p">,</span>
+                    <span class="s">&quot;FINE, FINER, FINEST&quot;</span><span class="p">],</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">directory</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;directory&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNR_DIRECTORY environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">global_prefix</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;globalPrefix&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNR_GLOBAL_PREFIX environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">listen_on</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;listenOn&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNR_LISTEN_ON environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">min_send_bufsize</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;minSendBufsize&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNR_MIN_SEND_BUFSIZE environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">proto</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;proto&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNR_PROTO environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">status_port</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;statusPort&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNR_STATUS_PORT environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">start_write_scope_limit</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;startWriteScopeLimit&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNR_START_WRITE_SCOPE_LIMIT environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">ccns_debug</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ccnsDebug&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNS_DEBUG environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">ccns_enable</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ccnsEnable&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNS_ENABLE environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">ccns_faux_error</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ccnsFauxError&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNS_FAUX_ERROR environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">ccns_heartbeat_micros</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ccnsHeartBeatMicros&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNS_HEART_BEAT_MICROS environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">ccns_max_compares_busy</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ccnsMaxComparesBusy&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNS_MAX_COMPARES_BUSY environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">ccns_max_fetch_busy</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ccnsMaxFetchBusy&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNS_MAX_FETCH_BUSY environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">ccns_node_fetch_lifetime</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ccnsNodeFetchLifetime&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNS_NODE_FETCH_LIFETIME environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">ccns_note_err</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ccnsNoteErr&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNS_NOTE_ERR environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">ccns_repo_store</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ccnsRepoStore&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNS_REPO_STORE environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">ccns_root_advise_fresh</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ccnsRootAdviseFresh&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNS_ROOT_ADVISE_FRESH environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">ccns_root_advise_lifetime</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ccnsRootAdviseLifetime&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNS_ROOT_ADVISE_LIFETIME environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">ccns_stable_enabled</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ccnsStableEnabled&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNS_STABLE_ENABLED environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">ccns_sync_scope</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ccnsSyncScope&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNS_SYNC_SCOPE environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">repo_file</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;repoFile1&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The Repository uses $CCNR_DIRECTORY/repoFile1 for &quot;</span>
+            <span class="s">&quot;persistent storage of CCN Content Objects&quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">max_fanout</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">max_leaf_entries</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">max_node_bytes</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">max_node_pool</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">content_cache</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">debug</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">directory</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">global_prefix</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">listen_on</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">min_send_bufsize</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">proto</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">status_port</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">start_write_scope_limit</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ccns_debug</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ccns_enable</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ccns_faux_error</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ccns_heartbeat_micros</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ccns_max_compares_busy</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ccns_max_fetch_busy</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ccns_node_fetch_lifetime</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ccns_note_err</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ccns_repo_store</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ccns_root_advise_fresh</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ccns_root_advise_lifetime</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ccns_stable_enabled</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ccns_sync_scope</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">repo_file</span><span class="p">)</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">log</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;log&quot;</span><span class="p">,</span> <span class="s">&quot;CCND log output&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">log</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxCCNR</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ccnr-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxCCNR.ccnd"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnr.LinuxCCNR.ccnd">[docs]</a>    <span class="k">def</span> <span class="nf">ccnd</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">ccnd</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">LinuxCCND</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+        <span class="k">if</span> <span class="n">ccnd</span><span class="p">:</span> <span class="k">return</span> <span class="n">ccnd</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+        <span class="k">return</span> <span class="bp">None</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxCCNR.node"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnr.LinuxCCNR.node">[docs]</a>    <span class="k">def</span> <span class="nf">node</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ccnd</span><span class="p">:</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">ccnd</span><span class="o">.</span><span class="n">node</span>
+        <span class="k">return</span> <span class="bp">None</span>
+</div>
+<div class="viewcode-block" id="LinuxCCNR.do_deploy"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnr.LinuxCCNR.do_deploy">[docs]</a>    <span class="k">def</span> <span class="nf">do_deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">ccnd</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">ccnd</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;---- RESCHEDULING DEPLOY ---- CCND state </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">ccnd</span><span class="o">.</span><span class="n">state</span> <span class="p">)</span>
+            
+            <span class="c"># ccnr needs to wait until ccnd is deployed and running</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">deploy</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_start_command</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_environment</span><span class="p">)</span>
+
+            <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Deploying command &#39;</span><span class="si">%s</span><span class="s">&#39; &quot;</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_provision</span><span class="p">()</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_ready</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="LinuxCCNR.upload_start_command"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnr.LinuxCCNR.upload_start_command">[docs]</a>    <span class="k">def</span> <span class="nf">upload_start_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span>
+        <span class="n">env</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;repoFile1&quot;</span><span class="p">):</span>
+            <span class="c"># upload repoFile1</span>
+            <span class="n">local_file</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;repoFile1&quot;</span><span class="p">)</span>
+            <span class="n">remote_file</span> <span class="o">=</span> <span class="s">&quot;${RUN_HOME}/repoFile1&quot;</span>
+            <span class="n">remote_file</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_paths</span><span class="p">(</span><span class="n">remote_file</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">upload</span><span class="p">(</span><span class="n">local_file</span><span class="p">,</span>
+                    <span class="n">remote_file</span><span class="p">,</span>
+                    <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">False</span><span class="p">)</span>
+
+        <span class="c"># We want to make sure the repository is running</span>
+        <span class="c"># before the experiment starts.</span>
+        <span class="c"># Run the command as a bash script in background,</span>
+        <span class="c"># in the host ( but wait until the command has</span>
+        <span class="c"># finished to continue )</span>
+        <span class="n">env</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_paths</span><span class="p">(</span><span class="n">env</span><span class="p">)</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_paths</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+
+        <span class="n">shfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">,</span> <span class="s">&quot;start.sh&quot;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">run_and_wait</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">,</span>
+                <span class="n">shfile</span> <span class="o">=</span> <span class="n">shfile</span><span class="p">,</span>
+                <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+                <span class="n">env</span> <span class="o">=</span> <span class="n">env</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxCCNR.do_start"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnr.LinuxCCNR.do_start">[docs]</a>    <span class="k">def</span> <span class="nf">do_start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+            <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Starting command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_started</span><span class="p">()</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Failed to execute command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">command</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_start_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s">&quot;ccnr &amp;&quot;</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_environment</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">envs</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">({</span>
+            <span class="s">&quot;maxFanout&quot;</span><span class="p">:</span> <span class="s">&quot;CCNR_BTREE_MAX_FANOUT&quot;</span><span class="p">,</span>
+            <span class="s">&quot;maxLeafEntries&quot;</span><span class="p">:</span> <span class="s">&quot;CCNR_BTREE_MAX_LEAF_ENTRIES&quot;</span><span class="p">,</span>
+            <span class="s">&quot;maxNodeBytes&quot;</span><span class="p">:</span> <span class="s">&quot;CCNR_BTREE_MAX_NODE_BYTES&quot;</span><span class="p">,</span>
+            <span class="s">&quot;maxNodePool&quot;</span><span class="p">:</span> <span class="s">&quot;CCNR_BTREE_MAX_NODE_POOL&quot;</span><span class="p">,</span>
+            <span class="s">&quot;contentCache&quot;</span><span class="p">:</span> <span class="s">&quot;CCNR_CONTENT_CACHE&quot;</span><span class="p">,</span>
+            <span class="s">&quot;debug&quot;</span><span class="p">:</span> <span class="s">&quot;CCNR_DEBUG&quot;</span><span class="p">,</span>
+            <span class="s">&quot;directory&quot;</span><span class="p">:</span> <span class="s">&quot;CCNR_DIRECTORY&quot;</span><span class="p">,</span>
+            <span class="s">&quot;globalPrefix&quot;</span><span class="p">:</span> <span class="s">&quot;CCNR_GLOBAL_PREFIX&quot;</span><span class="p">,</span>
+            <span class="s">&quot;listenOn&quot;</span><span class="p">:</span> <span class="s">&quot;CCNR_LISTEN_ON&quot;</span><span class="p">,</span>
+            <span class="s">&quot;minSendBufsize&quot;</span><span class="p">:</span> <span class="s">&quot;CCNR_MIN_SEND_BUFSIZE&quot;</span><span class="p">,</span>
+            <span class="s">&quot;proto&quot;</span><span class="p">:</span> <span class="s">&quot;CCNR_PROTO&quot;</span><span class="p">,</span>
+            <span class="s">&quot;statusPort&quot;</span><span class="p">:</span> <span class="s">&quot;CCNR_STATUS_PORT&quot;</span><span class="p">,</span>
+            <span class="s">&quot;startWriteScopeLimit&quot;</span><span class="p">:</span> <span class="s">&quot;CCNR_START_WRITE_SCOPE_LIMIT&quot;</span><span class="p">,</span>
+            <span class="s">&quot;ccnsDebug&quot;</span><span class="p">:</span> <span class="s">&quot;CCNS_DEBUG&quot;</span><span class="p">,</span>
+            <span class="s">&quot;ccnsEnable&quot;</span><span class="p">:</span> <span class="s">&quot;CCNS_ENABLE&quot;</span><span class="p">,</span>
+            <span class="s">&quot;ccnsFauxError&quot;</span><span class="p">:</span> <span class="s">&quot;CCNS_FAUX_ERROR&quot;</span><span class="p">,</span>
+            <span class="s">&quot;ccnsHeartBeatMicros&quot;</span><span class="p">:</span> <span class="s">&quot;CCNS_HEART_BEAT_MICROS&quot;</span><span class="p">,</span>
+            <span class="s">&quot;ccnsMaxComparesBusy&quot;</span><span class="p">:</span> <span class="s">&quot;CCNS_MAX_COMPARES_BUSY&quot;</span><span class="p">,</span>
+            <span class="s">&quot;ccnsMaxFetchBusy&quot;</span><span class="p">:</span> <span class="s">&quot;CCNS_MAX_FETCH_BUSY&quot;</span><span class="p">,</span>
+            <span class="s">&quot;ccnsNodeFetchLifetime&quot;</span><span class="p">:</span> <span class="s">&quot;CCNS_NODE_FETCH_LIFETIME&quot;</span><span class="p">,</span>
+            <span class="s">&quot;ccnsNoteErr&quot;</span><span class="p">:</span> <span class="s">&quot;CCNS_NOTE_ERR&quot;</span><span class="p">,</span>
+            <span class="s">&quot;ccnsRepoStore&quot;</span><span class="p">:</span> <span class="s">&quot;CCNS_REPO_STORE&quot;</span><span class="p">,</span>
+            <span class="s">&quot;ccnsRootAdviseFresh&quot;</span><span class="p">:</span> <span class="s">&quot;CCNS_ROOT_ADVISE_FRESH&quot;</span><span class="p">,</span>
+            <span class="s">&quot;ccnsRootAdviseLifetime&quot;</span><span class="p">:</span> <span class="s">&quot;CCNS_ROOT_ADVISE_LIFETIME&quot;</span><span class="p">,</span>
+            <span class="s">&quot;ccnsStableEnabled&quot;</span><span class="p">:</span> <span class="s">&quot;CCNS_STABLE_ENABLED&quot;</span><span class="p">,</span>
+            <span class="s">&quot;ccnsSyncScope&quot;</span><span class="p">:</span> <span class="s">&quot;CCNS_SYNC_SCOPE&quot;</span><span class="p">,</span>
+            <span class="p">})</span>
+
+        <span class="n">env</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ccnd</span><span class="o">.</span><span class="n">path</span>
+        <span class="n">env</span> <span class="o">+=</span> <span class="s">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="k">lambda</span> <span class="n">k</span><span class="p">:</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">=</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">envs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">k</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">k</span><span class="p">))</span> \
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">k</span><span class="p">)</span> <span class="k">else</span> <span class="s">&quot;&quot;</span><span class="p">,</span> <span class="n">envs</span><span class="o">.</span><span class="n">keys</span><span class="p">()))</span>
+       
+        <span class="k">return</span> <span class="n">env</span>            
+        
+<div class="viewcode-block" id="LinuxCCNR.valid_connection"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnr.LinuxCCNR.valid_connection">[docs]</a>    <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="c"># TODO: Validate!</span>
+        <span class="k">return</span> <span class="bp">True</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/ccn/fibentry.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/ccn/fibentry.html
new file mode 100644 (file)
index 0000000..240329e
--- /dev/null
@@ -0,0 +1,367 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.ccn.fibentry &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.ccn.fibentry</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span><span class="p">,</span> <span class="n">ResourceState</span><span class="p">,</span> \
+    <span class="n">ResourceAction</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.application</span> <span class="kn">import</span> <span class="n">LinuxApplication</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.ccn.ccnd</span> <span class="kn">import</span> <span class="n">LinuxCCND</span>
+<span class="kn">from</span> <span class="nn">nepi.util.timefuncs</span> <span class="kn">import</span> <span class="n">tnow</span>
+
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">socket</span>
+<span class="kn">import</span> <span class="nn">time</span>
+
+
+<span class="c"># TODO: Add rest of options for ccndc!!!</span>
+<span class="c">#       Implement ENTRY DELETE!!</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="LinuxFIBEntry"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.fibentry.LinuxFIBEntry">[docs]</a><span class="k">class</span> <span class="nc">LinuxFIBEntry</span><span class="p">(</span><span class="n">LinuxApplication</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;linux::FIBEntry&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">uri</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;uri&quot;</span><span class="p">,</span>
+                <span class="s">&quot;URI prefix to match and route for this FIB entry&quot;</span><span class="p">,</span>
+                <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ccnx:/&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">protocol</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;protocol&quot;</span><span class="p">,</span>
+                <span class="s">&quot;Transport protocol used in network connection to peer &quot;</span>
+                <span class="s">&quot;for this FIB entry. One of &#39;udp&#39; or &#39;tcp&#39;.&quot;</span><span class="p">,</span>
+                <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Enumerate</span><span class="p">,</span> 
+                <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;udp&quot;</span><span class="p">,</span>
+                <span class="n">allowed</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;udp&quot;</span><span class="p">,</span> <span class="s">&quot;tcp&quot;</span><span class="p">],</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">host</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;host&quot;</span><span class="p">,</span>
+                <span class="s">&quot;Peer hostname used in network connection for this FIB entry. &quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">port</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;port&quot;</span><span class="p">,</span>
+                <span class="s">&quot;Peer port address used in network connection to peer &quot;</span>
+                <span class="s">&quot;for this FIB entry.&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">ip</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ip&quot;</span><span class="p">,</span>
+                <span class="s">&quot;Peer host public IP used in network connection for this FIB entry. &quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">uri</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">protocol</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">host</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">port</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ip</span><span class="p">)</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">ping</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;ping&quot;</span><span class="p">,</span> <span class="s">&quot;Ping to the peer end&quot;</span><span class="p">)</span>
+        <span class="n">mtr</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;mtr&quot;</span><span class="p">,</span> <span class="s">&quot;Mtr to the peer end&quot;</span><span class="p">)</span>
+        <span class="n">traceroute</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;traceroute&quot;</span><span class="p">,</span> <span class="s">&quot;Tracerout to the peer end&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">ping</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mtr</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">traceroute</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxFIBEntry</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;fib-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_ping</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_traceroute</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_ccnd</span> <span class="o">=</span> <span class="bp">None</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxFIBEntry.ccnd"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.ccnd">[docs]</a>    <span class="k">def</span> <span class="nf">ccnd</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ccnd</span><span class="p">:</span>
+            <span class="n">ccnd</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">LinuxCCND</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+            <span class="k">if</span> <span class="n">ccnd</span><span class="p">:</span> 
+                <span class="bp">self</span><span class="o">.</span><span class="n">_ccnd</span> <span class="o">=</span> <span class="n">ccnd</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+            
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ccnd</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxFIBEntry.ping"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.ping">[docs]</a>    <span class="k">def</span> <span class="nf">ping</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ping</span><span class="p">:</span>
+            <span class="kn">from</span> <span class="nn">nepi.resources.linux.ping</span> <span class="kn">import</span> <span class="n">LinuxPing</span>
+            <span class="n">ping</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">LinuxPing</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+            <span class="k">if</span> <span class="n">ping</span><span class="p">:</span> 
+                <span class="bp">self</span><span class="o">.</span><span class="n">_ping</span> <span class="o">=</span> <span class="n">ping</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+            
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ping</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxFIBEntry.traceroute"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.traceroute">[docs]</a>    <span class="k">def</span> <span class="nf">traceroute</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_traceroute</span><span class="p">:</span>
+            <span class="kn">from</span> <span class="nn">nepi.resources.linux.traceroute</span> <span class="kn">import</span> <span class="n">LinuxTraceroute</span>
+            <span class="n">traceroute</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">LinuxTraceroute</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+            <span class="k">if</span> <span class="n">traceroute</span><span class="p">:</span> 
+                <span class="bp">self</span><span class="o">.</span><span class="n">_traceroute</span> <span class="o">=</span> <span class="n">traceroute</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+            
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_traceroute</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxFIBEntry.node"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.node">[docs]</a>    <span class="k">def</span> <span class="nf">node</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ccnd</span><span class="p">:</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">ccnd</span><span class="o">.</span><span class="n">node</span>
+        <span class="k">return</span> <span class="bp">None</span>
+</div>
+<div class="viewcode-block" id="LinuxFIBEntry.trace"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.trace">[docs]</a>    <span class="k">def</span> <span class="nf">trace</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">attr</span> <span class="o">=</span> <span class="n">TraceAttr</span><span class="o">.</span><span class="n">ALL</span><span class="p">,</span> <span class="n">block</span> <span class="o">=</span> <span class="mi">512</span><span class="p">,</span> <span class="n">offset</span> <span class="o">=</span> <span class="mi">0</span><span class="p">):</span>
+        <span class="k">if</span> <span class="n">name</span> <span class="o">==</span> <span class="s">&quot;ping&quot;</span><span class="p">:</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">ping</span><span class="p">:</span>
+                <span class="k">return</span> <span class="bp">None</span>
+            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">trace</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ping</span><span class="o">.</span><span class="n">guid</span><span class="p">,</span> <span class="s">&quot;stdout&quot;</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="n">block</span><span class="p">,</span> <span class="n">offset</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">name</span> <span class="o">==</span> <span class="s">&quot;traceroute&quot;</span><span class="p">:</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">traceroute</span><span class="p">:</span>
+                <span class="k">return</span> <span class="bp">None</span>
+            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">trace</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">traceroute</span><span class="o">.</span><span class="n">guid</span><span class="p">,</span> <span class="s">&quot;stdout&quot;</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="n">block</span><span class="p">,</span> <span class="n">offset</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">LinuxFIBEntry</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">trace</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="n">block</span><span class="p">,</span> <span class="n">offset</span><span class="p">)</span>
+    </div>
+<div class="viewcode-block" id="LinuxFIBEntry.do_deploy"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.do_deploy">[docs]</a>    <span class="k">def</span> <span class="nf">do_deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="c"># Wait until associated ccnd is provisioned</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">ccnd</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">ccnd</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+            <span class="c"># ccnr needs to wait until ccnd is deployed and running</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">deploy</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ip&quot;</span><span class="p">):</span>
+                <span class="n">host</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;host&quot;</span><span class="p">)</span>
+                <span class="n">ip</span> <span class="o">=</span> <span class="n">socket</span><span class="o">.</span><span class="n">gethostbyname</span><span class="p">(</span><span class="n">host</span><span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;ip&quot;</span><span class="p">,</span> <span class="n">ip</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_start_command</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_environment</span><span class="p">)</span>
+
+            <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Deploying command &#39;</span><span class="si">%s</span><span class="s">&#39; &quot;</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_provision</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">configure</span><span class="p">()</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_ready</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="LinuxFIBEntry.upload_start_command"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.upload_start_command">[docs]</a>    <span class="k">def</span> <span class="nf">upload_start_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span>
+        <span class="n">env</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">)</span>
+
+        <span class="c"># We want to make sure the FIB entries are created</span>
+        <span class="c"># before the experiment starts.</span>
+        <span class="c"># Run the command as a bash script in the background, </span>
+        <span class="c"># in the host ( but wait until the command has</span>
+        <span class="c"># finished to continue )</span>
+        <span class="n">env</span> <span class="o">=</span> <span class="n">env</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_paths</span><span class="p">(</span><span class="n">env</span><span class="p">)</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_paths</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+
+        <span class="c"># ccndc seems to return exitcode OK even if a (dns) error</span>
+        <span class="c"># occurred, so we need to account for this case here. </span>
+        <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">execute_command</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> 
+                <span class="n">env</span><span class="p">,</span> <span class="n">blocking</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">proc</span><span class="o">.</span><span class="n">poll</span><span class="p">():</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Failed to execute command&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+        </div>
+<div class="viewcode-block" id="LinuxFIBEntry.configure"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.configure">[docs]</a>    <span class="k">def</span> <span class="nf">configure</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">trace_enabled</span><span class="p">(</span><span class="s">&quot;ping&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">ping</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Configuring PING trace&quot;</span><span class="p">)</span>
+            <span class="n">ping</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">register_resource</span><span class="p">(</span><span class="s">&quot;linux::Ping&quot;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">ping</span><span class="p">,</span> <span class="s">&quot;printTimestamp&quot;</span><span class="p">,</span> <span class="bp">True</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">ping</span><span class="p">,</span> <span class="s">&quot;target&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;host&quot;</span><span class="p">))</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">ping</span><span class="p">,</span> <span class="s">&quot;earlyStart&quot;</span><span class="p">,</span> <span class="bp">True</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">register_connection</span><span class="p">(</span><span class="n">ping</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">guid</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">register_connection</span><span class="p">(</span><span class="n">ping</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">)</span>
+            <span class="c"># schedule ping deploy</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">deploy</span><span class="p">(</span><span class="n">guids</span><span class="o">=</span><span class="p">[</span><span class="n">ping</span><span class="p">],</span> <span class="n">group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">deployment_group</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">trace_enabled</span><span class="p">(</span><span class="s">&quot;traceroute&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">traceroute</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Configuring TRACEROUTE trace&quot;</span><span class="p">)</span>
+            <span class="n">traceroute</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">register_resource</span><span class="p">(</span><span class="s">&quot;linux::Traceroute&quot;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">traceroute</span><span class="p">,</span> <span class="s">&quot;printTimestamp&quot;</span><span class="p">,</span> <span class="bp">True</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">traceroute</span><span class="p">,</span> <span class="s">&quot;continuous&quot;</span><span class="p">,</span> <span class="bp">True</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">traceroute</span><span class="p">,</span> <span class="s">&quot;target&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;host&quot;</span><span class="p">))</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">traceroute</span><span class="p">,</span> <span class="s">&quot;earlyStart&quot;</span><span class="p">,</span> <span class="bp">True</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">register_connection</span><span class="p">(</span><span class="n">traceroute</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">guid</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">register_connection</span><span class="p">(</span><span class="n">traceroute</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">)</span>
+            <span class="c"># schedule mtr deploy</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">deploy</span><span class="p">(</span><span class="n">guids</span><span class="o">=</span><span class="p">[</span><span class="n">traceroute</span><span class="p">],</span> <span class="n">group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">deployment_group</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxFIBEntry.do_start"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.do_start">[docs]</a>    <span class="k">def</span> <span class="nf">do_start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+            <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Starting command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_started</span><span class="p">()</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Failed to execute command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">command</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+</div>
+<div class="viewcode-block" id="LinuxFIBEntry.do_stop"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.do_stop">[docs]</a>    <span class="k">def</span> <span class="nf">do_stop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;command&#39;</span><span class="p">)</span>
+        <span class="n">env</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;env&#39;</span><span class="p">)</span>
+        
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Stopping command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
+
+            <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_stop_command</span>
+            <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">execute_command</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="n">env</span><span class="p">,</span>
+                    <span class="n">blocking</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_stopped</span><span class="p">()</span>
+
+            <span class="k">if</span> <span class="n">err</span><span class="p">:</span>
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Failed to execute command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">command</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_start_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">uri</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;uri&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&quot;&quot;</span>
+        <span class="n">protocol</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;protocol&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&quot;&quot;</span>
+        <span class="n">ip</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ip&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&quot;&quot;</span> 
+        <span class="n">port</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;port&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&quot;&quot;</span>
+
+        <span class="c"># add ccnx:/example.com/ udp 224.0.0.204 52428</span>
+        <span class="k">return</span> <span class="s">&quot;ccndc add </span><span class="si">%(uri)s</span><span class="s"> </span><span class="si">%(protocol)s</span><span class="s"> </span><span class="si">%(host)s</span><span class="s"> </span><span class="si">%(port)s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">({</span>
+            <span class="s">&quot;uri&quot;</span> <span class="p">:</span> <span class="n">uri</span><span class="p">,</span>
+            <span class="s">&quot;protocol&quot;</span><span class="p">:</span> <span class="n">protocol</span><span class="p">,</span>
+            <span class="s">&quot;host&quot;</span><span class="p">:</span> <span class="n">ip</span><span class="p">,</span>
+            <span class="s">&quot;port&quot;</span><span class="p">:</span> <span class="n">port</span>
+            <span class="p">})</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_stop_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">uri</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;uri&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&quot;&quot;</span>
+        <span class="n">protocol</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;protocol&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&quot;&quot;</span>
+        <span class="n">ip</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ip&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&quot;&quot;</span>
+        <span class="n">port</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;port&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&quot;&quot;</span>
+
+        <span class="c"># add ccnx:/example.com/ udp 224.0.0.204 52428</span>
+        <span class="k">return</span> <span class="s">&quot;ccndc del </span><span class="si">%(uri)s</span><span class="s"> </span><span class="si">%(protocol)s</span><span class="s"> </span><span class="si">%(host)s</span><span class="s"> </span><span class="si">%(port)s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">({</span>
+            <span class="s">&quot;uri&quot;</span> <span class="p">:</span> <span class="n">uri</span><span class="p">,</span>
+            <span class="s">&quot;protocol&quot;</span><span class="p">:</span> <span class="n">protocol</span><span class="p">,</span>
+            <span class="s">&quot;host&quot;</span><span class="p">:</span> <span class="n">ip</span><span class="p">,</span>
+            <span class="s">&quot;port&quot;</span><span class="p">:</span> <span class="n">port</span>
+            <span class="p">})</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_environment</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">ccnd</span><span class="o">.</span><span class="n">path</span>
+       
+<div class="viewcode-block" id="LinuxFIBEntry.valid_connection"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.valid_connection">[docs]</a>    <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="c"># TODO: Validate!</span>
+        <span class="k">return</span> <span class="bp">True</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/channel.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/channel.html
new file mode 100644 (file)
index 0000000..171732c
--- /dev/null
@@ -0,0 +1,129 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.channel &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.channel</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="LinuxChannel"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.channel.LinuxChannel">[docs]</a><span class="k">class</span> <span class="nc">LinuxChannel</span><span class="p">(</span><span class="n">ResourceManager</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;linux::Channel&quot;</span>
+    <span class="n">_help</span> <span class="o">=</span> <span class="s">&quot;Represents a wireless channel on a network of Linux hosts&quot;</span>
+    <span class="n">_platform</span> <span class="o">=</span> <span class="s">&quot;linux&quot;</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxChannel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+
+<div class="viewcode-block" id="LinuxChannel.log_message"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.channel.LinuxChannel.log_message">[docs]</a>    <span class="k">def</span> <span class="nf">log_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s">&quot; guid </span><span class="si">%d</span><span class="s"> - </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">,</span> <span class="n">msg</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxChannel.valid_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.channel.LinuxChannel.valid_connection">[docs]</a>    <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="c"># TODO: Validate!</span>
+        <span class="k">return</span> <span class="bp">True</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/debfuncs.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/debfuncs.html
new file mode 100644 (file)
index 0000000..c1e4498
--- /dev/null
@@ -0,0 +1,133 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.debfuncs &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.debfuncs</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="c"># TODO: Investigate using http://nixos.org/nix/</span>
+
+<div class="viewcode-block" id="install_packages_command"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.debfuncs.install_packages_command">[docs]</a><span class="k">def</span> <span class="nf">install_packages_command</span><span class="p">(</span><span class="n">os</span><span class="p">,</span> <span class="n">packages</span><span class="p">):</span>
+    <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">packages</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
+        <span class="n">packages</span> <span class="o">=</span> <span class="p">[</span><span class="n">packages</span><span class="p">]</span>
+
+    <span class="n">cmd</span> <span class="o">=</span> <span class="s">&quot; &amp;&amp; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="k">lambda</span> <span class="n">p</span><span class="p">:</span> 
+            <span class="s">&quot; { dpkg -s </span><span class="si">%(package)s</span><span class="s"> || sudo -S apt-get -y install </span><span class="si">%(package)s</span><span class="s"> ; } &quot;</span> <span class="o">%</span> <span class="p">{</span>
+                    <span class="s">&#39;package&#39;</span><span class="p">:</span> <span class="n">p</span><span class="p">},</span> <span class="n">packages</span><span class="p">))</span>
+        
+    <span class="c">#cmd = { dpkg -s vim || sudo -S apt-get -y install vim ; } &amp;&amp; ..</span>
+    <span class="k">return</span> <span class="n">cmd</span> 
+</div>
+<div class="viewcode-block" id="remove_packages_command"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.debfuncs.remove_packages_command">[docs]</a><span class="k">def</span> <span class="nf">remove_packages_command</span><span class="p">(</span><span class="n">os</span><span class="p">,</span> <span class="n">packages</span><span class="p">):</span>
+    <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">packages</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
+        <span class="n">packages</span> <span class="o">=</span> <span class="p">[</span><span class="n">packages</span><span class="p">]</span>
+
+    <span class="n">cmd</span> <span class="o">=</span> <span class="s">&quot; &amp;&amp; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="k">lambda</span> <span class="n">p</span><span class="p">:</span> 
+            <span class="s">&quot; { dpkg -s </span><span class="si">%(package)s</span><span class="s"> &amp;&amp; sudo -S apt-get -y purge </span><span class="si">%(package)s</span><span class="s"> ; } &quot;</span> <span class="o">%</span> <span class="p">{</span>
+                    <span class="s">&#39;package&#39;</span><span class="p">:</span> <span class="n">p</span><span class="p">},</span> <span class="n">packages</span><span class="p">))</span>
+        
+    <span class="c">#cmd = { dpkg -s vim &amp;&amp; sudo -S apt-get -y purge vim ; } &amp;&amp; ..</span>
+    <span class="k">return</span> <span class="n">cmd</span> 
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/gretunnel.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/gretunnel.html
new file mode 100644 (file)
index 0000000..563f0b0
--- /dev/null
@@ -0,0 +1,177 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.gretunnel &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.gretunnel</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span><span class="p">,</span> <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.tunnel</span> <span class="kn">import</span> <span class="n">LinuxTunnel</span>
+<span class="kn">from</span> <span class="nn">nepi.util.sshfuncs</span> <span class="kn">import</span> <span class="n">ProcStatus</span>
+<span class="kn">from</span> <span class="nn">nepi.util.timefuncs</span> <span class="kn">import</span> <span class="n">tnow</span><span class="p">,</span> <span class="n">tdiffsec</span>
+
+<span class="kn">import</span> <span class="nn">re</span>
+<span class="kn">import</span> <span class="nn">socket</span>
+<span class="kn">import</span> <span class="nn">time</span>
+<span class="kn">import</span> <span class="nn">os</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="LinuxGRETunnel"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.gretunnel.LinuxGRETunnel">[docs]</a><span class="k">class</span> <span class="nc">LinuxGRETunnel</span><span class="p">(</span><span class="n">LinuxTunnel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;linux::GRETunnel&quot;</span>
+    <span class="n">_help</span> <span class="o">=</span> <span class="s">&quot;Constructs a tunnel between two Linux endpoints using a UDP connection &quot;</span>
+
+<div class="viewcode-block" id="LinuxGRETunnel.log_message"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.gretunnel.LinuxGRETunnel.log_message">[docs]</a>    <span class="k">def</span> <span class="nf">log_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s">&quot; guid </span><span class="si">%d</span><span class="s"> - GRE tunnel </span><span class="si">%s</span><span class="s"> - </span><span class="si">%s</span><span class="s"> - </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">,</span> 
+                <span class="bp">self</span><span class="o">.</span><span class="n">endpoint1</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;hostname&quot;</span><span class="p">),</span> 
+                <span class="bp">self</span><span class="o">.</span><span class="n">endpoint2</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;hostname&quot;</span><span class="p">),</span> 
+                <span class="n">msg</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxGRETunnel.get_endpoints"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.gretunnel.LinuxGRETunnel.get_endpoints">[docs]</a>    <span class="k">def</span> <span class="nf">get_endpoints</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the list of RM that are endpoints to the tunnel </span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">connected</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="k">for</span> <span class="n">guid</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">connections</span><span class="p">:</span>
+            <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+            <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">rm</span><span class="p">,</span> <span class="s">&quot;gre_connect&quot;</span><span class="p">):</span>
+                <span class="n">connected</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">rm</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">connected</span>
+</div>
+<div class="viewcode-block" id="LinuxGRETunnel.initiate_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.gretunnel.LinuxGRETunnel.initiate_connection">[docs]</a>    <span class="k">def</span> <span class="nf">initiate_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="p">):</span>
+        <span class="c"># Return the command to execute to initiate the connection to the</span>
+        <span class="c"># other endpoint</span>
+        <span class="n">connection_run_home</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">(</span><span class="n">endpoint</span><span class="p">)</span>
+        <span class="n">connection_app_home</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">(</span><span class="n">endpoint</span><span class="p">)</span>
+        <span class="n">data</span> <span class="o">=</span> <span class="n">endpoint</span><span class="o">.</span><span class="n">gre_connect</span><span class="p">(</span><span class="n">remote_endpoint</span><span class="p">,</span> 
+                <span class="n">connection_app_home</span><span class="p">,</span>
+                <span class="n">connection_run_home</span><span class="p">)</span> 
+        <span class="k">return</span> <span class="n">data</span>
+</div>
+<div class="viewcode-block" id="LinuxGRETunnel.establish_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.gretunnel.LinuxGRETunnel.establish_connection">[docs]</a>    <span class="k">def</span> <span class="nf">establish_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
+        <span class="k">pass</span>
+</div>
+<div class="viewcode-block" id="LinuxGRETunnel.verify_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.gretunnel.LinuxGRETunnel.verify_connection">[docs]</a>    <span class="k">def</span> <span class="nf">verify_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="p">):</span>
+        <span class="n">remote_ip</span> <span class="o">=</span> <span class="n">socket</span><span class="o">.</span><span class="n">gethostbyname</span><span class="p">(</span><span class="n">remote_endpoint</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;hostname&quot;</span><span class="p">))</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot;ping -c 4 </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">remote_ip</span>
+        <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="n">endpoint</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">command</span><span class="p">,</span>
+                <span class="n">blocking</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+
+        <span class="n">m</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="s">&quot;(\d+)% packet loss&quot;</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">out</span><span class="p">))</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">m</span> <span class="ow">or</span> <span class="nb">int</span><span class="p">(</span><span class="n">m</span><span class="o">.</span><span class="n">groups</span><span class="p">()[</span><span class="mi">0</span><span class="p">])</span> <span class="o">==</span> <span class="mi">100</span><span class="p">:</span>
+             <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Error establishing GRE Tunnel&quot;</span>
+             <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+             <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+</div>
+<div class="viewcode-block" id="LinuxGRETunnel.terminate_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.gretunnel.LinuxGRETunnel.terminate_connection">[docs]</a>    <span class="k">def</span> <span class="nf">terminate_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="p">):</span>
+        <span class="k">pass</span>
+</div>
+<div class="viewcode-block" id="LinuxGRETunnel.check_state_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.gretunnel.LinuxGRETunnel.check_state_connection">[docs]</a>    <span class="k">def</span> <span class="nf">check_state_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">pass</span>
+</div>
+<div class="viewcode-block" id="LinuxGRETunnel.valid_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.gretunnel.LinuxGRETunnel.valid_connection">[docs]</a>    <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="c"># TODO: Validate!</span>
+        <span class="k">return</span> <span class="bp">True</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/interface.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/interface.html
new file mode 100644 (file)
index 0000000..d1a91d1
--- /dev/null
@@ -0,0 +1,402 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.interface &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.interface</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Types</span><span class="p">,</span> <span class="n">Flags</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.node</span> <span class="kn">import</span> <span class="n">LinuxNode</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.channel</span> <span class="kn">import</span> <span class="n">LinuxChannel</span>
+
+<span class="kn">import</span> <span class="nn">collections</span>
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">random</span>
+<span class="kn">import</span> <span class="nn">re</span>
+<span class="kn">import</span> <span class="nn">tempfile</span>
+<span class="kn">import</span> <span class="nn">time</span>
+
+<span class="c"># TODO: </span>
+<span class="c">#     - check UP, MTU attributes!</span>
+<span class="c">#     - clean up code and test!</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="LinuxInterface"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.interface.LinuxInterface">[docs]</a><span class="k">class</span> <span class="nc">LinuxInterface</span><span class="p">(</span><span class="n">ResourceManager</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;linux::Interface&quot;</span>
+    <span class="n">_help</span> <span class="o">=</span> <span class="s">&quot;Controls network devices on Linux hosts through the ifconfig tool&quot;</span>
+    <span class="n">_platform</span> <span class="o">=</span> <span class="s">&quot;linux&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">ip4</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ip4&quot;</span><span class="p">,</span> <span class="s">&quot;IPv4 Address&quot;</span><span class="p">,</span>
+              <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">ip6</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ip6&quot;</span><span class="p">,</span> <span class="s">&quot;IPv6 Address&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">mac</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;mac&quot;</span><span class="p">,</span> <span class="s">&quot;MAC Address&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">mask4</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;mask4&quot;</span><span class="p">,</span> <span class="s">&quot;IPv4 network mask&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">mask6</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;mask6&quot;</span><span class="p">,</span> <span class="s">&quot;IPv6 network mask&quot;</span><span class="p">,</span>
+                <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">mtu</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;mtu&quot;</span><span class="p">,</span> <span class="s">&quot;Maximum transmition unit for device&quot;</span><span class="p">,</span>
+                <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">)</span>
+
+        <span class="n">devname</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;deviceName&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;Name of the network interface (e.g. eth0, wlan0, etc)&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">up</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;up&quot;</span><span class="p">,</span> <span class="s">&quot;Link up&quot;</span><span class="p">,</span> <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">)</span>
+
+        <span class="n">tear_down</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;tearDown&quot;</span><span class="p">,</span> <span class="s">&quot;Bash script to be executed before &quot;</span> <span class="o">+</span> \
+                <span class="s">&quot;releasing the resource&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ip4</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ip6</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">mac</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">mask4</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">mask6</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">mtu</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">devname</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">up</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">tear_down</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxInterface</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_configured</span> <span class="o">=</span> <span class="bp">False</span>
+        
+        <span class="bp">self</span><span class="o">.</span><span class="n">add_set_hooks</span><span class="p">()</span>
+
+<div class="viewcode-block" id="LinuxInterface.log_message"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.interface.LinuxInterface.log_message">[docs]</a>    <span class="k">def</span> <span class="nf">log_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s">&quot; guid </span><span class="si">%d</span><span class="s"> - host </span><span class="si">%s</span><span class="s"> - </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">,</span> 
+                <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;hostname&quot;</span><span class="p">),</span> <span class="n">msg</span><span class="p">)</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxInterface.node"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.interface.LinuxInterface.node">[docs]</a>    <span class="k">def</span> <span class="nf">node</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">LinuxNode</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+        <span class="k">if</span> <span class="n">node</span><span class="p">:</span> <span class="k">return</span> <span class="n">node</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+        <span class="k">return</span> <span class="bp">None</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxInterface.channel"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.interface.LinuxInterface.channel">[docs]</a>    <span class="k">def</span> <span class="nf">channel</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">chan</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">LinuxChannel</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+        <span class="k">if</span> <span class="n">chan</span><span class="p">:</span> <span class="k">return</span> <span class="n">chan</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+        <span class="k">return</span> <span class="bp">None</span>
+</div>
+<div class="viewcode-block" id="LinuxInterface.do_discover"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.interface.LinuxInterface.do_discover">[docs]</a>    <span class="k">def</span> <span class="nf">do_discover</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">devname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;deviceName&quot;</span><span class="p">)</span>
+        <span class="n">ip4</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ip4&quot;</span><span class="p">)</span>
+        <span class="n">ip6</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ip4&quot;</span><span class="p">)</span>
+        <span class="n">mac</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;mac&quot;</span><span class="p">)</span>
+        <span class="n">mask4</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;mask4&quot;</span><span class="p">)</span>
+        <span class="n">mask6</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;mask6&quot;</span><span class="p">)</span>
+        <span class="n">mtu</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;mtu&quot;</span><span class="p">)</span>
+
+        <span class="c"># Get current interfaces information</span>
+        <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s">&quot;ifconfig&quot;</span><span class="p">,</span> <span class="n">sudo</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span> <span class="n">tty</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">err</span> <span class="ow">and</span> <span class="n">proc</span><span class="o">.</span><span class="n">poll</span><span class="p">():</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Error retrieving interface information &quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s"> - </span><span class="si">%s</span><span class="s"> - </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+        
+        <span class="c"># Check if an interface is found matching the RM attributes</span>
+        <span class="n">ifaces</span> <span class="o">=</span> <span class="n">out</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\n\n</span><span class="s">&quot;</span><span class="p">)</span>
+
+        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">ifaces</span><span class="p">:</span>
+            <span class="n">m</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">findall</span><span class="p">(</span><span class="s">&quot;(\w+)\s+Link\s+encap:\w+(\s+HWaddr\s+(([0-9a-fA-F]{2}:?){6}))?(\s+inet\s+addr:((\d+\.?){4}).+Mask:(\d+\.\d+\.\d+\.\d+))?(.+inet6\s+addr:\s+([0-9a-fA-F:.]+)/(\d+))?(.+(UP))?(.+MTU:(\d+))?&quot;</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">DOTALL</span><span class="p">)</span>
+            
+            <span class="n">m</span> <span class="o">=</span> <span class="n">m</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+            <span class="n">dn</span> <span class="o">=</span> <span class="n">m</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+            <span class="n">mc</span> <span class="o">=</span> <span class="n">m</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
+            <span class="n">i4</span> <span class="o">=</span> <span class="n">m</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span>
+            <span class="n">msk4</span> <span class="o">=</span> <span class="n">m</span><span class="p">[</span><span class="mi">7</span><span class="p">]</span>
+            <span class="n">i6</span> <span class="o">=</span> <span class="n">m</span><span class="p">[</span><span class="mi">9</span><span class="p">]</span>
+            <span class="n">msk6</span> <span class="o">=</span> <span class="n">m</span><span class="p">[</span><span class="mi">10</span><span class="p">]</span>
+            <span class="n">up</span> <span class="o">=</span> <span class="bp">True</span> <span class="k">if</span> <span class="n">m</span><span class="p">[</span><span class="mi">12</span><span class="p">]</span> <span class="k">else</span> <span class="bp">False</span>
+            <span class="n">mu</span> <span class="o">=</span> <span class="n">m</span><span class="p">[</span><span class="mi">14</span><span class="p">]</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;Found interface </span><span class="si">%(devname)s</span><span class="s"> with MAC </span><span class="si">%(mac)s</span><span class="s">,&quot;</span>
+                    <span class="s">&quot;IPv4 </span><span class="si">%(ipv4)s</span><span class="s"> </span><span class="si">%(mask4)s</span><span class="s"> IPv6 </span><span class="si">%(ipv6)s</span><span class="s">/</span><span class="si">%(mask6)s</span><span class="s"> </span><span class="si">%(up)s</span><span class="s"> </span><span class="si">%(mtu)s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">({</span>
+                <span class="s">&#39;devname&#39;</span><span class="p">:</span> <span class="n">dn</span><span class="p">,</span>
+                <span class="s">&#39;mac&#39;</span><span class="p">:</span> <span class="n">mc</span><span class="p">,</span>
+                <span class="s">&#39;ipv4&#39;</span><span class="p">:</span> <span class="n">i4</span><span class="p">,</span>
+                <span class="s">&#39;mask4&#39;</span><span class="p">:</span> <span class="n">msk4</span><span class="p">,</span>
+                <span class="s">&#39;ipv6&#39;</span><span class="p">:</span> <span class="n">i6</span><span class="p">,</span>
+                <span class="s">&#39;mask6&#39;</span><span class="p">:</span> <span class="n">msk6</span><span class="p">,</span>
+                <span class="s">&#39;up&#39;</span><span class="p">:</span> <span class="n">up</span><span class="p">,</span>
+                <span class="s">&#39;mtu&#39;</span><span class="p">:</span> <span class="n">mu</span>
+                <span class="p">})</span> <span class="p">)</span>
+
+            <span class="c"># If the user didn&#39;t provide information we take the first </span>
+            <span class="c"># interface that is UP</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="n">devname</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">ip4</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">ip6</span> <span class="ow">and</span> <span class="n">up</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_configured</span> <span class="o">=</span> <span class="bp">True</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">load_configuration</span><span class="p">(</span><span class="n">dn</span><span class="p">,</span> <span class="n">mc</span><span class="p">,</span> <span class="n">i4</span><span class="p">,</span> <span class="n">msk4</span><span class="p">,</span> <span class="n">i6</span><span class="p">,</span> <span class="n">msk6</span><span class="p">,</span> <span class="n">mu</span><span class="p">,</span> <span class="n">up</span><span class="p">)</span>
+                <span class="k">break</span>
+
+            <span class="c"># If the user provided ipv4 or ipv6 matching that of an interface</span>
+            <span class="c"># load the interface info</span>
+            <span class="k">if</span> <span class="p">(</span><span class="n">ip4</span> <span class="ow">and</span> <span class="n">ip4</span> <span class="o">==</span> <span class="n">i4</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">ip6</span> <span class="ow">and</span> <span class="n">ip6</span> <span class="o">==</span> <span class="n">i6</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_configured</span> <span class="o">=</span> <span class="bp">True</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">load_configuration</span><span class="p">(</span><span class="n">dn</span><span class="p">,</span> <span class="n">mc</span><span class="p">,</span> <span class="n">i4</span><span class="p">,</span> <span class="n">msk4</span><span class="p">,</span> <span class="n">i6</span><span class="p">,</span> <span class="n">msk6</span><span class="p">,</span> <span class="n">mu</span><span class="p">,</span> <span class="n">up</span><span class="p">)</span>
+                <span class="k">break</span>
+
+            <span class="c"># If the user provided the device name we load the associated info</span>
+            <span class="k">if</span> <span class="n">devname</span> <span class="ow">and</span> <span class="n">devname</span> <span class="o">==</span> <span class="n">dn</span><span class="p">:</span>
+                <span class="k">if</span> <span class="p">((</span><span class="n">ip4</span> <span class="ow">and</span> <span class="n">ip4</span> <span class="o">==</span> <span class="n">i4</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="n">ipv6</span> <span class="ow">and</span> <span class="n">ip6</span> <span class="o">==</span> <span class="n">i6</span><span class="p">))</span> <span class="ow">or</span> \
+                        <span class="ow">not</span> <span class="p">(</span><span class="n">ip4</span> <span class="ow">or</span> <span class="n">ip6</span><span class="p">):</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">_configured</span> <span class="o">=</span> <span class="bp">True</span>
+               
+                <span class="c"># If the user gave a different ip than the existing, asume ip </span>
+                <span class="c"># needs to be changed</span>
+                <span class="n">i4</span> <span class="o">=</span> <span class="n">ip4</span> <span class="ow">or</span> <span class="n">i4</span>
+                <span class="n">i6</span> <span class="o">=</span> <span class="n">ip6</span> <span class="ow">or</span> <span class="n">i6</span>
+                <span class="n">mu</span> <span class="o">=</span> <span class="n">mtu</span> <span class="ow">or</span> <span class="n">mu</span> 
+
+                <span class="bp">self</span><span class="o">.</span><span class="n">load_configuration</span><span class="p">(</span><span class="n">dn</span><span class="p">,</span> <span class="n">mc</span><span class="p">,</span> <span class="n">i4</span><span class="p">,</span> <span class="n">msk4</span><span class="p">,</span> <span class="n">i6</span><span class="p">,</span> <span class="n">msk6</span><span class="p">,</span> <span class="n">mu</span><span class="p">,</span> <span class="n">up</span><span class="p">)</span>
+                <span class="k">break</span>
+       
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;deviceName&quot;</span><span class="p">):</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Unable to resolve interface &quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxInterface</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="LinuxInterface.do_provision"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.interface.LinuxInterface.do_provision">[docs]</a>    <span class="k">def</span> <span class="nf">do_provision</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">devname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;deviceName&quot;</span><span class="p">)</span>
+        <span class="n">ip4</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ip4&quot;</span><span class="p">)</span>
+        <span class="n">ip6</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ip4&quot;</span><span class="p">)</span>
+        <span class="n">mac</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;mac&quot;</span><span class="p">)</span>
+        <span class="n">mask4</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;mask4&quot;</span><span class="p">)</span>
+        <span class="n">mask6</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;mask6&quot;</span><span class="p">)</span>
+        <span class="n">mtu</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;mtu&quot;</span><span class="p">)</span>
+
+        <span class="c"># Must configure interface if configuration is required</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_configured</span><span class="p">:</span>
+            <span class="n">cmd</span> <span class="o">=</span> <span class="s">&quot;ifconfig </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">devname</span>
+
+            <span class="k">if</span> <span class="n">ip4</span> <span class="ow">and</span> <span class="n">mask4</span><span class="p">:</span>
+                <span class="n">cmd</span> <span class="o">+=</span> <span class="s">&quot; </span><span class="si">%(ip4)s</span><span class="s"> netmask </span><span class="si">%(mask4)s</span><span class="s"> broadcast </span><span class="si">%(bcast)s</span><span class="s"> up&quot;</span> <span class="o">%</span> <span class="p">({</span>
+                    <span class="s">&#39;ip4&#39;</span><span class="p">:</span> <span class="n">ip4</span><span class="p">,</span>
+                    <span class="s">&#39;mask4&#39;</span><span class="p">:</span> <span class="n">mask4</span><span class="p">,</span>
+                    <span class="s">&#39;bcast&#39;</span><span class="p">:</span> <span class="n">bcast</span><span class="p">})</span>
+            <span class="k">if</span> <span class="n">mtu</span><span class="p">:</span>
+                <span class="n">cmd</span> <span class="o">+=</span> <span class="s">&quot; mtu </span><span class="si">%d</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="n">mtu</span>
+
+            <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="n">sudo</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="n">err</span> <span class="ow">and</span> <span class="n">proc</span><span class="o">.</span><span class="n">poll</span><span class="p">():</span>
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Error configuring interface with command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">cmd</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s"> - </span><span class="si">%s</span><span class="s"> - </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="n">ip6</span> <span class="ow">and</span> <span class="n">mask6</span><span class="p">:</span>
+                <span class="n">cmd</span> <span class="o">=</span> <span class="s">&quot;ifconfig </span><span class="si">%(devname)s</span><span class="s"> inet6 add </span><span class="si">%(ip6)s</span><span class="s">/</span><span class="si">%(mask6)d</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">({</span>
+                        <span class="s">&#39;devname&#39;</span><span class="p">:</span> <span class="n">devname</span><span class="p">,</span>
+                        <span class="s">&#39;ip6&#39;</span><span class="p">:</span> <span class="n">ip6</span><span class="p">,</span>
+                        <span class="s">&#39;mask6&#39;</span><span class="p">:</span> <span class="n">mask6</span><span class="p">})</span>
+
+            <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="n">sudo</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="n">err</span> <span class="ow">and</span> <span class="n">proc</span><span class="o">.</span><span class="n">poll</span><span class="p">():</span>
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Error seting ipv6 for interface using command &#39;</span><span class="si">%s</span><span class="s">&#39; &quot;</span> <span class="o">%</span> <span class="n">cmd</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s"> - </span><span class="si">%s</span><span class="s"> - </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxInterface</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_provision</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="LinuxInterface.do_deploy"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.interface.LinuxInterface.do_deploy">[docs]</a>    <span class="k">def</span> <span class="nf">do_deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="c"># Wait until node is provisioned</span>
+        <span class="n">node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span>
+        <span class="n">chan</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">channel</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">node</span> <span class="ow">or</span> <span class="n">node</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">PROVISIONED</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">deploy</span><span class="p">)</span>
+        <span class="k">elif</span> <span class="ow">not</span> <span class="n">chan</span> <span class="ow">or</span> <span class="n">chan</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">deploy</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="c"># Verify if the interface exists in node. If not, configue</span>
+            <span class="c"># if yes, load existing configuration</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_provision</span><span class="p">()</span>
+
+            <span class="nb">super</span><span class="p">(</span><span class="n">LinuxInterface</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_deploy</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="LinuxInterface.do_release"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.interface.LinuxInterface.do_release">[docs]</a>    <span class="k">def</span> <span class="nf">do_release</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">tear_down</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;tearDown&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">tear_down</span><span class="p">:</span>   
+            <span class="bp">self</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">tear_down</span><span class="p">)</span>
+
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxInterface</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_release</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="LinuxInterface.valid_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.interface.LinuxInterface.valid_connection">[docs]</a>    <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="c"># TODO: Validate!</span>
+        <span class="k">return</span> <span class="bp">True</span>
+</div>
+<div class="viewcode-block" id="LinuxInterface.load_configuration"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.interface.LinuxInterface.load_configuration">[docs]</a>    <span class="k">def</span> <span class="nf">load_configuration</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">devname</span><span class="p">,</span> <span class="n">mac</span><span class="p">,</span> <span class="n">ip4</span><span class="p">,</span> <span class="n">mask4</span><span class="p">,</span> <span class="n">ip6</span><span class="p">,</span> <span class="n">mask6</span><span class="p">,</span> <span class="n">mtu</span><span class="p">,</span> <span class="n">up</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;deviceName&quot;</span><span class="p">,</span> <span class="n">devname</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;mac&quot;</span><span class="p">,</span> <span class="n">mac</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;ip4&quot;</span><span class="p">,</span> <span class="n">ip4</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;mask4&quot;</span><span class="p">,</span> <span class="n">mask4</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;ip6&quot;</span><span class="p">,</span> <span class="n">ip6</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;mask6&quot;</span><span class="p">,</span> <span class="n">mask6</span><span class="p">)</span>
+
+        <span class="c"># set the following without validating or triggering hooks</span>
+        <span class="n">attr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attrs</span><span class="p">[</span><span class="s">&quot;up&quot;</span><span class="p">]</span>
+        <span class="n">attr</span><span class="o">.</span><span class="n">_value</span> <span class="o">=</span> <span class="n">up</span>
+        <span class="n">attr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attrs</span><span class="p">[</span><span class="s">&quot;mtu&quot;</span><span class="p">]</span>
+        <span class="n">attr</span><span class="o">.</span><span class="n">_value</span> <span class="o">=</span> <span class="n">mtu</span> 
+</div>
+<div class="viewcode-block" id="LinuxInterface.add_set_hooks"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.interface.LinuxInterface.add_set_hooks">[docs]</a>    <span class="k">def</span> <span class="nf">add_set_hooks</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">attrup</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attrs</span><span class="p">[</span><span class="s">&quot;up&quot;</span><span class="p">]</span>
+        <span class="n">attrup</span><span class="o">.</span><span class="n">set_hook</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">set_hook_up</span>
+
+        <span class="n">attrmtu</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attrs</span><span class="p">[</span><span class="s">&quot;mtu&quot;</span><span class="p">]</span>
+        <span class="n">attrmtu</span><span class="o">.</span><span class="n">set_hook</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">set_hook_mtu</span>
+</div>
+<div class="viewcode-block" id="LinuxInterface.set_hook_up"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.interface.LinuxInterface.set_hook_up">[docs]</a>    <span class="k">def</span> <span class="nf">set_hook_up</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">oldval</span><span class="p">,</span> <span class="n">newval</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">NEW</span> <span class="ow">or</span> <span class="n">oldval</span> <span class="o">==</span> <span class="n">newval</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">oldval</span>
+
+        <span class="c"># configure interface up</span>
+        <span class="k">if</span> <span class="n">newval</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">cmd</span> <span class="o">=</span> <span class="s">&quot;ifup </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;deviceName&quot;</span><span class="p">)</span>
+        <span class="k">elif</span> <span class="n">newval</span> <span class="o">==</span> <span class="bp">False</span><span class="p">:</span>
+            <span class="n">cmd</span> <span class="o">=</span> <span class="s">&quot;ifdown </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;deviceName&quot;</span><span class="p">)</span>
+
+        <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="n">sudo</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">err</span> <span class="ow">and</span> <span class="n">proc</span><span class="o">.</span><span class="n">poll</span><span class="p">():</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Error setting interface up/down using command &#39;</span><span class="si">%s</span><span class="s">&#39; &quot;</span> <span class="o">%</span> <span class="n">cmd</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">err</span><span class="p">,</span> <span class="n">out</span><span class="p">)</span>
+            <span class="k">return</span> <span class="n">oldval</span>
+        
+        <span class="k">return</span> <span class="n">newval</span>
+</div>
+<div class="viewcode-block" id="LinuxInterface.set_hook_mtu"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.interface.LinuxInterface.set_hook_mtu">[docs]</a>    <span class="k">def</span> <span class="nf">set_hook_mtu</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">oldval</span><span class="p">,</span> <span class="n">newval</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">NEW</span> <span class="ow">or</span> <span class="n">oldval</span> <span class="o">==</span> <span class="n">newval</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">oldval</span>
+
+        <span class="n">cmd</span> <span class="o">=</span> <span class="s">&quot;ifconfig </span><span class="si">%s</span><span class="s"> mtu </span><span class="si">%d</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;deviceName&quot;</span><span class="p">),</span> <span class="n">newval</span><span class="p">)</span>
+
+        <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="n">sudo</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">err</span> <span class="ow">and</span> <span class="n">proc</span><span class="o">.</span><span class="n">poll</span><span class="p">():</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Error setting interface MTU using command &#39;</span><span class="si">%s</span><span class="s">&#39; &quot;</span> <span class="o">%</span> <span class="n">cmd</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">err</span><span class="p">,</span> <span class="n">out</span><span class="p">)</span>
+            <span class="k">return</span>  <span class="n">oldval</span>
+        
+        <span class="k">return</span> <span class="n">newval</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/mtr.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/mtr.html
new file mode 100644 (file)
index 0000000..b7ff738
--- /dev/null
@@ -0,0 +1,240 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.mtr &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.mtr</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span><span class="p">,</span> <span class="n">ResourceState</span> 
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.application</span> <span class="kn">import</span> <span class="n">LinuxApplication</span>
+<span class="kn">from</span> <span class="nn">nepi.util.timefuncs</span> <span class="kn">import</span> <span class="n">tnow</span>
+
+<span class="kn">import</span> <span class="nn">os</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="LinuxMtr"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.mtr.LinuxMtr">[docs]</a><span class="k">class</span> <span class="nc">LinuxMtr</span><span class="p">(</span><span class="n">LinuxApplication</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;linux::Mtr&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">report_cycles</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;reportCycles&quot;</span><span class="p">,</span>
+            <span class="s">&quot;sets mtr --report-cycles (-c) option. Determines the number of &quot;</span>
+            <span class="s">&quot;pings sent to determine both machines in the networks. Each &quot;</span>
+            <span class="s">&quot;cycle lasts one sencond.&quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">no_dns</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;noDns&quot;</span><span class="p">,</span>
+            <span class="s">&quot;sets mtr --no-dns (-n) option. Forces mtr to display IPs intead of &quot;</span>
+            <span class="s">&quot;trying to resolve to host names &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">address</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;address&quot;</span><span class="p">,</span>
+            <span class="s">&quot;sets mtr --address (-a) option. Binds the socket to send outgoing &quot;</span>
+            <span class="s">&quot;packets to the interface of the specified address, so that any &quot;</span>
+            <span class="s">&quot;any packets are sent through this interface. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">interval</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;interval&quot;</span><span class="p">,</span>
+            <span class="s">&quot;sets mtr --interval (-i) option. Specifies the number of seconds &quot;</span>
+            <span class="s">&quot;between ICMP ECHO requests. Default value is one second &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">countinuous</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;continuous&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Run mtr in a while loop&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">print_timestamp</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;printTimestamp&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Print timestamp before running mtr&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">target</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;target&quot;</span><span class="p">,</span>
+            <span class="s">&quot;mtr target host (host that will be pinged)&quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">early_start</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;earlyStart&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Start ping as early as deployment. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">report_cycles</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">no_dns</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">address</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">interval</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">countinuous</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">print_timestamp</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">early_start</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxMtr</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;mtr-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_sudo_kill</span> <span class="o">=</span> <span class="bp">True</span>
+
+<div class="viewcode-block" id="LinuxMtr.upload_start_command"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.mtr.LinuxMtr.upload_start_command">[docs]</a>    <span class="k">def</span> <span class="nf">upload_start_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxMtr</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">upload_start_command</span><span class="p">()</span>
+        
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;earlyStart&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_run_in_background</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="LinuxMtr.do_deploy"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.mtr.LinuxMtr.do_deploy">[docs]</a>    <span class="k">def</span> <span class="nf">do_deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_start_command</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">,</span> <span class="s">&quot;PATH=$PATH:/usr/sbin/&quot;</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;depends&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;depends&quot;</span><span class="p">,</span> <span class="s">&quot;mtr&quot;</span><span class="p">)</span>
+
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxMtr</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_deploy</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="LinuxMtr.do_start"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.mtr.LinuxMtr.do_start">[docs]</a>    <span class="k">def</span> <span class="nf">do_start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;earlyStart&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+                <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Starting command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
+
+                <span class="bp">self</span><span class="o">.</span><span class="n">set_started</span><span class="p">()</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Failed to execute command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">command</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+        <span class="k">else</span><span class="p">:</span>
+           <span class="nb">super</span><span class="p">(</span><span class="n">LinuxMtr</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_start</span><span class="p">()</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_start_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;continuous&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;while true; do &quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;printTimestamp&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;&quot;&quot;echo &quot;`date +&#39;%Y%m</span><span class="si">%d</span><span class="s">%H%M%S&#39;`&quot;;&quot;&quot;&quot;</span><span class="p">)</span>
+        <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;sudo -S mtr --report&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;reportCycles&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-c </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;reportCycles&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;noDns&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-n&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;address&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-a </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;address&quot;</span><span class="p">))</span>
+        <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;target&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;continuous&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;; done &quot;</span><span class="p">)</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">command</span>
+
+<div class="viewcode-block" id="LinuxMtr.valid_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.mtr.LinuxMtr.valid_connection">[docs]</a>    <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="c"># TODO: Validate!</span>
+        <span class="k">return</span> <span class="bp">True</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/netns/netnsclient.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/netns/netnsclient.html
new file mode 100644 (file)
index 0000000..63d53cc
--- /dev/null
@@ -0,0 +1,198 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.netns.netnsclient &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.netns.netnsclient</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">import</span> <span class="nn">base64</span>
+<span class="kn">import</span> <span class="nn">cPickle</span>
+<span class="kn">import</span> <span class="nn">errno</span>
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">socket</span>
+<span class="kn">import</span> <span class="nn">time</span>
+<span class="kn">import</span> <span class="nn">weakref</span>
+
+<span class="kn">from</span> <span class="nn">optparse</span> <span class="kn">import</span> <span class="n">OptionParser</span><span class="p">,</span> <span class="n">SUPPRESS_HELP</span>
+
+<span class="kn">from</span> <span class="nn">nepi.resources.netns.netnsclient</span> <span class="kn">import</span> <span class="n">NetNSClient</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.netns.netnsserver</span> <span class="kn">import</span> <span class="n">NetNSWrapperMessage</span>
+
+<div class="viewcode-block" id="LinuxNetNSClient"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsclient.LinuxNetNSClient">[docs]</a><span class="k">class</span> <span class="nc">LinuxNetNSClient</span><span class="p">(</span><span class="n">NetNSClient</span><span class="p">):</span>
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">emulation</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxNetNSClient</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_emulation</span> <span class="o">=</span> <span class="n">weakref</span><span class="o">.</span><span class="n">ref</span><span class="p">(</span><span class="n">emulation</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">_socat_proc</span> <span class="o">=</span> <span class="bp">None</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNetNSClient.emulation"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsclient.LinuxNetNSClient.emulation">[docs]</a>    <span class="k">def</span> <span class="nf">emulation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_emulation</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="LinuxNetNSClient.send_msg"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsclient.LinuxNetNSClient.send_msg">[docs]</a>    <span class="k">def</span> <span class="nf">send_msg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg_type</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="n">msg</span> <span class="o">=</span> <span class="p">[</span><span class="n">msg_type</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">]</span>
+
+        <span class="k">def</span> <span class="nf">encode</span><span class="p">(</span><span class="n">item</span><span class="p">):</span>
+            <span class="n">item</span> <span class="o">=</span> <span class="n">cPickle</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">item</span><span class="p">)</span>
+            <span class="k">return</span> <span class="n">base64</span><span class="o">.</span><span class="n">b64encode</span><span class="p">(</span><span class="n">item</span><span class="p">)</span>
+
+        <span class="n">encoded</span> <span class="o">=</span> <span class="s">&quot;|&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="n">encode</span><span class="p">,</span> <span class="n">msg</span><span class="p">))</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">emulation</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;hostname&quot;</span><span class="p">)</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&#39;localhost&#39;</span><span class="p">,</span> <span class="s">&#39;127.0.0.1&#39;</span><span class="p">]:</span>
+            <span class="n">sock</span> <span class="o">=</span> <span class="n">socket</span><span class="o">.</span><span class="n">socket</span><span class="p">(</span><span class="n">socket</span><span class="o">.</span><span class="n">AF_UNIX</span><span class="p">,</span> <span class="n">socket</span><span class="o">.</span><span class="n">SOCK_STREAM</span><span class="p">)</span>
+            <span class="n">sock</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">emulation</span><span class="o">.</span><span class="n">remote_socket</span><span class="p">)</span>
+            <span class="n">sock</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="s">&quot;</span><span class="si">%s</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">encoded</span><span class="p">)</span>
+            <span class="n">reply</span> <span class="o">=</span> <span class="n">sock</span><span class="o">.</span><span class="n">recv</span><span class="p">(</span><span class="mi">1024</span><span class="p">)</span>
+            <span class="n">sock</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">command</span> <span class="o">=</span> <span class="p">(</span> <span class="s">&quot;python -c &#39;import socket;&quot;</span>
+                <span class="s">&quot;sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM);&quot;</span>
+                <span class="s">&quot;sock.connect(</span><span class="se">\&quot;</span><span class="si">%(socket_addr)s</span><span class="se">\&quot;</span><span class="s">);&quot;</span>
+                <span class="s">&quot;msg = </span><span class="se">\&quot;</span><span class="si">%(encoded_message)s</span><span class="se">\\</span><span class="s">n</span><span class="se">\&quot;</span><span class="s">;&quot;</span>
+                <span class="s">&quot;sock.send(msg);&quot;</span>
+                <span class="s">&quot;reply = sock.recv(1024);&quot;</span>
+                <span class="s">&quot;sock.close();&quot;</span>
+                <span class="s">&quot;print reply&#39;&quot;</span><span class="p">)</span> <span class="o">%</span> <span class="p">{</span>
+                    <span class="s">&quot;encoded_message&quot;</span><span class="p">:</span> <span class="n">encoded</span><span class="p">,</span>
+                    <span class="s">&quot;socket_addr&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">emulation</span><span class="o">.</span><span class="n">remote_socket</span><span class="p">,</span>
+                    <span class="p">}</span>
+
+            <span class="p">(</span><span class="n">reply</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">emulation</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> 
+                    <span class="n">with_lock</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span> 
+
+            <span class="k">if</span> <span class="p">(</span><span class="n">err</span> <span class="ow">and</span> <span class="n">proc</span><span class="o">.</span><span class="n">poll</span><span class="p">())</span> <span class="ow">or</span> <span class="n">reply</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="o">==</span> <span class="s">&quot;&quot;</span><span class="p">:</span>
+                <span class="n">msg</span> <span class="o">=</span> <span class="p">(</span><span class="s">&quot; Couldn&#39;t connect to remote socket </span><span class="si">%s</span><span class="s"> - REPLY: </span><span class="si">%s</span><span class="s"> &quot;</span>
+                      <span class="s">&quot;- ERROR: </span><span class="si">%s</span><span class="s"> &quot;</span><span class="p">)</span> <span class="o">%</span> <span class="p">(</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">emulation</span><span class="o">.</span><span class="n">remote_socket</span><span class="p">,</span> <span class="n">reply</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">emulation</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">reply</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+                   
+        <span class="n">reply</span> <span class="o">=</span> <span class="n">cPickle</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">base64</span><span class="o">.</span><span class="n">b64decode</span><span class="p">(</span><span class="n">reply</span><span class="p">))</span>
+
+        <span class="k">return</span> <span class="n">reply</span>
+</div>
+<div class="viewcode-block" id="LinuxNetNSClient.create"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsclient.LinuxNetNSClient.create">[docs]</a>    <span class="k">def</span> <span class="nf">create</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_msg</span><span class="p">(</span><span class="n">NetNSWrapperMessage</span><span class="o">.</span><span class="n">CREATE</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxNetNSClient.invoke"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsclient.LinuxNetNSClient.invoke">[docs]</a>    <span class="k">def</span> <span class="nf">invoke</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_msg</span><span class="p">(</span><span class="n">NetNSWrapperMessage</span><span class="o">.</span><span class="n">INVOKE</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxNetNSClient.set"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsclient.LinuxNetNSClient.set">[docs]</a>    <span class="k">def</span> <span class="nf">set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_msg</span><span class="p">(</span><span class="n">NetNSWrapperMessage</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxNetNSClient.get"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsclient.LinuxNetNSClient.get">[docs]</a>    <span class="k">def</span> <span class="nf">get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_msg</span><span class="p">(</span><span class="n">NetNSWrapperMessage</span><span class="o">.</span><span class="n">GET</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxNetNSClient.flush"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsclient.LinuxNetNSClient.flush">[docs]</a>    <span class="k">def</span> <span class="nf">flush</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_msg</span><span class="p">(</span><span class="n">NetNSWrapperMessage</span><span class="o">.</span><span class="n">FLUSH</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxNetNSClient.shutdown"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsclient.LinuxNetNSClient.shutdown">[docs]</a>    <span class="k">def</span> <span class="nf">shutdown</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_msg</span><span class="p">(</span><span class="n">NetNSWrapperMessage</span><span class="o">.</span><span class="n">SHUTDOWN</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+        <span class="k">except</span><span class="p">:</span>
+            <span class="k">pass</span>
+
+        <span class="k">return</span> <span class="bp">None</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/netns/netnsemulation.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/netns/netnsemulation.html
new file mode 100644 (file)
index 0000000..1b3771e
--- /dev/null
@@ -0,0 +1,473 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.netns.netnsemulation &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.netns.netnsemulation</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.application</span> <span class="kn">import</span> <span class="n">LinuxApplication</span>
+<span class="kn">from</span> <span class="nn">nepi.util.timefuncs</span> <span class="kn">import</span> <span class="n">tnow</span><span class="p">,</span> <span class="n">tdiffsec</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.netns.netnsemulation</span> <span class="kn">import</span> <span class="n">NetNSEmulation</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.netns.netnsclient</span> <span class="kn">import</span> <span class="n">LinuxNetNSClient</span>
+
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">time</span>
+<span class="kn">import</span> <span class="nn">threading</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="LinuxNetNSEmulation"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation">[docs]</a><span class="k">class</span> <span class="nc">LinuxNetNSEmulation</span><span class="p">(</span><span class="n">LinuxApplication</span><span class="p">,</span> <span class="n">NetNSEmulation</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;linux::netns::Emulation&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">verbose</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;verbose&quot;</span><span class="p">,</span>
+            <span class="s">&quot;True to output debugging info for the client-server communication&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">enable_dump</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;enableDump&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Enable dumping the remote executed commands to a script &quot;</span>
+            <span class="s">&quot;in order to later reproduce and debug the experiment&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">version</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;version&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Version of netns to install from nsam repo&quot;</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;netns-dev&quot;</span><span class="p">,</span> 
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">enable_dump</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">verbose</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">version</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="n">LinuxApplication</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="n">NetNSEmulation</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">_client</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;netns-emu-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_socket_name</span> <span class="o">=</span> <span class="s">&quot;netns-</span><span class="si">%s</span><span class="s">.sock&quot;</span> <span class="o">%</span> <span class="n">os</span><span class="o">.</span><span class="n">urandom</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s">&#39;hex&#39;</span><span class="p">)</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNetNSEmulation.socket_name"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.socket_name">[docs]</a>    <span class="k">def</span> <span class="nf">socket_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_socket_name</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNetNSEmulation.remote_socket"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.remote_socket">[docs]</a>    <span class="k">def</span> <span class="nf">remote_socket</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">socket_name</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxNetNSEmulation.upload_sources"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.upload_sources">[docs]</a>    <span class="k">def</span> <span class="nf">upload_sources</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">src_dir</span><span class="p">,</span> <span class="s">&quot;netnswrapper&quot;</span><span class="p">))</span>
+
+        <span class="c"># upload wrapper python script</span>
+        <span class="n">wrapper</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">__file__</span><span class="p">),</span> <span class="s">&quot;..&quot;</span><span class="p">,</span> <span class="s">&quot;..&quot;</span><span class="p">,</span> <span class="s">&quot;netns&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;netnswrapper.py&quot;</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">upload</span><span class="p">(</span><span class="n">wrapper</span><span class="p">,</span>
+                <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">src_dir</span><span class="p">,</span> <span class="s">&quot;netnswrapper&quot;</span><span class="p">,</span> <span class="s">&quot;netnswrapper.py&quot;</span><span class="p">),</span>
+                <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">False</span><span class="p">)</span>
+
+        <span class="c"># upload wrapper debug python script</span>
+        <span class="n">wrapper_debug</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">__file__</span><span class="p">),</span> <span class="s">&quot;..&quot;</span><span class="p">,</span> <span class="s">&quot;..&quot;</span><span class="p">,</span> <span class="s">&quot;netns&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;netnswrapper_debug.py&quot;</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">upload</span><span class="p">(</span><span class="n">wrapper_debug</span><span class="p">,</span>
+                <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">src_dir</span><span class="p">,</span> <span class="s">&quot;netnswrapper&quot;</span><span class="p">,</span> <span class="s">&quot;netnswrapper_debug.py&quot;</span><span class="p">),</span>
+                <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">False</span><span class="p">)</span>
+
+        <span class="c"># upload server python script</span>
+        <span class="n">server</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">__file__</span><span class="p">),</span> <span class="s">&quot;..&quot;</span><span class="p">,</span> <span class="s">&quot;..&quot;</span><span class="p">,</span> <span class="s">&quot;netns&quot;</span><span class="p">,</span>
+                <span class="s">&quot;netnsserver.py&quot;</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">upload</span><span class="p">(</span><span class="n">server</span><span class="p">,</span>
+                <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">src_dir</span><span class="p">,</span> <span class="s">&quot;netnswrapper&quot;</span><span class="p">,</span> <span class="s">&quot;netnsserver.py&quot;</span><span class="p">),</span>
+                <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">False</span><span class="p">)</span>
+
+        <span class="c"># Upload user defined sources</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">src_dir</span><span class="p">,</span> <span class="s">&quot;netns&quot;</span><span class="p">))</span>
+        <span class="n">src_dir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">src_dir</span><span class="p">,</span> <span class="s">&quot;netns&quot;</span><span class="p">)</span>
+
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxNetNSEmulation</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">upload_sources</span><span class="p">(</span><span class="n">src_dir</span> <span class="o">=</span> <span class="n">src_dir</span><span class="p">)</span>
+    </div>
+<div class="viewcode-block" id="LinuxNetNSEmulation.upload_extra_sources"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.upload_extra_sources">[docs]</a>    <span class="k">def</span> <span class="nf">upload_extra_sources</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sources</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">src_dir</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">LinuxNetNSEmulation</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">upload_sources</span><span class="p">(</span>
+                <span class="n">sources</span> <span class="o">=</span> <span class="n">sources</span><span class="p">,</span> 
+                <span class="n">src_dir</span> <span class="o">=</span> <span class="n">src_dir</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxNetNSEmulation.upload_start_command"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.upload_start_command">[docs]</a>    <span class="k">def</span> <span class="nf">upload_start_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span>
+        <span class="n">env</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">)</span>
+
+        <span class="c"># We want to make sure the emulator is running</span>
+        <span class="c"># before the experiment starts.</span>
+        <span class="c"># Run the command as a bash script in background,</span>
+        <span class="c"># in the host ( but wait until the command has</span>
+        <span class="c"># finished to continue )</span>
+        <span class="n">env</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_paths</span><span class="p">(</span><span class="n">env</span><span class="p">)</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_paths</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+
+        <span class="n">shfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">,</span> <span class="s">&quot;start.sh&quot;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">upload_command</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> 
+                    <span class="n">shfile</span> <span class="o">=</span> <span class="n">shfile</span><span class="p">,</span>
+                    <span class="n">env</span> <span class="o">=</span> <span class="n">env</span><span class="p">,</span>
+                    <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+
+        <span class="c"># Run the wrapper </span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_run_in_background</span><span class="p">()</span>
+
+        <span class="c"># Wait until the remote socket is created</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">wait_remote_socket</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="LinuxNetNSEmulation.do_deploy"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.do_deploy">[docs]</a>    <span class="k">def</span> <span class="nf">do_deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;---- RESCHEDULING DEPLOY ---- node state </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">state</span> <span class="p">)</span>
+            
+            <span class="c"># ccnd needs to wait until node is deployed and running</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">deploy</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_start_command</span><span class="p">)</span>
+            
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;depends&quot;</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;depends&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_dependencies</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;sources&quot;</span><span class="p">):</span>
+                <span class="n">sources</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;sources&quot;</span><span class="p">)</span>
+                <span class="n">source</span> <span class="o">=</span> <span class="n">sources</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot; &quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+                <span class="n">basename</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">source</span><span class="p">)</span>
+                <span class="n">version</span> <span class="o">=</span> <span class="p">(</span> <span class="n">basename</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;.tar.gz&quot;</span><span class="p">,</span> <span class="s">&quot;&quot;</span><span class="p">)</span>
+                    <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;.tar&quot;</span><span class="p">,</span><span class="s">&quot;&quot;</span><span class="p">)</span>
+                    <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;.gz&quot;</span><span class="p">,</span><span class="s">&quot;&quot;</span><span class="p">)</span>
+                    <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;.zip&quot;</span><span class="p">,</span><span class="s">&quot;&quot;</span><span class="p">)</span> <span class="p">)</span>
+
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;version&quot;</span><span class="p">,</span> <span class="n">version</span><span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;sources&quot;</span><span class="p">,</span> <span class="n">source</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;build&quot;</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;build&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_build</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_environment</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_provision</span><span class="p">()</span>
+
+            <span class="c"># Create client</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_client</span> <span class="o">=</span> <span class="n">LinuxNetNSClient</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_ready</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="LinuxNetNSEmulation.do_start"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.do_start">[docs]</a>    <span class="k">def</span> <span class="nf">do_start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Starts  execution execution</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Starting&quot;</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_started</span><span class="p">()</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Failed to execute command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">command</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+</div>
+<div class="viewcode-block" id="LinuxNetNSEmulation.do_stop"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.do_stop">[docs]</a>    <span class="k">def</span> <span class="nf">do_stop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Stops simulation execution</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_stopped</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="LinuxNetNSEmulation.do_release"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.do_release">[docs]</a>    <span class="k">def</span> <span class="nf">do_release</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Releasing resource&quot;</span><span class="p">)</span>
+
+        <span class="n">tear_down</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;tearDown&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">tear_down</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">tear_down</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">do_stop</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">shutdown</span><span class="p">()</span>
+        <span class="n">LinuxApplication</span><span class="o">.</span><span class="n">do_stop</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+        
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxApplication</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_release</span><span class="p">()</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_start_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="p">[]</span> 
+
+        <span class="c">#command.append(&quot;sudo&quot;)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;PYTHONPATH=$PYTHONPATH:${SRC}/netnswrapper/&quot;</span><span class="p">)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;python ${SRC}/netnswrapper/netnsserver.py -S </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> \
+                <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">remote_socket</span><span class="p">)</span> <span class="p">)</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;enableDump&quot;</span><span class="p">):</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-D&quot;</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;verbose&quot;</span><span class="p">):</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-v&quot;</span><span class="p">)</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">command</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_dependencies</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">use_rpm</span><span class="p">:</span>
+            <span class="k">return</span> <span class="p">(</span><span class="s">&quot; python python-devel mercurial unzip bridge-utils iproute&quot;</span><span class="p">)</span>
+        <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">use_deb</span><span class="p">:</span>
+            <span class="k">return</span> <span class="p">(</span><span class="s">&quot; python python-dev mercurial unzip bridge-utils iproute&quot;</span><span class="p">)</span>
+        <span class="k">return</span> <span class="s">&quot;&quot;</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNetNSEmulation.netns_repo"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.netns_repo">[docs]</a>    <span class="k">def</span> <span class="nf">netns_repo</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s">&quot;http://nepi.inria.fr/code/netns&quot;</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNetNSEmulation.netns_version"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.netns_version">[docs]</a>    <span class="k">def</span> <span class="nf">netns_version</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">version</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;version&quot;</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">version</span> <span class="ow">or</span> <span class="s">&quot;dev&quot;</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNetNSEmulation.python_unshare_repo"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.python_unshare_repo">[docs]</a>    <span class="k">def</span> <span class="nf">python_unshare_repo</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s">&quot;http://nepi.inria.fr/code/python-unshare&quot;</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNetNSEmulation.python_unshare_version"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.python_unshare_version">[docs]</a>    <span class="k">def</span> <span class="nf">python_unshare_version</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s">&quot;dev&quot;</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNetNSEmulation.python_passfd_repo"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.python_passfd_repo">[docs]</a>    <span class="k">def</span> <span class="nf">python_passfd_repo</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s">&quot;http://nepi.inria.fr/code/python-passfd&quot;</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNetNSEmulation.python_passfd_version"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.python_passfd_version">[docs]</a>    <span class="k">def</span> <span class="nf">python_passfd_version</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s">&quot;dev&quot;</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNetNSEmulation.netns_src"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.netns_src">[docs]</a>    <span class="k">def</span> <span class="nf">netns_src</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">location</span> <span class="o">=</span> <span class="s">&quot;${SRC}/netns/</span><span class="si">%(version)s</span><span class="s">&quot;</span> \
+                    <span class="o">%</span> <span class="p">{</span>
+                        <span class="s">&quot;version&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">netns_version</span><span class="p">,</span>
+                      <span class="p">}</span>
+
+        <span class="k">return</span> <span class="n">location</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNetNSEmulation.python_unshare_src"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.python_unshare_src">[docs]</a>    <span class="k">def</span> <span class="nf">python_unshare_src</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">location</span> <span class="o">=</span> <span class="s">&quot;${SRC}/python_unshare/</span><span class="si">%(version)s</span><span class="s">&quot;</span> \
+                    <span class="o">%</span> <span class="p">{</span>
+                        <span class="s">&quot;version&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">python_unshare_version</span><span class="p">,</span>
+                      <span class="p">}</span>
+
+        <span class="k">return</span> <span class="n">location</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNetNSEmulation.python_passfd_src"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.python_passfd_src">[docs]</a>    <span class="k">def</span> <span class="nf">python_passfd_src</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">location</span> <span class="o">=</span> <span class="s">&quot;${SRC}/python_passfd/</span><span class="si">%(version)s</span><span class="s">&quot;</span> \
+                    <span class="o">%</span> <span class="p">{</span>
+                        <span class="s">&quot;version&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">python_passfd_version</span><span class="p">,</span>
+                      <span class="p">}</span>
+
+        <span class="k">return</span> <span class="n">location</span>
+</div>
+<div class="viewcode-block" id="LinuxNetNSEmulation.clone_command"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.clone_command">[docs]</a>    <span class="k">def</span> <span class="nf">clone_command</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">repo</span><span class="p">,</span> <span class="n">src</span><span class="p">):</span>
+        <span class="n">clone_cmd</span> <span class="o">=</span> <span class="p">(</span>
+                <span class="c"># Test if alredy cloned</span>
+                <span class="s">&quot; ( &quot;</span>
+                <span class="s">&quot;  ( &quot;</span>
+                <span class="s">&quot;    ( test -d </span><span class="si">%(src)s</span><span class="s"> ) &quot;</span>
+                <span class="s">&quot;   &amp;&amp; echo &#39;</span><span class="si">%(name)s</span><span class="s"> binaries found, nothing to do&#39;&quot;</span>
+                <span class="s">&quot;  ) &quot;</span>
+                <span class="s">&quot; ) &quot;</span>
+                <span class="s">&quot;  || &quot;</span> 
+                <span class="c"># clone source code</span>
+                <span class="s">&quot; ( &quot;</span>
+                <span class="s">&quot;   mkdir -p </span><span class="si">%(src)s</span><span class="s"> &amp;&amp; &quot;</span>
+                <span class="s">&quot;   hg clone </span><span class="si">%(repo)s</span><span class="s"> </span><span class="si">%(src)s</span><span class="s">&quot;</span>
+                <span class="s">&quot; ) &quot;</span>
+             <span class="p">)</span> <span class="o">%</span> <span class="p">{</span>
+                    <span class="s">&quot;repo&quot;</span><span class="p">:</span> <span class="n">repo</span><span class="p">,</span>
+                    <span class="s">&quot;src&quot;</span><span class="p">:</span> <span class="n">src</span><span class="p">,</span>
+                    <span class="s">&quot;name&quot;</span><span class="p">:</span> <span class="n">name</span><span class="p">,</span>
+                 <span class="p">}</span>
+
+        <span class="k">return</span> <span class="n">clone_cmd</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_build</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">netns_clone</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">clone_command</span><span class="p">(</span><span class="s">&quot;netns&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">netns_repo</span><span class="p">,</span> 
+                <span class="bp">self</span><span class="o">.</span><span class="n">netns_src</span><span class="p">)</span>
+        <span class="n">python_unshare_clone</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">clone_command</span><span class="p">(</span><span class="s">&quot;python_unshare&quot;</span><span class="p">,</span> 
+                <span class="bp">self</span><span class="o">.</span><span class="n">python_unshare_repo</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">python_unshare_src</span><span class="p">)</span>
+        <span class="n">python_passfd_clone</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">clone_command</span><span class="p">(</span><span class="s">&quot;python_passfd&quot;</span><span class="p">,</span> 
+                <span class="bp">self</span><span class="o">.</span><span class="n">python_passfd_repo</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">python_passfd_src</span><span class="p">)</span>
+
+        <span class="n">build_cmd</span> <span class="o">=</span> <span class="p">(</span>
+                <span class="c"># Netns installation</span>
+                <span class="s">&quot;( </span><span class="si">%(netns_clone)s</span><span class="s"> )&quot;</span>
+                <span class="s">&quot;  &amp;&amp; &quot;</span>
+                <span class="s">&quot;( </span><span class="si">%(python_unshare_clone)s</span><span class="s"> )&quot;</span>
+                <span class="s">&quot;  &amp;&amp; &quot;</span>
+                <span class="s">&quot;( </span><span class="si">%(python_passfd_clone)s</span><span class="s"> )&quot;</span>
+             <span class="p">)</span> <span class="o">%</span> <span class="p">{</span> 
+                    <span class="s">&quot;netns_clone&quot;</span><span class="p">:</span> <span class="n">netns_clone</span><span class="p">,</span>
+                    <span class="s">&quot;python_unshare_clone&quot;</span><span class="p">:</span> <span class="n">python_unshare_clone</span><span class="p">,</span>  
+                    <span class="s">&quot;python_passfd_clone&quot;</span><span class="p">:</span> <span class="n">python_passfd_clone</span><span class="p">,</span>  
+                 <span class="p">}</span>
+
+        <span class="k">return</span> <span class="n">build_cmd</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_environment</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">env</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="n">env</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;PYTHONPATH=$PYTHONPAH:</span><span class="si">%(netns_src)s</span><span class="s">/src/:</span><span class="si">%(python_unshare_src)s</span><span class="s">/src:</span><span class="si">%(python_passfd_src)s</span><span class="s">/src}&quot;</span> <span class="o">%</span> <span class="p">{</span> 
+                    <span class="s">&quot;netns_src&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">netns_src</span><span class="p">,</span>
+                    <span class="s">&quot;python_unshare_src&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">python_unshare_src</span><span class="p">,</span>
+                    <span class="s">&quot;python_passfd_src&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">python_passfd_src</span><span class="p">,</span>
+                 <span class="p">})</span>
+
+        <span class="k">return</span> <span class="s">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">env</span><span class="p">)</span> 
+
+<div class="viewcode-block" id="LinuxNetNSEmulation.replace_paths"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.replace_paths">[docs]</a>    <span class="k">def</span> <span class="nf">replace_paths</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">command</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Replace all special path tags with shell-escaped actual paths.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="p">(</span> <span class="n">command</span>
+            <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;${USR}&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">usr_dir</span><span class="p">)</span>
+            <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;${LIB}&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">lib_dir</span><span class="p">)</span>
+            <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;${BIN}&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">bin_dir</span><span class="p">)</span>
+            <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;${SRC}&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">src_dir</span><span class="p">)</span>
+            <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;${SHARE}&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">share_dir</span><span class="p">)</span>
+            <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;${EXP}&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">exp_dir</span><span class="p">)</span>
+            <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;${EXP_HOME}&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">exp_home</span><span class="p">)</span>
+            <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;${APP_HOME}&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">)</span>
+            <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;${RUN_HOME}&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">)</span>
+            <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;${NODE_HOME}&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">node_home</span><span class="p">)</span>
+            <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;${HOME}&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">home_dir</span><span class="p">)</span>
+            <span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxNetNSEmulation.valid_connection"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.valid_connection">[docs]</a>    <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="c"># TODO: Validate!</span>
+        <span class="k">return</span> <span class="bp">True</span>
+</div>
+<div class="viewcode-block" id="LinuxNetNSEmulation.wait_remote_socket"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.wait_remote_socket">[docs]</a>    <span class="k">def</span> <span class="nf">wait_remote_socket</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Waits until the remote socket is created</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot; [ -e </span><span class="si">%s</span><span class="s"> ] &amp;&amp; echo &#39;DONE&#39; &quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">remote_socket</span>
+
+        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="mi">200</span><span class="p">):</span>
+            <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="n">retry</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> 
+                    <span class="n">with_lock</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="n">out</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&quot;DONE&quot;</span><span class="p">)</span> <span class="o">&gt;</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
+                <span class="k">break</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s">&quot;Remote socket not found at </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> \
+                    <span class="bp">self</span><span class="o">.</span><span class="n">remote_socket</span><span class="p">)</span>
+    
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/node.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/node.html
new file mode 100644 (file)
index 0000000..84bc1c1
--- /dev/null
@@ -0,0 +1,1216 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.node &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.node</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux</span> <span class="kn">import</span> <span class="n">rpmfuncs</span><span class="p">,</span> <span class="n">debfuncs</span> 
+<span class="kn">from</span> <span class="nn">nepi.util</span> <span class="kn">import</span> <span class="n">sshfuncs</span><span class="p">,</span> <span class="n">execfuncs</span>
+<span class="kn">from</span> <span class="nn">nepi.util.sshfuncs</span> <span class="kn">import</span> <span class="n">ProcStatus</span>
+
+<span class="kn">import</span> <span class="nn">collections</span>
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">random</span>
+<span class="kn">import</span> <span class="nn">re</span>
+<span class="kn">import</span> <span class="nn">tempfile</span>
+<span class="kn">import</span> <span class="nn">time</span>
+<span class="kn">import</span> <span class="nn">threading</span>
+<span class="kn">import</span> <span class="nn">traceback</span>
+
+<span class="c"># TODO: Unify delays!!</span>
+<span class="c"># TODO: Validate outcome of uploads!! </span>
+
+<div class="viewcode-block" id="ExitCode"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.ExitCode">[docs]</a><span class="k">class</span> <span class="nc">ExitCode</span><span class="p">:</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Error codes that the rexitcode function can return if unable to</span>
+<span class="sd">    check the exit code of a spawned process</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">FILENOTFOUND</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
+    <span class="n">CORRUPTFILE</span> <span class="o">=</span> <span class="o">-</span><span class="mi">2</span>
+    <span class="n">ERROR</span> <span class="o">=</span> <span class="o">-</span><span class="mi">3</span>
+    <span class="n">OK</span> <span class="o">=</span> <span class="mi">0</span>
+</div>
+<div class="viewcode-block" id="OSType"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.OSType">[docs]</a><span class="k">class</span> <span class="nc">OSType</span><span class="p">:</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Supported flavors of Linux OS</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">DEBIAN</span> <span class="o">=</span> <span class="mi">1</span> 
+    <span class="n">UBUNTU</span> <span class="o">=</span> <span class="mi">1</span> <span class="o">&lt;&lt;</span> <span class="mi">1</span> 
+    <span class="n">FEDORA</span> <span class="o">=</span> <span class="mi">1</span> <span class="o">&lt;&lt;</span> <span class="mi">2</span>
+    <span class="n">FEDORA_8</span> <span class="o">=</span> <span class="mi">1</span> <span class="o">&lt;&lt;</span> <span class="mi">3</span> <span class="o">|</span> <span class="n">FEDORA</span> 
+    <span class="n">FEDORA_12</span> <span class="o">=</span> <span class="mi">1</span> <span class="o">&lt;&lt;</span> <span class="mi">4</span> <span class="o">|</span> <span class="n">FEDORA</span> 
+    <span class="n">FEDORA_14</span> <span class="o">=</span> <span class="mi">1</span> <span class="o">&lt;&lt;</span> <span class="mi">5</span> <span class="o">|</span> <span class="n">FEDORA</span> 
+</div>
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="LinuxNode"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode">[docs]</a><span class="k">class</span> <span class="nc">LinuxNode</span><span class="p">(</span><span class="n">ResourceManager</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    .. class:: Class Args :</span>
+<span class="sd">      </span>
+<span class="sd">        :param ec: The Experiment controller</span>
+<span class="sd">        :type ec: ExperimentController</span>
+<span class="sd">        :param guid: guid of the RM</span>
+<span class="sd">        :type guid: int</span>
+
+<span class="sd">    .. note::</span>
+
+<span class="sd">        There are different ways in which commands can be executed using the</span>
+<span class="sd">        LinuxNode interface (i.e. &#39;execute&#39; - blocking and non blocking, &#39;run&#39;,</span>
+<span class="sd">        &#39;run_and_wait&#39;). </span>
+<span class="sd">        </span>
+<span class="sd">        Brief explanation:</span>
+
+<span class="sd">            * &#39;execute&#39; (blocking mode) :  </span>
+
+<span class="sd">                     HOW IT WORKS: &#39;execute&#39;, forks a process and run the</span>
+<span class="sd">                     command, synchronously, attached to the terminal, in</span>
+<span class="sd">                     foreground.</span>
+<span class="sd">                     The execute method will block until the command returns</span>
+<span class="sd">                     the result on &#39;out&#39;, &#39;err&#39; (so until it finishes executing).</span>
+<span class="sd">  </span>
+<span class="sd">                     USAGE: short-lived commands that must be executed attached</span>
+<span class="sd">                     to a terminal and in foreground, for which it IS necessary</span>
+<span class="sd">                     to block until the command has finished (e.g. if you want</span>
+<span class="sd">                     to run &#39;ls&#39; or &#39;cat&#39;).</span>
+
+<span class="sd">            * &#39;execute&#39; (NON blocking mode - blocking = False) :</span>
+
+<span class="sd">                    HOW IT WORKS: Same as before, except that execute method</span>
+<span class="sd">                    will return immediately (even if command still running).</span>
+
+<span class="sd">                    USAGE: long-lived commands that must be executed attached</span>
+<span class="sd">                    to a terminal and in foreground, but for which it is not</span>
+<span class="sd">                    necessary to block until the command has finished. (e.g.</span>
+<span class="sd">                    start an application using X11 forwarding)</span>
+
+<span class="sd">             * &#39;run&#39; :</span>
+
+<span class="sd">                   HOW IT WORKS: Connects to the host ( using SSH if remote)</span>
+<span class="sd">                   and launches the command in background, detached from any</span>
+<span class="sd">                   terminal (daemonized), and returns. The command continues to</span>
+<span class="sd">                   run remotely, but since it is detached from the terminal,</span>
+<span class="sd">                   its pipes (stdin, stdout, stderr) can&#39;t be redirected to the</span>
+<span class="sd">                   console (as normal non detached processes would), and so they</span>
+<span class="sd">                   are explicitly redirected to files. The pidfile is created as</span>
+<span class="sd">                   part of the process of launching the command. The pidfile</span>
+<span class="sd">                   holds the pid and ppid of the process forked in background,</span>
+<span class="sd">                   so later on it is possible to check whether the command is still</span>
+<span class="sd">                   running.</span>
+
+<span class="sd">                    USAGE: long-lived commands that can run detached in background,</span>
+<span class="sd">                    for which it is NOT necessary to block (wait) until the command</span>
+<span class="sd">                    has finished. (e.g. start an application that is not using X11</span>
+<span class="sd">                    forwarding. It can run detached and remotely in background)</span>
+
+<span class="sd">             * &#39;run_and_wait&#39; :</span>
+
+<span class="sd">                    HOW IT WORKS: Similar to &#39;run&#39; except that it &#39;blocks&#39; until</span>
+<span class="sd">                    the command has finished execution. It also checks whether</span>
+<span class="sd">                    errors occurred during runtime by reading the exitcode file,</span>
+<span class="sd">                    which contains the exit code of the command that was run</span>
+<span class="sd">                    (checking stderr only is not always reliable since many</span>
+<span class="sd">                    commands throw debugging info to stderr and the only way to</span>
+<span class="sd">                    automatically know whether an error really happened is to</span>
+<span class="sd">                    check the process exit code).</span>
+
+<span class="sd">                    Another difference with respect to &#39;run&#39;, is that instead</span>
+<span class="sd">                    of directly executing the command as a bash command line,</span>
+<span class="sd">                    it uploads the command to a bash script and runs the script.</span>
+<span class="sd">                    This allows to use the bash script to debug errors, since</span>
+<span class="sd">                    it remains at the remote host and can be run manually to</span>
+<span class="sd">                    reproduce the error.</span>
+<span class="sd">                  </span>
+<span class="sd">                    USAGE: medium-lived commands that can run detached in</span>
+<span class="sd">                    background, for which it IS necessary to block (wait) until</span>
+<span class="sd">                    the command has finished. (e.g. Package installation,</span>
+<span class="sd">                    source compilation, file download, etc)</span>
+
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;linux::Node&quot;</span>
+    <span class="n">_help</span> <span class="o">=</span> <span class="s">&quot;Controls Linux host machines ( either localhost or a host &quot;</span> \
+            <span class="s">&quot;that can be accessed using a SSH key)&quot;</span>
+    <span class="n">_platform</span> <span class="o">=</span> <span class="s">&quot;linux&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">hostname</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;hostname&quot;</span><span class="p">,</span> <span class="s">&quot;Hostname of the machine&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">username</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;username&quot;</span><span class="p">,</span> <span class="s">&quot;Local account username&quot;</span><span class="p">,</span> 
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Credential</span><span class="p">)</span>
+
+        <span class="n">port</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;port&quot;</span><span class="p">,</span> <span class="s">&quot;SSH port&quot;</span><span class="p">,</span> <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+        
+        <span class="n">home</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;home&quot;</span><span class="p">,</span>
+                <span class="s">&quot;Experiment home directory to store all experiment related files&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+        
+        <span class="n">identity</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;identity&quot;</span><span class="p">,</span> <span class="s">&quot;SSH identity file&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Credential</span><span class="p">)</span>
+        
+        <span class="n">server_key</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;serverKey&quot;</span><span class="p">,</span> <span class="s">&quot;Server public key&quot;</span><span class="p">,</span> 
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+        
+        <span class="n">clean_home</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;cleanHome&quot;</span><span class="p">,</span> <span class="s">&quot;Remove all nepi files and directories &quot;</span>
+                <span class="s">&quot; from node home folder before starting experiment&quot;</span><span class="p">,</span> 
+                <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+                <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">clean_experiment</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;cleanExperiment&quot;</span><span class="p">,</span> <span class="s">&quot;Remove all files and directories &quot;</span> 
+                <span class="s">&quot; from a previous same experiment, before the new experiment starts&quot;</span><span class="p">,</span> 
+                <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+                <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+        
+        <span class="n">clean_processes</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;cleanProcesses&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;Kill all running processes before starting experiment&quot;</span><span class="p">,</span>
+                <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+                <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+        
+        <span class="n">tear_down</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;tearDown&quot;</span><span class="p">,</span> <span class="s">&quot;Bash script to be executed before &quot;</span> <span class="o">+</span> \
+                <span class="s">&quot;releasing the resource&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">gateway_user</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;gatewayUser&quot;</span><span class="p">,</span> <span class="s">&quot;Gateway account username&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">gateway</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;gateway&quot;</span><span class="p">,</span> <span class="s">&quot;Hostname of the gateway machine&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">ip</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ip&quot;</span><span class="p">,</span> <span class="s">&quot;Linux host public IP address. &quot;</span>
+                   <span class="s">&quot;Must not be modified by the user unless hostname is &#39;localhost&#39;&quot;</span><span class="p">,</span>
+                    <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">hostname</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">username</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">port</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">home</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">identity</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">server_key</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">clean_home</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">clean_experiment</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">clean_processes</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">tear_down</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">gateway_user</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">gateway</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ip</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxNode</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_os</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="c"># home directory at Linux host</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home_dir</span> <span class="o">=</span> <span class="s">&quot;&quot;</span>
+
+        <span class="c"># lock to prevent concurrent applications on the same node,</span>
+        <span class="c"># to execute commands at the same time. There are potential</span>
+        <span class="c"># concurrency issues when using SSH to a same host from </span>
+        <span class="c"># multiple threads. There are also possible operational </span>
+        <span class="c"># issues, e.g. an application querying the existence </span>
+        <span class="c"># of a file or folder prior to its creation, and another </span>
+        <span class="c"># application creating the same file or folder in between.</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_node_lock</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Lock</span><span class="p">()</span>
+    
+<div class="viewcode-block" id="LinuxNode.log_message"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.log_message">[docs]</a>    <span class="k">def</span> <span class="nf">log_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s">&quot; guid </span><span class="si">%d</span><span class="s"> - host </span><span class="si">%s</span><span class="s"> - </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">,</span> 
+                <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;hostname&quot;</span><span class="p">),</span> <span class="n">msg</span><span class="p">)</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNode.home_dir"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.home_dir">[docs]</a>    <span class="k">def</span> <span class="nf">home_dir</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">home</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;home&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&quot;&quot;</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">home</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&quot;/&quot;</span><span class="p">):</span>
+           <span class="n">home</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_home_dir</span><span class="p">,</span> <span class="n">home</span><span class="p">)</span> 
+        <span class="k">return</span> <span class="n">home</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNode.nepi_home"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.nepi_home">[docs]</a>    <span class="k">def</span> <span class="nf">nepi_home</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">home_dir</span><span class="p">,</span> <span class="s">&quot;.nepi&quot;</span><span class="p">)</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNode.usr_dir"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.usr_dir">[docs]</a>    <span class="k">def</span> <span class="nf">usr_dir</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">nepi_home</span><span class="p">,</span> <span class="s">&quot;nepi-usr&quot;</span><span class="p">)</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNode.lib_dir"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.lib_dir">[docs]</a>    <span class="k">def</span> <span class="nf">lib_dir</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">usr_dir</span><span class="p">,</span> <span class="s">&quot;lib&quot;</span><span class="p">)</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNode.bin_dir"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.bin_dir">[docs]</a>    <span class="k">def</span> <span class="nf">bin_dir</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">usr_dir</span><span class="p">,</span> <span class="s">&quot;bin&quot;</span><span class="p">)</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNode.src_dir"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.src_dir">[docs]</a>    <span class="k">def</span> <span class="nf">src_dir</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">usr_dir</span><span class="p">,</span> <span class="s">&quot;src&quot;</span><span class="p">)</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNode.share_dir"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.share_dir">[docs]</a>    <span class="k">def</span> <span class="nf">share_dir</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">usr_dir</span><span class="p">,</span> <span class="s">&quot;share&quot;</span><span class="p">)</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNode.exp_dir"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.exp_dir">[docs]</a>    <span class="k">def</span> <span class="nf">exp_dir</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">nepi_home</span><span class="p">,</span> <span class="s">&quot;nepi-exp&quot;</span><span class="p">)</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNode.exp_home"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.exp_home">[docs]</a>    <span class="k">def</span> <span class="nf">exp_home</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">exp_dir</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">exp_id</span><span class="p">)</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNode.node_home"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.node_home">[docs]</a>    <span class="k">def</span> <span class="nf">node_home</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">exp_home</span><span class="p">,</span> <span class="s">&quot;node-</span><span class="si">%d</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">)</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNode.run_home"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.run_home">[docs]</a>    <span class="k">def</span> <span class="nf">run_home</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">node_home</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">run_id</span><span class="p">)</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNode.os"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.os">[docs]</a>    <span class="k">def</span> <span class="nf">os</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_os</span><span class="p">:</span>
+            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_os</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">localhost</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;username&quot;</span><span class="p">):</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Can&#39;t resolve OS, insufficient data &quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="n">out</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_os</span><span class="p">()</span>
+
+        <span class="k">if</span> <span class="n">out</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&quot;Debian&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> 
+            <span class="bp">self</span><span class="o">.</span><span class="n">_os</span> <span class="o">=</span> <span class="n">OSType</span><span class="o">.</span><span class="n">DEBIAN</span>
+        <span class="k">elif</span> <span class="n">out</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&quot;Ubuntu&quot;</span><span class="p">)</span> <span class="o">==</span><span class="mi">0</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_os</span> <span class="o">=</span> <span class="n">OSType</span><span class="o">.</span><span class="n">UBUNTU</span>
+        <span class="k">elif</span> <span class="n">out</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&quot;Fedora release&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_os</span> <span class="o">=</span> <span class="n">OSType</span><span class="o">.</span><span class="n">FEDORA</span>
+            <span class="k">if</span> <span class="n">out</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&quot;Fedora release 8&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_os</span> <span class="o">=</span> <span class="n">OSType</span><span class="o">.</span><span class="n">FEDORA_8</span>
+            <span class="k">elif</span> <span class="n">out</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&quot;Fedora release 12&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_os</span> <span class="o">=</span> <span class="n">OSType</span><span class="o">.</span><span class="n">FEDORA_12</span>
+            <span class="k">elif</span> <span class="n">out</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&quot;Fedora release 14&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_os</span> <span class="o">=</span> <span class="n">OSType</span><span class="o">.</span><span class="n">FEDORA_14</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Unsupported OS&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s"> - </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span><span class="p">(</span> <span class="n">msg</span><span class="p">,</span> <span class="n">out</span> <span class="p">)</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_os</span>
+</div>
+<div class="viewcode-block" id="LinuxNode.get_os"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.get_os">[docs]</a>    <span class="k">def</span> <span class="nf">get_os</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="c"># The underlying SSH layer will sometimes return an empty</span>
+        <span class="c"># output (even if the command was executed without errors).</span>
+        <span class="c"># To work arround this, repeat the operation N times or</span>
+        <span class="c"># until the result is not empty string</span>
+        <span class="n">out</span> <span class="o">=</span> <span class="s">&quot;&quot;</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s">&quot;cat /etc/issue&quot;</span><span class="p">,</span> 
+                    <span class="n">with_lock</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span>
+                    <span class="n">blocking</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+        <span class="k">except</span><span class="p">:</span>
+            <span class="n">trace</span> <span class="o">=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">()</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Error detecting OS: </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="n">trace</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+        
+        <span class="k">return</span> <span class="n">out</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNode.use_deb"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.use_deb">[docs]</a>    <span class="k">def</span> <span class="nf">use_deb</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">os</span> <span class="o">&amp;</span> <span class="p">(</span><span class="n">OSType</span><span class="o">.</span><span class="n">DEBIAN</span><span class="o">|</span><span class="n">OSType</span><span class="o">.</span><span class="n">UBUNTU</span><span class="p">))</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNode.use_rpm"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.use_rpm">[docs]</a>    <span class="k">def</span> <span class="nf">use_rpm</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">os</span> <span class="o">&amp;</span> <span class="n">OSType</span><span class="o">.</span><span class="n">FEDORA</span><span class="p">)</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNode.localhost"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.localhost">[docs]</a>    <span class="k">def</span> <span class="nf">localhost</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;hostname&quot;</span><span class="p">)</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&#39;localhost&#39;</span><span class="p">,</span> <span class="s">&#39;127.0.0.1&#39;</span><span class="p">,</span> <span class="s">&#39;::1&#39;</span><span class="p">]</span>
+</div>
+<div class="viewcode-block" id="LinuxNode.do_provision"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.do_provision">[docs]</a>    <span class="k">def</span> <span class="nf">do_provision</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="c"># check if host is alive</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_alive</span><span class="p">():</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Deploy failed. Unresponsive node </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;hostname&quot;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">find_home</span><span class="p">()</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;cleanProcesses&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">clean_processes</span><span class="p">()</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;cleanHome&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">clean_home</span><span class="p">()</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;cleanExperiment&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">clean_experiment</span><span class="p">()</span>
+    
+        <span class="c"># Create shared directory structure and node home directory</span>
+        <span class="n">paths</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">lib_dir</span><span class="p">,</span> 
+            <span class="bp">self</span><span class="o">.</span><span class="n">bin_dir</span><span class="p">,</span> 
+            <span class="bp">self</span><span class="o">.</span><span class="n">src_dir</span><span class="p">,</span> 
+            <span class="bp">self</span><span class="o">.</span><span class="n">share_dir</span><span class="p">,</span> 
+            <span class="bp">self</span><span class="o">.</span><span class="n">node_home</span><span class="p">]</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">paths</span><span class="p">)</span>
+
+        <span class="c"># Get Public IP address if possible</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ip&quot;</span><span class="p">):</span>
+            <span class="k">try</span><span class="p">:</span>
+                <span class="n">ip</span> <span class="o">=</span> <span class="n">sshfuncs</span><span class="o">.</span><span class="n">gethostbyname</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;hostname&quot;</span><span class="p">))</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;ip&quot;</span><span class="p">,</span> <span class="n">ip</span><span class="p">)</span>
+            <span class="k">except</span><span class="p">:</span>
+                <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;gateway&quot;</span><span class="p">)</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
+                    <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Local DNS can not resolve hostname </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;hostname&quot;</span><span class="p">)</span> 
+                    <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxNode</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_provision</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="LinuxNode.do_deploy"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.do_deploy">[docs]</a>    <span class="k">def</span> <span class="nf">do_deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">NEW</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Deploying node&quot;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_provision</span><span class="p">()</span>
+
+        <span class="c"># Node needs to wait until all associated interfaces are </span>
+        <span class="c"># ready before it can finalize deployment</span>
+        <span class="kn">from</span> <span class="nn">nepi.resources.linux.interface</span> <span class="kn">import</span> <span class="n">LinuxInterface</span>
+        <span class="n">ifaces</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">LinuxInterface</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+        <span class="k">for</span> <span class="n">iface</span> <span class="ow">in</span> <span class="n">ifaces</span><span class="p">:</span>
+            <span class="k">if</span> <span class="n">iface</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">deploy</span><span class="p">)</span>
+                <span class="k">return</span> 
+
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxNode</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_deploy</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="LinuxNode.do_release"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.do_release">[docs]</a>    <span class="k">def</span> <span class="nf">do_release</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">rms</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">()</span>
+        <span class="k">for</span> <span class="n">rm</span> <span class="ow">in</span> <span class="n">rms</span><span class="p">:</span>
+            <span class="c"># Node needs to wait until all associated RMs are released</span>
+            <span class="c"># before it can be released</span>
+            <span class="k">if</span> <span class="n">rm</span><span class="o">.</span><span class="n">state</span> <span class="o">!=</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">release</span><span class="p">)</span>
+                <span class="k">return</span> 
+
+        <span class="n">tear_down</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;tearDown&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">tear_down</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">tear_down</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">clean_processes</span><span class="p">()</span>
+
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxNode</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_release</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="LinuxNode.valid_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.valid_connection">[docs]</a>    <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="c"># TODO: Validate!</span>
+        <span class="k">return</span> <span class="bp">True</span>
+</div>
+<div class="viewcode-block" id="LinuxNode.clean_processes"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.clean_processes">[docs]</a>    <span class="k">def</span> <span class="nf">clean_processes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Cleaning up processes&quot;</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">localhost</span><span class="p">:</span>
+            <span class="k">return</span> 
+        
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;username&quot;</span><span class="p">)</span> <span class="o">!=</span> <span class="s">&#39;root&#39;</span><span class="p">:</span>
+            <span class="n">cmd</span> <span class="o">=</span> <span class="p">(</span><span class="s">&quot;sudo -S killall tcpdump || /bin/true ; &quot;</span> <span class="o">+</span>
+                <span class="s">&quot;sudo -S kill -9 $(ps aux | grep &#39;[.]nepi&#39; | awk &#39;{print $2}&#39;) || /bin/true ; &quot;</span> <span class="o">+</span>
+                <span class="s">&quot;sudo -S killall -u </span><span class="si">%s</span><span class="s"> || /bin/true ; &quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;username&quot;</span><span class="p">))</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">&gt;=</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+                <span class="kn">import</span> <span class="nn">pickle</span>
+                <span class="n">pids</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="nb">open</span><span class="p">(</span><span class="s">&quot;/tmp/save.proc&quot;</span><span class="p">,</span> <span class="s">&quot;rb&quot;</span><span class="p">))</span>
+                <span class="n">pids_temp</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
+                <span class="n">ps_aux</span> <span class="o">=</span> <span class="s">&quot;ps aux |awk &#39;{print $2,$11}&#39;&quot;</span>
+                <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">ps_aux</span><span class="p">)</span>
+                <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">out</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
+                    <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">out</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">):</span>
+                        <span class="n">parts</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot; &quot;</span><span class="p">)</span>
+                        <span class="n">pids_temp</span><span class="p">[</span><span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
+                    <span class="n">kill_pids</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">pids_temp</span><span class="o">.</span><span class="n">items</span><span class="p">())</span> <span class="o">-</span> <span class="nb">set</span><span class="p">(</span><span class="n">pids</span><span class="o">.</span><span class="n">items</span><span class="p">())</span>
+                    <span class="n">kill_pids</span> <span class="o">=</span> <span class="s">&#39; &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">dict</span><span class="p">(</span><span class="n">kill_pids</span><span class="p">)</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
+
+                    <span class="n">cmd</span> <span class="o">=</span> <span class="p">(</span><span class="s">&quot;killall tcpdump || /bin/true ; &quot;</span> <span class="o">+</span>
+                        <span class="s">&quot;kill $(ps aux | grep &#39;[.]nepi&#39; | awk &#39;{print $2}&#39;) || /bin/true ; &quot;</span> <span class="o">+</span>
+                        <span class="s">&quot;kill </span><span class="si">%s</span><span class="s"> || /bin/true ; &quot;</span> <span class="o">%</span> <span class="n">kill_pids</span><span class="p">)</span>
+                <span class="k">else</span><span class="p">:</span>
+                    <span class="n">cmd</span> <span class="o">=</span> <span class="p">(</span><span class="s">&quot;killall tcpdump || /bin/true ; &quot;</span> <span class="o">+</span>
+                        <span class="s">&quot;kill $(ps aux | grep &#39;[.]nepi&#39; | awk &#39;{print $2}&#39;) || /bin/true ; &quot;</span><span class="p">)</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="n">cmd</span> <span class="o">=</span> <span class="p">(</span><span class="s">&quot;killall tcpdump || /bin/true ; &quot;</span> <span class="o">+</span>
+                    <span class="s">&quot;kill $(ps aux | grep &#39;[.]nepi&#39; | awk &#39;{print $2}&#39;) || /bin/true ; &quot;</span><span class="p">)</span>
+
+        <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="n">retry</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">with_lock</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxNode.clean_home"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.clean_home">[docs]</a>    <span class="k">def</span> <span class="nf">clean_home</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Cleans all NEPI related folders in the Linux host</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Cleaning up home&quot;</span><span class="p">)</span>
+        
+        <span class="n">cmd</span> <span class="o">=</span> <span class="s">&quot;cd </span><span class="si">%s</span><span class="s"> ; find . -maxdepth 1 -name \.nepi -execdir rm -rf {} + &quot;</span> <span class="o">%</span> <span class="p">(</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">home_dir</span> <span class="p">)</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="n">with_lock</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxNode.clean_experiment"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.clean_experiment">[docs]</a>    <span class="k">def</span> <span class="nf">clean_experiment</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Cleans all experiment related files in the Linux host.</span>
+<span class="sd">        It preserves NEPI files and folders that have a multi experiment</span>
+<span class="sd">        scope.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Cleaning up experiment files&quot;</span><span class="p">)</span>
+        
+        <span class="n">cmd</span> <span class="o">=</span> <span class="s">&quot;cd </span><span class="si">%s</span><span class="s"> ; find . -maxdepth 1 -name &#39;</span><span class="si">%s</span><span class="s">&#39; -execdir rm -rf {} + &quot;</span> <span class="o">%</span> <span class="p">(</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">exp_dir</span><span class="p">,</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">exp_id</span> <span class="p">)</span>
+            
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="n">with_lock</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxNode.execute"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.execute">[docs]</a>    <span class="k">def</span> <span class="nf">execute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">command</span><span class="p">,</span>
+            <span class="n">sudo</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">env</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="n">tty</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">forward_x11</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">retry</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span>
+            <span class="n">connect_timeout</span> <span class="o">=</span> <span class="mi">30</span><span class="p">,</span>
+            <span class="n">strict_host_checking</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">persistent</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span>
+            <span class="n">blocking</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span>
+            <span class="n">with_lock</span> <span class="o">=</span> <span class="bp">False</span>
+            <span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Notice that this invocation will block until the</span>
+<span class="sd">        execution finishes. If this is not the desired behavior,</span>
+<span class="sd">        use &#39;run&#39; instead.&quot;&quot;&quot;</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">localhost</span><span class="p">:</span>
+            <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="n">execfuncs</span><span class="o">.</span><span class="n">lexec</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> 
+                    <span class="n">user</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;username&quot;</span><span class="p">),</span> <span class="c"># still problem with localhost</span>
+                    <span class="n">sudo</span> <span class="o">=</span> <span class="n">sudo</span><span class="p">,</span>
+                    <span class="n">env</span> <span class="o">=</span> <span class="n">env</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">if</span> <span class="n">with_lock</span><span class="p">:</span>
+                <span class="c"># If the execute command is blocking, we don&#39;t want to keep</span>
+                <span class="c"># the node lock. This lock is used to avoid race conditions</span>
+                <span class="c"># when creating the ControlMaster sockets. A more elegant</span>
+                <span class="c"># solution is needed.</span>
+                <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">_node_lock</span><span class="p">:</span>
+                    <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="n">sshfuncs</span><span class="o">.</span><span class="n">rexec</span><span class="p">(</span>
+                        <span class="n">command</span><span class="p">,</span> 
+                        <span class="n">host</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;hostname&quot;</span><span class="p">),</span>
+                        <span class="n">user</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;username&quot;</span><span class="p">),</span>
+                        <span class="n">port</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;port&quot;</span><span class="p">),</span>
+                        <span class="n">gwuser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;gatewayUser&quot;</span><span class="p">),</span>
+                        <span class="n">gw</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;gateway&quot;</span><span class="p">),</span>
+                        <span class="n">agent</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span>
+                        <span class="n">sudo</span> <span class="o">=</span> <span class="n">sudo</span><span class="p">,</span>
+                        <span class="n">identity</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;identity&quot;</span><span class="p">),</span>
+                        <span class="n">server_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;serverKey&quot;</span><span class="p">),</span>
+                        <span class="n">env</span> <span class="o">=</span> <span class="n">env</span><span class="p">,</span>
+                        <span class="n">tty</span> <span class="o">=</span> <span class="n">tty</span><span class="p">,</span>
+                        <span class="n">forward_x11</span> <span class="o">=</span> <span class="n">forward_x11</span><span class="p">,</span>
+                        <span class="n">retry</span> <span class="o">=</span> <span class="n">retry</span><span class="p">,</span>
+                        <span class="n">connect_timeout</span> <span class="o">=</span> <span class="n">connect_timeout</span><span class="p">,</span>
+                        <span class="n">persistent</span> <span class="o">=</span> <span class="n">persistent</span><span class="p">,</span>
+                        <span class="n">blocking</span> <span class="o">=</span> <span class="n">blocking</span><span class="p">,</span> 
+                        <span class="n">strict_host_checking</span> <span class="o">=</span> <span class="n">strict_host_checking</span>
+                        <span class="p">)</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="n">sshfuncs</span><span class="o">.</span><span class="n">rexec</span><span class="p">(</span>
+                    <span class="n">command</span><span class="p">,</span> 
+                    <span class="n">host</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;hostname&quot;</span><span class="p">),</span>
+                    <span class="n">user</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;username&quot;</span><span class="p">),</span>
+                    <span class="n">port</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;port&quot;</span><span class="p">),</span>
+                    <span class="n">gwuser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;gatewayUser&quot;</span><span class="p">),</span>
+                    <span class="n">gw</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;gateway&quot;</span><span class="p">),</span>
+                    <span class="n">agent</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span>
+                    <span class="n">sudo</span> <span class="o">=</span> <span class="n">sudo</span><span class="p">,</span>
+                    <span class="n">identity</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;identity&quot;</span><span class="p">),</span>
+                    <span class="n">server_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;serverKey&quot;</span><span class="p">),</span>
+                    <span class="n">env</span> <span class="o">=</span> <span class="n">env</span><span class="p">,</span>
+                    <span class="n">tty</span> <span class="o">=</span> <span class="n">tty</span><span class="p">,</span>
+                    <span class="n">forward_x11</span> <span class="o">=</span> <span class="n">forward_x11</span><span class="p">,</span>
+                    <span class="n">retry</span> <span class="o">=</span> <span class="n">retry</span><span class="p">,</span>
+                    <span class="n">connect_timeout</span> <span class="o">=</span> <span class="n">connect_timeout</span><span class="p">,</span>
+                    <span class="n">persistent</span> <span class="o">=</span> <span class="n">persistent</span><span class="p">,</span>
+                    <span class="n">blocking</span> <span class="o">=</span> <span class="n">blocking</span><span class="p">,</span> 
+                    <span class="n">strict_host_checking</span> <span class="o">=</span> <span class="n">strict_host_checking</span>
+                    <span class="p">)</span>
+
+        <span class="k">return</span> <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span>
+</div>
+<div class="viewcode-block" id="LinuxNode.run"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.run">[docs]</a>    <span class="k">def</span> <span class="nf">run</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">command</span><span class="p">,</span> <span class="n">home</span><span class="p">,</span>
+            <span class="n">create_home</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">pidfile</span> <span class="o">=</span> <span class="s">&#39;pidfile&#39;</span><span class="p">,</span>
+            <span class="n">stdin</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> 
+            <span class="n">stdout</span> <span class="o">=</span> <span class="s">&#39;stdout&#39;</span><span class="p">,</span> 
+            <span class="n">stderr</span> <span class="o">=</span> <span class="s">&#39;stderr&#39;</span><span class="p">,</span> 
+            <span class="n">sudo</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">tty</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">strict_host_checking</span> <span class="o">=</span> <span class="bp">False</span><span class="p">):</span>
+        
+        <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;Running command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
+        
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">localhost</span><span class="p">:</span>
+            <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="n">execfuncs</span><span class="o">.</span><span class="n">lspawn</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="n">pidfile</span><span class="p">,</span>
+                    <span class="n">home</span> <span class="o">=</span> <span class="n">home</span><span class="p">,</span> 
+                    <span class="n">create_home</span> <span class="o">=</span> <span class="n">create_home</span><span class="p">,</span> 
+                    <span class="n">stdin</span> <span class="o">=</span> <span class="n">stdin</span> <span class="ow">or</span> <span class="s">&#39;/dev/null&#39;</span><span class="p">,</span>
+                    <span class="n">stdout</span> <span class="o">=</span> <span class="n">stdout</span> <span class="ow">or</span> <span class="s">&#39;/dev/null&#39;</span><span class="p">,</span>
+                    <span class="n">stderr</span> <span class="o">=</span> <span class="n">stderr</span> <span class="ow">or</span> <span class="s">&#39;/dev/null&#39;</span><span class="p">,</span>
+                    <span class="n">sudo</span> <span class="o">=</span> <span class="n">sudo</span><span class="p">)</span> 
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">_node_lock</span><span class="p">:</span>
+                <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="n">sshfuncs</span><span class="o">.</span><span class="n">rspawn</span><span class="p">(</span>
+                    <span class="n">command</span><span class="p">,</span>
+                    <span class="n">pidfile</span> <span class="o">=</span> <span class="n">pidfile</span><span class="p">,</span>
+                    <span class="n">home</span> <span class="o">=</span> <span class="n">home</span><span class="p">,</span>
+                    <span class="n">create_home</span> <span class="o">=</span> <span class="n">create_home</span><span class="p">,</span>
+                    <span class="n">stdin</span> <span class="o">=</span> <span class="n">stdin</span> <span class="ow">or</span> <span class="s">&#39;/dev/null&#39;</span><span class="p">,</span>
+                    <span class="n">stdout</span> <span class="o">=</span> <span class="n">stdout</span> <span class="ow">or</span> <span class="s">&#39;/dev/null&#39;</span><span class="p">,</span>
+                    <span class="n">stderr</span> <span class="o">=</span> <span class="n">stderr</span> <span class="ow">or</span> <span class="s">&#39;/dev/null&#39;</span><span class="p">,</span>
+                    <span class="n">sudo</span> <span class="o">=</span> <span class="n">sudo</span><span class="p">,</span>
+                    <span class="n">host</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;hostname&quot;</span><span class="p">),</span>
+                    <span class="n">user</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;username&quot;</span><span class="p">),</span>
+                    <span class="n">port</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;port&quot;</span><span class="p">),</span>
+                    <span class="n">gwuser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;gatewayUser&quot;</span><span class="p">),</span>
+                    <span class="n">gw</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;gateway&quot;</span><span class="p">),</span>
+                    <span class="n">agent</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span>
+                    <span class="n">identity</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;identity&quot;</span><span class="p">),</span>
+                    <span class="n">server_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;serverKey&quot;</span><span class="p">),</span>
+                    <span class="n">tty</span> <span class="o">=</span> <span class="n">tty</span><span class="p">,</span>
+                    <span class="n">strict_host_checking</span> <span class="o">=</span> <span class="n">strict_host_checking</span>
+                    <span class="p">)</span>
+
+        <span class="k">return</span> <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span>
+</div>
+<div class="viewcode-block" id="LinuxNode.getpid"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.getpid">[docs]</a>    <span class="k">def</span> <span class="nf">getpid</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">home</span><span class="p">,</span> <span class="n">pidfile</span> <span class="o">=</span> <span class="s">&quot;pidfile&quot;</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">localhost</span><span class="p">:</span>
+            <span class="n">pidtuple</span> <span class="o">=</span>  <span class="n">execfuncs</span><span class="o">.</span><span class="n">lgetpid</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">home</span><span class="p">,</span> <span class="n">pidfile</span><span class="p">))</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">_node_lock</span><span class="p">:</span>
+                <span class="n">pidtuple</span> <span class="o">=</span> <span class="n">sshfuncs</span><span class="o">.</span><span class="n">rgetpid</span><span class="p">(</span>
+                    <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">home</span><span class="p">,</span> <span class="n">pidfile</span><span class="p">),</span>
+                    <span class="n">host</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;hostname&quot;</span><span class="p">),</span>
+                    <span class="n">user</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;username&quot;</span><span class="p">),</span>
+                    <span class="n">port</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;port&quot;</span><span class="p">),</span>
+                    <span class="n">gwuser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;gatewayUser&quot;</span><span class="p">),</span>
+                    <span class="n">gw</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;gateway&quot;</span><span class="p">),</span>
+                    <span class="n">agent</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span>
+                    <span class="n">identity</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;identity&quot;</span><span class="p">),</span>
+                    <span class="n">server_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;serverKey&quot;</span><span class="p">),</span>
+                    <span class="n">strict_host_checking</span> <span class="o">=</span> <span class="bp">False</span>
+                    <span class="p">)</span>
+        
+        <span class="k">return</span> <span class="n">pidtuple</span>
+</div>
+<div class="viewcode-block" id="LinuxNode.status"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.status">[docs]</a>    <span class="k">def</span> <span class="nf">status</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">pid</span><span class="p">,</span> <span class="n">ppid</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">localhost</span><span class="p">:</span>
+            <span class="n">status</span> <span class="o">=</span> <span class="n">execfuncs</span><span class="o">.</span><span class="n">lstatus</span><span class="p">(</span><span class="n">pid</span><span class="p">,</span> <span class="n">ppid</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">_node_lock</span><span class="p">:</span>
+                <span class="n">status</span> <span class="o">=</span> <span class="n">sshfuncs</span><span class="o">.</span><span class="n">rstatus</span><span class="p">(</span>
+                        <span class="n">pid</span><span class="p">,</span> <span class="n">ppid</span><span class="p">,</span>
+                        <span class="n">host</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;hostname&quot;</span><span class="p">),</span>
+                        <span class="n">user</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;username&quot;</span><span class="p">),</span>
+                        <span class="n">port</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;port&quot;</span><span class="p">),</span>
+                        <span class="n">gwuser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;gatewayUser&quot;</span><span class="p">),</span>
+                        <span class="n">gw</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;gateway&quot;</span><span class="p">),</span>
+                        <span class="n">agent</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span>
+                        <span class="n">identity</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;identity&quot;</span><span class="p">),</span>
+                        <span class="n">server_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;serverKey&quot;</span><span class="p">),</span>
+                        <span class="n">strict_host_checking</span> <span class="o">=</span> <span class="bp">False</span>
+                        <span class="p">)</span>
+           
+        <span class="k">return</span> <span class="n">status</span>
+    </div>
+<div class="viewcode-block" id="LinuxNode.kill"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.kill">[docs]</a>    <span class="k">def</span> <span class="nf">kill</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">pid</span><span class="p">,</span> <span class="n">ppid</span><span class="p">,</span> <span class="n">sudo</span> <span class="o">=</span> <span class="bp">False</span><span class="p">):</span>
+        <span class="n">out</span> <span class="o">=</span> <span class="n">err</span> <span class="o">=</span> <span class="s">&quot;&quot;</span>
+        <span class="n">proc</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="n">status</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">status</span><span class="p">(</span><span class="n">pid</span><span class="p">,</span> <span class="n">ppid</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">status</span> <span class="o">==</span> <span class="n">sshfuncs</span><span class="o">.</span><span class="n">ProcStatus</span><span class="o">.</span><span class="n">RUNNING</span><span class="p">:</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">localhost</span><span class="p">:</span>
+                <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="n">execfuncs</span><span class="o">.</span><span class="n">lkill</span><span class="p">(</span><span class="n">pid</span><span class="p">,</span> <span class="n">ppid</span><span class="p">,</span> <span class="n">sudo</span><span class="p">)</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">_node_lock</span><span class="p">:</span>
+                    <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="n">sshfuncs</span><span class="o">.</span><span class="n">rkill</span><span class="p">(</span>
+                        <span class="n">pid</span><span class="p">,</span> <span class="n">ppid</span><span class="p">,</span>
+                        <span class="n">host</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;hostname&quot;</span><span class="p">),</span>
+                        <span class="n">user</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;username&quot;</span><span class="p">),</span>
+                        <span class="n">port</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;port&quot;</span><span class="p">),</span>
+                        <span class="n">gwuser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;gatewayUser&quot;</span><span class="p">),</span>
+                        <span class="n">gw</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;gateway&quot;</span><span class="p">),</span>
+                        <span class="n">agent</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span>
+                        <span class="n">sudo</span> <span class="o">=</span> <span class="n">sudo</span><span class="p">,</span>
+                        <span class="n">identity</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;identity&quot;</span><span class="p">),</span>
+                        <span class="n">server_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;serverKey&quot;</span><span class="p">),</span>
+                        <span class="n">strict_host_checking</span> <span class="o">=</span> <span class="bp">False</span>
+                        <span class="p">)</span>
+
+        <span class="k">return</span> <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span>
+</div>
+<div class="viewcode-block" id="LinuxNode.copy"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.copy">[docs]</a>    <span class="k">def</span> <span class="nf">copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">src</span><span class="p">,</span> <span class="n">dst</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">localhost</span><span class="p">:</span>
+            <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="n">execfuncs</span><span class="o">.</span><span class="n">lcopy</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">dst</span><span class="p">,</span> 
+                    <span class="n">recursive</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">_node_lock</span><span class="p">:</span>
+                <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="n">sshfuncs</span><span class="o">.</span><span class="n">rcopy</span><span class="p">(</span>
+                    <span class="n">src</span><span class="p">,</span> <span class="n">dst</span><span class="p">,</span> 
+                    <span class="n">port</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;port&quot;</span><span class="p">),</span>
+                    <span class="n">gwuser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;gatewayUser&quot;</span><span class="p">),</span>
+                    <span class="n">gw</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;gateway&quot;</span><span class="p">),</span>
+                    <span class="n">identity</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;identity&quot;</span><span class="p">),</span>
+                    <span class="n">server_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;serverKey&quot;</span><span class="p">),</span>
+                    <span class="n">recursive</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span>
+                    <span class="n">strict_host_checking</span> <span class="o">=</span> <span class="bp">False</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span>
+</div>
+<div class="viewcode-block" id="LinuxNode.upload"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.upload">[docs]</a>    <span class="k">def</span> <span class="nf">upload</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">src</span><span class="p">,</span> <span class="n">dst</span><span class="p">,</span> <span class="n">text</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span> <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span>
+            <span class="n">raise_on_error</span> <span class="o">=</span> <span class="bp">True</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Copy content to destination</span>
+
+<span class="sd">        src  string with the content to copy. Can be:</span>
+<span class="sd">            - plain text</span>
+<span class="sd">            - a string with the path to a local file</span>
+<span class="sd">            - a string with a semi-colon separeted list of local files</span>
+<span class="sd">            - a string with a local directory</span>
+
+<span class="sd">        dst  string with destination path on the remote host (remote is </span>
+<span class="sd">            always self.host)</span>
+
+<span class="sd">        text src is text input, it must be stored into a temp file before </span>
+<span class="sd">        uploading</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="c"># If source is a string input </span>
+        <span class="n">f</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="k">if</span> <span class="n">text</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">src</span><span class="p">):</span>
+            <span class="c"># src is text input that should be uploaded as file</span>
+            <span class="c"># create a temporal file with the content to upload</span>
+            <span class="n">f</span> <span class="o">=</span> <span class="n">tempfile</span><span class="o">.</span><span class="n">NamedTemporaryFile</span><span class="p">(</span><span class="n">delete</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
+            <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">src</span><span class="p">)</span>
+            <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+            <span class="n">src</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">name</span>
+
+        <span class="c"># If dst files should not be overwritten, check that the files do not</span>
+        <span class="c"># exits already</span>
+        <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
+            <span class="n">src</span> <span class="o">=</span> <span class="nb">map</span><span class="p">(</span><span class="nb">str</span><span class="o">.</span><span class="n">strip</span><span class="p">,</span> <span class="n">src</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;;&quot;</span><span class="p">))</span>
+    
+        <span class="k">if</span> <span class="n">overwrite</span> <span class="o">==</span> <span class="bp">False</span><span class="p">:</span>
+            <span class="n">src</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter_existing_files</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">dst</span><span class="p">)</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="n">src</span><span class="p">:</span>
+                <span class="k">return</span> <span class="p">(</span><span class="s">&quot;&quot;</span><span class="p">,</span> <span class="s">&quot;&quot;</span><span class="p">),</span> <span class="bp">None</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">localhost</span><span class="p">:</span>
+            <span class="c"># Build destination as &lt;user&gt;@&lt;server&gt;:&lt;path&gt;</span>
+            <span class="n">dst</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">@</span><span class="si">%s</span><span class="s">:</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;username&quot;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;hostname&quot;</span><span class="p">),</span> <span class="n">dst</span><span class="p">)</span>
+
+        <span class="p">((</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span><span class="p">)</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">dst</span><span class="p">)</span>
+
+        <span class="c"># clean up temp file</span>
+        <span class="k">if</span> <span class="n">f</span><span class="p">:</span>
+            <span class="n">os</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">f</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">err</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Failed to upload files - src: </span><span class="si">%s</span><span class="s"> dst: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span>  <span class="p">(</span><span class="s">&quot;;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">src</span><span class="p">),</span> <span class="n">dst</span><span class="p">)</span> 
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+            
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s"> out: </span><span class="si">%s</span><span class="s"> err: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+            <span class="k">if</span> <span class="n">raise_on_error</span><span class="p">:</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">return</span> <span class="p">((</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxNode.download"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.download">[docs]</a>    <span class="k">def</span> <span class="nf">download</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">src</span><span class="p">,</span> <span class="n">dst</span><span class="p">,</span> <span class="n">raise_on_error</span> <span class="o">=</span> <span class="bp">True</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">localhost</span><span class="p">:</span>
+            <span class="c"># Build destination as &lt;user&gt;@&lt;server&gt;:&lt;path&gt;</span>
+            <span class="n">src</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">@</span><span class="si">%s</span><span class="s">:</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;username&quot;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;hostname&quot;</span><span class="p">),</span> <span class="n">src</span><span class="p">)</span>
+
+        <span class="p">((</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span><span class="p">)</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">dst</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">err</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Failed to download files - src: </span><span class="si">%s</span><span class="s"> dst: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span>  <span class="p">(</span><span class="s">&quot;;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">src</span><span class="p">),</span> <span class="n">dst</span><span class="p">)</span> 
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="n">raise_on_error</span><span class="p">:</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">return</span> <span class="p">((</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxNode.install_packages_command"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.install_packages_command">[docs]</a>    <span class="k">def</span> <span class="nf">install_packages_command</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">packages</span><span class="p">):</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot;&quot;</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">use_rpm</span><span class="p">:</span>
+            <span class="n">command</span> <span class="o">=</span> <span class="n">rpmfuncs</span><span class="o">.</span><span class="n">install_packages_command</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">os</span><span class="p">,</span> <span class="n">packages</span><span class="p">)</span>
+        <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">use_deb</span><span class="p">:</span>
+            <span class="n">command</span> <span class="o">=</span> <span class="n">debfuncs</span><span class="o">.</span><span class="n">install_packages_command</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">os</span><span class="p">,</span> <span class="n">packages</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Error installing packages ( OS not known ) &quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">os</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">return</span> <span class="n">command</span>
+</div>
+<div class="viewcode-block" id="LinuxNode.install_packages"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.install_packages">[docs]</a>    <span class="k">def</span> <span class="nf">install_packages</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">packages</span><span class="p">,</span> <span class="n">home</span><span class="p">,</span> <span class="n">run_home</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="n">raise_on_error</span> <span class="o">=</span> <span class="bp">True</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Install packages in the Linux host.</span>
+
+<span class="sd">        &#39;home&#39; is the directory to upload the package installation script.</span>
+<span class="sd">        &#39;run_home&#39; is the directory from where to execute the script.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">install_packages_command</span><span class="p">(</span><span class="n">packages</span><span class="p">)</span>
+
+        <span class="n">run_home</span> <span class="o">=</span> <span class="n">run_home</span> <span class="ow">or</span> <span class="n">home</span>
+
+        <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_and_wait</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="n">run_home</span><span class="p">,</span> 
+            <span class="n">shfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">home</span><span class="p">,</span> <span class="s">&quot;instpkg.sh&quot;</span><span class="p">),</span>
+            <span class="n">pidfile</span> <span class="o">=</span> <span class="s">&quot;instpkg_pidfile&quot;</span><span class="p">,</span>
+            <span class="n">ecodefile</span> <span class="o">=</span> <span class="s">&quot;instpkg_exitcode&quot;</span><span class="p">,</span>
+            <span class="n">stdout</span> <span class="o">=</span> <span class="s">&quot;instpkg_stdout&quot;</span><span class="p">,</span> 
+            <span class="n">stderr</span> <span class="o">=</span> <span class="s">&quot;instpkg_stderr&quot;</span><span class="p">,</span>
+            <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">raise_on_error</span> <span class="o">=</span> <span class="n">raise_on_error</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> 
+</div>
+<div class="viewcode-block" id="LinuxNode.remove_packages"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.remove_packages">[docs]</a>    <span class="k">def</span> <span class="nf">remove_packages</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">packages</span><span class="p">,</span> <span class="n">home</span><span class="p">,</span> <span class="n">run_home</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="n">raise_on_error</span> <span class="o">=</span> <span class="bp">True</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Uninstall packages from the Linux host.</span>
+
+<span class="sd">        &#39;home&#39; is the directory to upload the package un-installation script.</span>
+<span class="sd">        &#39;run_home&#39; is the directory from where to execute the script.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">use_rpm</span><span class="p">:</span>
+            <span class="n">command</span> <span class="o">=</span> <span class="n">rpmfuncs</span><span class="o">.</span><span class="n">remove_packages_command</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">os</span><span class="p">,</span> <span class="n">packages</span><span class="p">)</span>
+        <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">use_deb</span><span class="p">:</span>
+            <span class="n">command</span> <span class="o">=</span> <span class="n">debfuncs</span><span class="o">.</span><span class="n">remove_packages_command</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">os</span><span class="p">,</span> <span class="n">packages</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Error removing packages ( OS not known ) &quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="n">run_home</span> <span class="o">=</span> <span class="n">run_home</span> <span class="ow">or</span> <span class="n">home</span>
+
+        <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_and_wait</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="n">run_home</span><span class="p">,</span> 
+            <span class="n">shfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">home</span><span class="p">,</span> <span class="s">&quot;rmpkg.sh&quot;</span><span class="p">),</span>
+            <span class="n">pidfile</span> <span class="o">=</span> <span class="s">&quot;rmpkg_pidfile&quot;</span><span class="p">,</span>
+            <span class="n">ecodefile</span> <span class="o">=</span> <span class="s">&quot;rmpkg_exitcode&quot;</span><span class="p">,</span>
+            <span class="n">stdout</span> <span class="o">=</span> <span class="s">&quot;rmpkg_stdout&quot;</span><span class="p">,</span> 
+            <span class="n">stderr</span> <span class="o">=</span> <span class="s">&quot;rmpkg_stderr&quot;</span><span class="p">,</span>
+            <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">raise_on_error</span> <span class="o">=</span> <span class="n">raise_on_error</span><span class="p">)</span>
+         
+        <span class="k">return</span> <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> 
+</div>
+<div class="viewcode-block" id="LinuxNode.mkdir"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.mkdir">[docs]</a>    <span class="k">def</span> <span class="nf">mkdir</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">paths</span><span class="p">,</span> <span class="n">clean</span> <span class="o">=</span> <span class="bp">False</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Paths is either a single remote directory path to create,</span>
+<span class="sd">        or a list of directories to create.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="n">clean</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">rmdir</span><span class="p">(</span><span class="n">paths</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">paths</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
+            <span class="n">paths</span> <span class="o">=</span> <span class="p">[</span><span class="n">paths</span><span class="p">]</span>
+
+        <span class="n">cmd</span> <span class="o">=</span> <span class="s">&quot; ; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="k">lambda</span> <span class="n">path</span><span class="p">:</span> <span class="s">&quot;mkdir -p </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">path</span><span class="p">,</span> <span class="n">paths</span><span class="p">))</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="n">with_lock</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxNode.rmdir"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.rmdir">[docs]</a>    <span class="k">def</span> <span class="nf">rmdir</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">paths</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Paths is either a single remote directory path to delete,</span>
+<span class="sd">        or a list of directories to delete.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+
+        <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">paths</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
+            <span class="n">paths</span> <span class="o">=</span> <span class="p">[</span><span class="n">paths</span><span class="p">]</span>
+
+        <span class="n">cmd</span> <span class="o">=</span> <span class="s">&quot; ; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="k">lambda</span> <span class="n">path</span><span class="p">:</span> <span class="s">&quot;rm -rf </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">path</span><span class="p">,</span> <span class="n">paths</span><span class="p">))</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="n">with_lock</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+        </div>
+<div class="viewcode-block" id="LinuxNode.run_and_wait"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.run_and_wait">[docs]</a>    <span class="k">def</span> <span class="nf">run_and_wait</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">command</span><span class="p">,</span> <span class="n">home</span><span class="p">,</span> 
+            <span class="n">shfile</span><span class="o">=</span><span class="s">&quot;cmd.sh&quot;</span><span class="p">,</span>
+            <span class="n">env</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span>
+            <span class="n">overwrite</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span>
+            <span class="n">wait_run</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span>
+            <span class="n">pidfile</span><span class="o">=</span><span class="s">&quot;pidfile&quot;</span><span class="p">,</span> 
+            <span class="n">ecodefile</span><span class="o">=</span><span class="s">&quot;exitcode&quot;</span><span class="p">,</span> 
+            <span class="n">stdin</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> 
+            <span class="n">stdout</span><span class="o">=</span><span class="s">&quot;stdout&quot;</span><span class="p">,</span> 
+            <span class="n">stderr</span><span class="o">=</span><span class="s">&quot;stderr&quot;</span><span class="p">,</span> 
+            <span class="n">sudo</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span>
+            <span class="n">tty</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span>
+            <span class="n">raise_on_error</span><span class="o">=</span><span class="bp">True</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Uploads the &#39;command&#39; to a bash script in the host.</span>
+<span class="sd">        Then runs the script detached in background in the host, and</span>
+<span class="sd">        busy-waites until the script finishes executing.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">shfile</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&quot;/&quot;</span><span class="p">):</span>
+            <span class="n">shfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">home</span><span class="p">,</span> <span class="n">shfile</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">upload_command</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> 
+            <span class="n">shfile</span> <span class="o">=</span> <span class="n">shfile</span><span class="p">,</span> 
+            <span class="n">ecodefile</span> <span class="o">=</span> <span class="n">ecodefile</span><span class="p">,</span> 
+            <span class="n">env</span> <span class="o">=</span> <span class="n">env</span><span class="p">,</span>
+            <span class="n">overwrite</span> <span class="o">=</span> <span class="n">overwrite</span><span class="p">)</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot;bash </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">shfile</span>
+        <span class="c"># run command in background in remote host</span>
+        <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="n">home</span><span class="p">,</span> 
+                <span class="n">pidfile</span> <span class="o">=</span> <span class="n">pidfile</span><span class="p">,</span>
+                <span class="n">stdin</span> <span class="o">=</span> <span class="n">stdin</span><span class="p">,</span> 
+                <span class="n">stdout</span> <span class="o">=</span> <span class="n">stdout</span><span class="p">,</span> 
+                <span class="n">stderr</span> <span class="o">=</span> <span class="n">stderr</span><span class="p">,</span> 
+                <span class="n">sudo</span> <span class="o">=</span> <span class="n">sudo</span><span class="p">,</span>
+                <span class="n">tty</span> <span class="o">=</span> <span class="n">tty</span><span class="p">)</span>
+
+        <span class="c"># check no errors occurred</span>
+        <span class="k">if</span> <span class="n">proc</span><span class="o">.</span><span class="n">poll</span><span class="p">():</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Failed to run command &#39;</span><span class="si">%s</span><span class="s">&#39; &quot;</span> <span class="o">%</span> <span class="n">command</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+            <span class="k">if</span> <span class="n">raise_on_error</span><span class="p">:</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="c"># Wait for pid file to be generated</span>
+        <span class="n">pid</span><span class="p">,</span> <span class="n">ppid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wait_pid</span><span class="p">(</span>
+                <span class="n">home</span> <span class="o">=</span> <span class="n">home</span><span class="p">,</span> 
+                <span class="n">pidfile</span> <span class="o">=</span> <span class="n">pidfile</span><span class="p">,</span> 
+                <span class="n">raise_on_error</span> <span class="o">=</span> <span class="n">raise_on_error</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">wait_run</span><span class="p">:</span>
+            <span class="c"># wait until command finishes to execute</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">wait_run</span><span class="p">(</span><span class="n">pid</span><span class="p">,</span> <span class="n">ppid</span><span class="p">)</span>
+          
+            <span class="p">(</span><span class="n">eout</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">check_errors</span><span class="p">(</span><span class="n">home</span><span class="p">,</span>
+                <span class="n">ecodefile</span> <span class="o">=</span> <span class="n">ecodefile</span><span class="p">,</span>
+                <span class="n">stderr</span> <span class="o">=</span> <span class="n">stderr</span><span class="p">)</span>
+
+            <span class="c"># Out is what was written in the stderr file</span>
+            <span class="k">if</span> <span class="n">err</span><span class="p">:</span>
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Failed to run command &#39;</span><span class="si">%s</span><span class="s">&#39; &quot;</span> <span class="o">%</span> <span class="n">command</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">eout</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+
+                <span class="k">if</span> <span class="n">raise_on_error</span><span class="p">:</span>
+                    <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">oerr</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">check_output</span><span class="p">(</span><span class="n">home</span><span class="p">,</span> <span class="n">stdout</span><span class="p">)</span>
+        
+        <span class="k">return</span> <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span>
+        </div>
+<div class="viewcode-block" id="LinuxNode.exitcode"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.exitcode">[docs]</a>    <span class="k">def</span> <span class="nf">exitcode</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">home</span><span class="p">,</span> <span class="n">ecodefile</span> <span class="o">=</span> <span class="s">&quot;exitcode&quot;</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Get the exit code of an application.</span>
+<span class="sd">        Returns an integer value with the exit code </span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">check_output</span><span class="p">(</span><span class="n">home</span><span class="p">,</span> <span class="n">ecodefile</span><span class="p">)</span>
+
+        <span class="c"># Succeeded to open file, return exit code in the file</span>
+        <span class="k">if</span> <span class="n">proc</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+            <span class="k">try</span><span class="p">:</span>
+                <span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="n">out</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
+            <span class="k">except</span><span class="p">:</span>
+                <span class="c"># Error in the content of the file!</span>
+                <span class="k">return</span> <span class="n">ExitCode</span><span class="o">.</span><span class="n">CORRUPTFILE</span>
+
+        <span class="c"># No such file or directory</span>
+        <span class="k">if</span> <span class="n">proc</span><span class="o">.</span><span class="n">returncode</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">ExitCode</span><span class="o">.</span><span class="n">FILENOTFOUND</span>
+        
+        <span class="c"># Other error from &#39;cat&#39;</span>
+        <span class="k">return</span> <span class="n">ExitCode</span><span class="o">.</span><span class="n">ERROR</span>
+</div>
+<div class="viewcode-block" id="LinuxNode.upload_command"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.upload_command">[docs]</a>    <span class="k">def</span> <span class="nf">upload_command</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">command</span><span class="p">,</span> 
+            <span class="n">shfile</span><span class="o">=</span><span class="s">&quot;cmd.sh&quot;</span><span class="p">,</span>
+            <span class="n">ecodefile</span><span class="o">=</span><span class="s">&quot;exitcode&quot;</span><span class="p">,</span>
+            <span class="n">overwrite</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span>
+            <span class="n">env</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Saves the command as a bash script file in the remote host, and</span>
+<span class="sd">        forces to save the exit code of the command execution to the ecodefile</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">command</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s">&quot;;&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">command</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s">&quot;&amp;&quot;</span><span class="p">)):</span>
+            <span class="n">command</span> <span class="o">+=</span> <span class="s">&quot;;&quot;</span>
+      
+        <span class="c"># The exit code of the command will be stored in ecodefile</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot; { </span><span class="si">%(command)s</span><span class="s"> } ; echo $? &gt; </span><span class="si">%(ecodefile)s</span><span class="s"> ;&quot;</span> <span class="o">%</span> <span class="p">{</span>
+                <span class="s">&#39;command&#39;</span><span class="p">:</span> <span class="n">command</span><span class="p">,</span>
+                <span class="s">&#39;ecodefile&#39;</span><span class="p">:</span> <span class="n">ecodefile</span><span class="p">,</span>
+                <span class="p">}</span> 
+
+        <span class="c"># Export environment</span>
+        <span class="n">environ</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_environment</span><span class="p">(</span><span class="n">env</span><span class="p">)</span>
+
+        <span class="c"># Add environ to command</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="n">environ</span> <span class="o">+</span> <span class="n">command</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">upload</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="n">shfile</span><span class="p">,</span> <span class="n">text</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="n">overwrite</span><span class="o">=</span><span class="n">overwrite</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxNode.format_environment"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.format_environment">[docs]</a>    <span class="k">def</span> <span class="nf">format_environment</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">env</span><span class="p">,</span> <span class="n">inline</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Formats the environment variables for a command to be executed</span>
+<span class="sd">        either as an inline command</span>
+<span class="sd">        (i.e. export PYTHONPATH=src/..; export LALAL= ..;python script.py) or </span>
+<span class="sd">        as a bash script (i.e. export PYTHONPATH=src/.. \n export LALA=.. \n)</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">env</span><span class="p">:</span> <span class="k">return</span> <span class="s">&quot;&quot;</span>
+
+        <span class="c"># Remove extra white spaces</span>
+        <span class="n">env</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s">r&#39;\s+&#39;</span><span class="p">,</span> <span class="s">&#39; &#39;</span><span class="p">,</span> <span class="n">env</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
+
+        <span class="n">sep</span> <span class="o">=</span> <span class="s">&quot;;&quot;</span> <span class="k">if</span> <span class="n">inline</span> <span class="k">else</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span>
+        <span class="k">return</span> <span class="n">sep</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="k">lambda</span> <span class="n">e</span><span class="p">:</span> <span class="s">&quot; export </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">e</span><span class="p">,</span> <span class="n">env</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot; &quot;</span><span class="p">)))</span> <span class="o">+</span> <span class="n">sep</span> 
+</div>
+<div class="viewcode-block" id="LinuxNode.check_errors"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.check_errors">[docs]</a>    <span class="k">def</span> <span class="nf">check_errors</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">home</span><span class="p">,</span> 
+            <span class="n">ecodefile</span> <span class="o">=</span> <span class="s">&quot;exitcode&quot;</span><span class="p">,</span> 
+            <span class="n">stderr</span> <span class="o">=</span> <span class="s">&quot;stderr&quot;</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Checks whether errors occurred while running a command.</span>
+<span class="sd">        It first checks the exit code for the command, and only if the</span>
+<span class="sd">        exit code is an error one it returns the error output.</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">proc</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="n">err</span> <span class="o">=</span> <span class="s">&quot;&quot;</span>
+
+        <span class="c"># get exit code saved in the &#39;exitcode&#39; file</span>
+        <span class="n">ecode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">exitcode</span><span class="p">(</span><span class="n">home</span><span class="p">,</span> <span class="n">ecodefile</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">ecode</span> <span class="ow">in</span> <span class="p">[</span> <span class="n">ExitCode</span><span class="o">.</span><span class="n">CORRUPTFILE</span><span class="p">,</span> <span class="n">ExitCode</span><span class="o">.</span><span class="n">ERROR</span> <span class="p">]:</span>
+            <span class="n">err</span> <span class="o">=</span> <span class="s">&quot;Error retrieving exit code status from file </span><span class="si">%s</span><span class="s">/</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">home</span><span class="p">,</span> <span class="n">ecodefile</span><span class="p">)</span>
+        <span class="k">elif</span> <span class="n">ecode</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">ecode</span> <span class="o">==</span> <span class="n">ExitCode</span><span class="o">.</span><span class="n">FILENOTFOUND</span><span class="p">:</span>
+            <span class="c"># The process returned an error code or didn&#39;t exist. </span>
+            <span class="c"># Check standard error.</span>
+            <span class="p">(</span><span class="n">err</span><span class="p">,</span> <span class="n">eerr</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">check_output</span><span class="p">(</span><span class="n">home</span><span class="p">,</span> <span class="n">stderr</span><span class="p">)</span>
+
+            <span class="c"># If the stderr file was not found, assume nothing bad happened,</span>
+            <span class="c"># and just ignore the error.</span>
+            <span class="c"># (cat returns 1 for error &quot;No such file or directory&quot;)</span>
+            <span class="k">if</span> <span class="n">ecode</span> <span class="o">==</span> <span class="n">ExitCode</span><span class="o">.</span><span class="n">FILENOTFOUND</span> <span class="ow">and</span> <span class="n">proc</span><span class="o">.</span><span class="n">poll</span><span class="p">()</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span> 
+                <span class="n">err</span> <span class="o">=</span> <span class="s">&quot;&quot;</span> 
+            
+        <span class="k">return</span> <span class="p">(</span><span class="s">&quot;&quot;</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span>
+ </div>
+<div class="viewcode-block" id="LinuxNode.wait_pid"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.wait_pid">[docs]</a>    <span class="k">def</span> <span class="nf">wait_pid</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">home</span><span class="p">,</span> <span class="n">pidfile</span> <span class="o">=</span> <span class="s">&quot;pidfile&quot;</span><span class="p">,</span> <span class="n">raise_on_error</span> <span class="o">=</span> <span class="bp">False</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Waits until the pid file for the command is generated, </span>
+<span class="sd">            and returns the pid and ppid of the process &quot;&quot;&quot;</span>
+        <span class="n">pid</span> <span class="o">=</span> <span class="n">ppid</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="n">delay</span> <span class="o">=</span> <span class="mf">1.0</span>
+
+        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="mi">2</span><span class="p">):</span>
+            <span class="n">pidtuple</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">getpid</span><span class="p">(</span><span class="n">home</span> <span class="o">=</span> <span class="n">home</span><span class="p">,</span> <span class="n">pidfile</span> <span class="o">=</span> <span class="n">pidfile</span><span class="p">)</span>
+            
+            <span class="k">if</span> <span class="n">pidtuple</span><span class="p">:</span>
+                <span class="n">pid</span><span class="p">,</span> <span class="n">ppid</span> <span class="o">=</span> <span class="n">pidtuple</span>
+                <span class="k">break</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="n">delay</span><span class="p">)</span>
+                <span class="n">delay</span> <span class="o">=</span> <span class="n">delay</span> <span class="o">*</span> <span class="mf">1.5</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Failed to get pid for pidfile </span><span class="si">%s</span><span class="s">/</span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="p">(</span>
+                    <span class="n">home</span><span class="p">,</span> <span class="n">pidfile</span> <span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            
+            <span class="k">if</span> <span class="n">raise_on_error</span><span class="p">:</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">return</span> <span class="n">pid</span><span class="p">,</span> <span class="n">ppid</span>
+</div>
+<div class="viewcode-block" id="LinuxNode.wait_run"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.wait_run">[docs]</a>    <span class="k">def</span> <span class="nf">wait_run</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">pid</span><span class="p">,</span> <span class="n">ppid</span><span class="p">,</span> <span class="n">trial</span> <span class="o">=</span> <span class="mi">0</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; wait for a remote process to finish execution &quot;&quot;&quot;</span>
+        <span class="n">delay</span> <span class="o">=</span> <span class="mf">1.0</span>
+
+        <span class="k">while</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">status</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">status</span><span class="p">(</span><span class="n">pid</span><span class="p">,</span> <span class="n">ppid</span><span class="p">)</span>
+            
+            <span class="k">if</span> <span class="n">status</span> <span class="ow">is</span> <span class="n">ProcStatus</span><span class="o">.</span><span class="n">FINISHED</span><span class="p">:</span>
+                <span class="k">break</span>
+            <span class="k">elif</span> <span class="n">status</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">ProcStatus</span><span class="o">.</span><span class="n">RUNNING</span><span class="p">:</span>
+                <span class="n">delay</span> <span class="o">=</span> <span class="n">delay</span> <span class="o">*</span> <span class="mf">1.5</span>
+                <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="n">delay</span><span class="p">)</span>
+                <span class="c"># If it takes more than 20 seconds to start, then</span>
+                <span class="c"># asume something went wrong</span>
+                <span class="k">if</span> <span class="n">delay</span> <span class="o">&gt;</span> <span class="mi">20</span><span class="p">:</span>
+                    <span class="k">break</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="c"># The app is running, just wait...</span>
+                <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mf">0.5</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxNode.check_output"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.check_output">[docs]</a>    <span class="k">def</span> <span class="nf">check_output</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">home</span><span class="p">,</span> <span class="n">filename</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Retrives content of file &quot;&quot;&quot;</span>
+        <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s">&quot;cat </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> 
+            <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">home</span><span class="p">,</span> <span class="n">filename</span><span class="p">),</span> <span class="n">retry</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">with_lock</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+        <span class="k">return</span> <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span>
+</div>
+<div class="viewcode-block" id="LinuxNode.is_alive"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.is_alive">[docs]</a>    <span class="k">def</span> <span class="nf">is_alive</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Checks if host is responsive</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">localhost</span><span class="p">:</span>
+            <span class="k">return</span> <span class="bp">True</span>
+
+        <span class="n">out</span> <span class="o">=</span> <span class="n">err</span> <span class="o">=</span> <span class="s">&quot;&quot;</span>
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Unresponsive host. Wrong answer. &quot;</span>
+
+        <span class="c"># The underlying SSH layer will sometimes return an empty</span>
+        <span class="c"># output (even if the command was executed without errors).</span>
+        <span class="c"># To work arround this, repeat the operation N times or</span>
+        <span class="c"># until the result is not empty string</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s">&quot;echo &#39;ALIVE&#39;&quot;</span><span class="p">,</span>
+                    <span class="n">blocking</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span>
+                    <span class="n">with_lock</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+    
+            <span class="k">if</span> <span class="n">out</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&quot;ALIVE&quot;</span><span class="p">)</span> <span class="o">&gt;</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
+                <span class="k">return</span> <span class="bp">True</span>
+        <span class="k">except</span><span class="p">:</span>
+            <span class="n">trace</span> <span class="o">=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">()</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Unresponsive host. Error reaching host: </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="n">trace</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+        <span class="k">return</span> <span class="bp">False</span>
+</div>
+<div class="viewcode-block" id="LinuxNode.find_home"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.find_home">[docs]</a>    <span class="k">def</span> <span class="nf">find_home</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Retrieves host home directory</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="c"># The underlying SSH layer will sometimes return an empty</span>
+        <span class="c"># output (even if the command was executed without errors).</span>
+        <span class="c"># To work arround this, repeat the operation N times or</span>
+        <span class="c"># until the result is not empty string</span>
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Impossible to retrieve HOME directory&quot;</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s">&quot;echo ${HOME}&quot;</span><span class="p">,</span>
+                    <span class="n">blocking</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span>
+                    <span class="n">with_lock</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+    
+            <span class="k">if</span> <span class="n">out</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="o">!=</span> <span class="s">&quot;&quot;</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_home_dir</span> <span class="o">=</span>  <span class="n">out</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
+        <span class="k">except</span><span class="p">:</span>
+            <span class="n">trace</span> <span class="o">=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">()</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Impossible to retrieve HOME directory </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">trace</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_home_dir</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+</div>
+<div class="viewcode-block" id="LinuxNode.filter_existing_files"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.filter_existing_files">[docs]</a>    <span class="k">def</span> <span class="nf">filter_existing_files</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">src</span><span class="p">,</span> <span class="n">dst</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Removes files that already exist in the Linux host from src list</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="c"># construct a dictionary with { dst: src }</span>
+        <span class="n">dests</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="k">lambda</span> <span class="n">s</span><span class="p">:</span> <span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">dst</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">s</span><span class="p">)),</span> <span class="n">s</span><span class="p">),</span> <span class="n">src</span><span class="p">))</span> \
+                    <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">src</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">else</span> <span class="nb">dict</span><span class="p">({</span><span class="n">dst</span><span class="p">:</span> <span class="n">src</span><span class="p">[</span><span class="mi">0</span><span class="p">]})</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">dests</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot; [ -f </span><span class="si">%(dst)s</span><span class="s"> ] &amp;&amp; echo &#39;</span><span class="si">%(dst)s</span><span class="s">&#39; &quot;</span> <span class="o">%</span> <span class="p">{</span><span class="s">&#39;dst&#39;</span> <span class="p">:</span> <span class="n">d</span><span class="p">}</span> <span class="p">)</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot;;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+
+        <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="n">retry</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">with_lock</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+    
+        <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">dests</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
+            <span class="k">if</span> <span class="n">out</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">d</span><span class="p">)</span> <span class="o">&gt;</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
+                <span class="k">del</span> <span class="n">dests</span><span class="p">[</span><span class="n">d</span><span class="p">]</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">dests</span><span class="p">:</span>
+            <span class="k">return</span> <span class="p">[]</span>
+
+        <span class="k">return</span> <span class="n">dests</span><span class="o">.</span><span class="n">values</span><span class="p">()</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/nping.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/nping.html
new file mode 100644 (file)
index 0000000..e4c334a
--- /dev/null
@@ -0,0 +1,312 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.nping &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.nping</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.application</span> <span class="kn">import</span> <span class="n">LinuxApplication</span>
+<span class="kn">from</span> <span class="nn">nepi.util.timefuncs</span> <span class="kn">import</span> <span class="n">tnow</span>
+
+<span class="kn">import</span> <span class="nn">os</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="LinuxNPing"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.nping.LinuxNPing">[docs]</a><span class="k">class</span> <span class="nc">LinuxNPing</span><span class="p">(</span><span class="n">LinuxApplication</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;linux::NPing&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">c</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;c&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets nping -c option. &quot;</span>
+            <span class="s">&quot;Stop after a given number of rounds. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">e</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;e&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets nping -e option. &quot;</span>
+            <span class="s">&quot;Set the network interface to be used.&quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">delay</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;delay&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets nping --delay option. &quot;</span>
+            <span class="s">&quot;Delay between probes &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">rate</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;rate&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets nping --rate option. &quot;</span>
+            <span class="s">&quot;Send probes at a given rate &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">ttl</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ttl&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets nping --ttl option. &quot;</span>
+            <span class="s">&quot;Time To Live. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">p</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;p&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets nping -p option. &quot;</span>
+            <span class="s">&quot;Target ports. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">tcp</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;tcp&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets nping --tcp option. &quot;</span>
+            <span class="s">&quot;TCP mode. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">udp</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;udp&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets nping --udp option. &quot;</span>
+            <span class="s">&quot;UDP mode. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">icmp</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;icmp&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets nping --icmp option. &quot;</span>
+            <span class="s">&quot;ICMP mode. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">arp</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;arp&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets nping --arp option. &quot;</span>
+            <span class="s">&quot;ARP mode. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">traceroute</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;traceroute&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets nping --traceroute option. &quot;</span>
+            <span class="s">&quot;Traceroute mode. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">countinuous</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;continuous&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Run nping in a while loop&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">print_timestamp</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;printTimestamp&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Print timestamp before running nping&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">target</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;target&quot;</span><span class="p">,</span>
+            <span class="s">&quot;nping target host (host that will be pinged)&quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">delay</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">rate</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ttl</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">tcp</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">udp</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">icmp</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">arp</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">traceroute</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">countinuous</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">print_timestamp</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxNPing</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;nping-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_sudo_kill</span> <span class="o">=</span> <span class="bp">True</span>
+
+<div class="viewcode-block" id="LinuxNPing.do_deploy"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.nping.LinuxNPing.do_deploy">[docs]</a>    <span class="k">def</span> <span class="nf">do_deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_start_command</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;install&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;install&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_install</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">,</span> <span class="s">&quot;PATH=$PATH:/usr/sbin/&quot;</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;depends&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;depends&quot;</span><span class="p">,</span> <span class="s">&quot;nmap&quot;</span><span class="p">)</span>
+
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxNPing</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_deploy</span><span class="p">()</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_start_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;continuous&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;while true; do &quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;printTimestamp&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;&quot;&quot;echo &quot;`date +&#39;%Y%m</span><span class="si">%d</span><span class="s">%H%M%S&#39;`&quot;;&quot;&quot;&quot;</span><span class="p">)</span>
+        <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;sudo -S nping &quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;c&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-c </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;c&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;e&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-e </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;e&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;delay&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;--delay </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;delay&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;rate&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;--rate </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;rate&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ttl&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;--ttl </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ttl&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;p&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-p </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;p&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;tcp&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;--tcp&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;udp&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;--udp&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;icmp&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;--icmp&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;arp&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;--arp&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;traceroute&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;--traceroute&quot;</span><span class="p">)</span>
+
+        <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;target&quot;</span><span class="p">))</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;continuous&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;; done &quot;</span><span class="p">)</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">command</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_install</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">install</span>  <span class="o">=</span> <span class="s">&quot;echo &#39;nothing to do&#39;&quot;</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">use_rpm</span><span class="p">:</span>
+            <span class="n">install</span> <span class="o">=</span> <span class="p">(</span>
+                <span class="s">&quot; ( &quot;</span>
+                <span class="s">&quot;  ( &quot;</span>
+                <span class="s">&quot;   if [ `uname -m` == &#39;x86_64&#39; ]; then &quot;</span>
+                <span class="s">&quot;     wget -O nping.rpm http://nmap.org/dist/nping-0.6.25-1.x86_64.rpm ;&quot;</span>
+                <span class="s">&quot;   else wget -O nping.rpm http://nmap.org/dist/nping-0.6.25-1.i386.rpm ;&quot;</span>
+                <span class="s">&quot;   fi &quot;</span>
+                <span class="s">&quot; )&quot;</span>
+                <span class="s">&quot; &amp;&amp; sudo -S rpm -vhU nping.rpm ) &quot;</span><span class="p">)</span>
+        <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">use_deb</span><span class="p">:</span>
+            <span class="kn">from</span> <span class="nn">nepi.resources.linux</span> <span class="kn">import</span> <span class="n">debfuncs</span> 
+            <span class="n">install_alien</span> <span class="o">=</span> <span class="n">debfuncs</span><span class="o">.</span><span class="n">install_packages_command</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">os</span><span class="p">,</span> <span class="s">&quot;alien gcc&quot;</span><span class="p">)</span>
+            <span class="n">install</span> <span class="o">=</span> <span class="p">(</span>
+                <span class="s">&quot; ( &quot;</span>
+                <span class="s">&quot;  ( &quot;</span>
+                <span class="s">&quot;   if [ `uname -m` == &#39;x86_64&#39; ]; then &quot;</span>
+                <span class="s">&quot;     wget -O nping.rpm http://nmap.org/dist/nping-0.6.25-1.x86_64.rpm ;&quot;</span>
+                <span class="s">&quot;   else wget -O nping.rpm http://nmap.org/dist/nping-0.6.25-1.i386.rpm ;&quot;</span>
+                <span class="s">&quot;   fi &quot;</span>
+                <span class="s">&quot; )&quot;</span>
+                <span class="s">&quot; &amp;&amp; </span><span class="si">%s</span><span class="s"> &amp;&amp; sudo alien -i nping.rpm ) &quot;</span> <span class="o">%</span> <span class="n">install_alien</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="p">(</span><span class="s">&quot;( nping --version || </span><span class="si">%s</span><span class="s"> )&quot;</span> <span class="o">%</span> <span class="n">install</span><span class="p">)</span>
+
+<div class="viewcode-block" id="LinuxNPing.valid_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.nping.LinuxNPing.valid_connection">[docs]</a>    <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="c"># TODO: Validate!</span>
+        <span class="k">return</span> <span class="bp">True</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/ns3/ccn/ns3ccncatdceapplication.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/ns3/ccn/ns3ccncatdceapplication.html
new file mode 100644 (file)
index 0000000..600a423
--- /dev/null
@@ -0,0 +1,153 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.ns3.ccn.ns3ccncatdceapplication &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.ns3.ccn.ns3ccncatdceapplication</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span><span class="p">,</span> <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.ns3.ccn.ns3ccndceapplication</span> <span class="kn">import</span> <span class="n">LinuxNS3CCNDceApplication</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="LinuxNS3DceCCNCat"><a class="viewcode-back" href="../../../../../../_layout/nepi.resources.linux.ns3.ccn.html#nepi.resources.linux.ns3.ccn.ns3ccncatdceapplication.LinuxNS3DceCCNCat">[docs]</a><span class="k">class</span> <span class="nc">LinuxNS3DceCCNCat</span><span class="p">(</span><span class="n">LinuxNS3CCNDceApplication</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;linux::ns3::dce::CCNCat&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">content_name</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;contentName&quot;</span><span class="p">,</span>
+                <span class="s">&quot;Content name for the requested content object. &quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">content_name</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_instantiate_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;binary&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;binary&quot;</span><span class="p">,</span> <span class="s">&quot;ccncat&quot;</span><span class="p">)</span>
+            
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;contentName&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;arguments&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;contentName&quot;</span><span class="p">))</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;stdinFile&quot;</span><span class="p">,</span> <span class="s">&quot;&quot;</span><span class="p">)</span>
+
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxNS3DceCCNCat</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">_instantiate_object</span><span class="p">()</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_arguments</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">args</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;-v&quot;</span><span class="p">,</span> <span class="s">&quot;add&quot;</span><span class="p">]</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;uri&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;uri&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;protocol&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;protocol&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;host&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;host&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;port&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;port&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ip&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ip&quot;</span><span class="p">))</span>
+
+        <span class="k">return</span> <span class="s">&quot;;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> 
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/ns3/ccn/ns3ccndceapplication.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/ns3/ccn/ns3ccndceapplication.html
new file mode 100644 (file)
index 0000000..86012dc
--- /dev/null
@@ -0,0 +1,198 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.ns3.ccn.ns3ccndceapplication &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.ns3.ccn.ns3ccndceapplication</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span><span class="p">,</span> <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3ccndceapplication</span> <span class="kn">import</span> <span class="n">NS3BaseCCNDceApplication</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="LinuxNS3CCNDceApplication"><a class="viewcode-back" href="../../../../../../_layout/nepi.resources.linux.ns3.ccn.html#nepi.resources.linux.ns3.ccn.ns3ccndceapplication.LinuxNS3CCNDceApplication">[docs]</a><span class="k">class</span> <span class="nc">LinuxNS3CCNDceApplication</span><span class="p">(</span><span class="n">NS3BaseCCNDceApplication</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;linux::ns3::dce::CCNApplication&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">sources</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;sources&quot;</span><span class="p">,</span>
+                <span class="s">&quot;Path to tar.gz file with sources for the application execute in DCE. &quot;</span>
+                <span class="s">&quot;Sources will be uploaded to ${SRC} and it is the responsibility of &quot;</span>
+                <span class="s">&quot;the build instructions (in the build attribute) to copy the compiled &quot;</span>
+                <span class="s">&quot;binaries to the ${BIN_DCE} directory&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">build</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;build&quot;</span><span class="p">,</span>
+                <span class="s">&quot;Instructions to compile sources DCE-compatible way. &quot;</span>
+                <span class="s">&quot;Note that sources will be uploaded to ${SRC} and the &quot;</span>
+                <span class="s">&quot;build instructions are responsible for copying the &quot;</span>
+                <span class="s">&quot;binaries to the ${BIN_DCE} directory. &quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">depends</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;depends&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;Space-separated list of packages required to run the application&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">files</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;files&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;Semi-colon separated list of &#39;key=value&#39; pairs to set as &quot;</span>
+                <span class="s">&quot;DCE files (AddFile). The key should be a path to a local file &quot;</span>
+                <span class="s">&quot;and the key is the path to be set in DCE for that file&quot;</span> <span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">stdinfile</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;stdinFile&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;File to set as StdinFile. The value shoudl be either an empty &quot;</span>
+                <span class="s">&quot;or a path to a local file &quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+        
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">sources</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">build</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">depends</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">files</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">stdinfile</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_instantiate_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="p">[]</span>
+
+        <span class="c"># Install package dependencies required to run the binary </span>
+        <span class="n">depends</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;depends&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">depends</span><span class="p">:</span>
+            <span class="n">dcmd</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">install_dependencies</span><span class="p">(</span><span class="n">depends</span> <span class="o">=</span> <span class="n">depends</span><span class="p">)</span>
+            <span class="k">if</span> <span class="n">dcmd</span><span class="p">:</span>
+                <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">dcmd</span><span class="p">)</span>
+       
+        <span class="c"># Upload sources to generate the binary</span>
+        <span class="n">sources</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;sources&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">sources</span><span class="p">:</span>
+            <span class="n">scmd</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">upload_extra_sources</span><span class="p">(</span><span class="n">sources</span> <span class="o">=</span> <span class="n">sources</span><span class="p">)</span>
+            <span class="k">if</span> <span class="n">scmd</span><span class="p">:</span>
+                <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">scmd</span><span class="p">)</span>
+                
+        <span class="c"># Upload instructions to build the binary</span>
+        <span class="n">build</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;build&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">build</span><span class="p">:</span>
+            <span class="n">bcmd</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">build</span> <span class="o">=</span> <span class="n">build</span><span class="p">)</span>
+            <span class="k">if</span> <span class="n">bcmd</span><span class="p">:</span>
+                <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">bcmd</span><span class="p">)</span>
+
+        <span class="c"># Upload CCN files (e.g. repo)</span>
+        <span class="n">files</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;files&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">files</span><span class="p">:</span>
+            <span class="n">upload</span> <span class="o">=</span> <span class="p">[]</span>
+            <span class="k">for</span> <span class="nb">file</span> <span class="ow">in</span> <span class="nb">map</span><span class="p">(</span><span class="nb">str</span><span class="o">.</span><span class="n">strip</span><span class="p">,</span> <span class="n">files</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;;&quot;</span><span class="p">)):</span>
+                <span class="n">localpath</span><span class="p">,</span> <span class="n">dcepath</span> <span class="o">=</span> <span class="n">files</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;=&quot;</span><span class="p">)</span>
+                <span class="n">upload</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">localpath</span><span class="p">)</span>
+
+            <span class="n">sources</span> <span class="o">=</span> <span class="s">&quot;;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">upload</span><span class="p">)</span>
+            <span class="n">fcmd</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">upload_extra_sources</span><span class="p">(</span><span class="n">sources</span> <span class="o">=</span> <span class="n">sources</span><span class="p">,</span>
+                    <span class="n">src_dir</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">app_home</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="n">fcmd</span><span class="p">:</span>
+                <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">fcmd</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">command</span><span class="p">:</span>
+            <span class="n">deploy_command</span> <span class="o">=</span> <span class="s">&quot;;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+            <span class="n">prefix</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%d</span><span class="s">_deploy&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span> 
+            <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">execute_deploy_command</span><span class="p">(</span><span class="n">deploy_command</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">)</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/ns3/ccn/ns3ccnddceapplication.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/ns3/ccn/ns3ccnddceapplication.html
new file mode 100644 (file)
index 0000000..5c91ab0
--- /dev/null
@@ -0,0 +1,295 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.ns3.ccn.ns3ccnddceapplication &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.ns3.ccn.ns3ccnddceapplication</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span><span class="p">,</span> <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.ns3.ccn.ns3ccndceapplication</span> <span class="kn">import</span> <span class="n">LinuxNS3CCNDceApplication</span>
+
+<span class="kn">import</span> <span class="nn">os</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="LinuxNS3DceCCND"><a class="viewcode-back" href="../../../../../../_layout/nepi.resources.linux.ns3.ccn.html#nepi.resources.linux.ns3.ccn.ns3ccnddceapplication.LinuxNS3DceCCND">[docs]</a><span class="k">class</span> <span class="nc">LinuxNS3DceCCND</span><span class="p">(</span><span class="n">LinuxNS3CCNDceApplication</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;linux::ns3::dce::CCND&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">debug</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;debug&quot;</span><span class="p">,</span> <span class="s">&quot;Sets the CCND_DEBUG environmental variable. &quot;</span>
+            <span class="s">&quot; Allowed values are : </span><span class="se">\n</span><span class="s">&quot;</span>
+            <span class="s">&quot;  0 - no messages </span><span class="se">\n</span><span class="s">&quot;</span>
+            <span class="s">&quot;  1 - basic messages (any non-zero value gets these) </span><span class="se">\n</span><span class="s">&quot;</span>
+            <span class="s">&quot;  2 - interest messages </span><span class="se">\n</span><span class="s">&quot;</span>
+            <span class="s">&quot;  4 - content messages </span><span class="se">\n</span><span class="s">&quot;</span>
+            <span class="s">&quot;  8 - matching details </span><span class="se">\n</span><span class="s">&quot;</span>
+            <span class="s">&quot;  16 - interest details </span><span class="se">\n</span><span class="s">&quot;</span>
+            <span class="s">&quot;  32 - gory interest details </span><span class="se">\n</span><span class="s">&quot;</span>
+            <span class="s">&quot;  64 - log occasional human-readable timestamps </span><span class="se">\n</span><span class="s">&quot;</span>
+            <span class="s">&quot;  128 - face registration debugging </span><span class="se">\n</span><span class="s">&quot;</span>
+            <span class="s">&quot;  -1 - max logging </span><span class="se">\n</span><span class="s">&quot;</span>
+            <span class="s">&quot;  Or apply bitwise OR to these values to get combinations of them&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">port</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;port&quot;</span><span class="p">,</span> <span class="s">&quot;Sets the CCN_LOCAL_PORT environmental variable. &quot;</span>
+            <span class="s">&quot;Defaults to 9695 &quot;</span><span class="p">,</span> 
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+        <span class="n">sockname</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;sockname&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCN_LOCAL_SCOKNAME environmental variable. &quot;</span>
+            <span class="s">&quot;Defaults to /tmp/.ccnd.sock&quot;</span><span class="p">,</span> 
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">capacity</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;capacity&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCND_CAP environmental variable. &quot;</span>
+            <span class="s">&quot;Capacity limit in terms of ContentObjects&quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">mtu</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;mtu&quot;</span><span class="p">,</span> <span class="s">&quot;Sets the CCND_MTU environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+  
+        <span class="n">data_pause</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;dataPauseMicrosec&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCND_DATA_PAUSE_MICROSEC environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">default_stale</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;defaultTimeToStale&quot;</span><span class="p">,</span>
+             <span class="s">&quot;Sets the CCND_DEFAULT_TIME_TO_STALE environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">max_stale</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;maxTimeToStale&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCND_MAX_TIME_TO_STALE environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">max_rte</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;maxRteMicrosec&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCND_MAX_RTE_MICROSEC environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">keystore</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;keyStoreDirectory&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCND_KEYSTORE_DIRECTORY environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">listen_on</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;listenOn&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCND_LISTEN_ON environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">autoreg</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;autoreg&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCND_AUTOREG environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">prefix</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;prefix&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCND_PREFIX environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">debug</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">port</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">sockname</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">capacity</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">mtu</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">data_pause</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">default_stale</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">max_stale</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">max_rte</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">keystore</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">listen_on</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">autoreg</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">prefix</span><span class="p">)</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNS3DceCCND.version"><a class="viewcode-back" href="../../../../../../_layout/nepi.resources.linux.ns3.ccn.html#nepi.resources.linux.ns3.ccn.ns3ccnddceapplication.LinuxNS3DceCCND.version">[docs]</a>    <span class="k">def</span> <span class="nf">version</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_version</span>
+</div>
+    <span class="k">def</span> <span class="nf">_instantiate_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;depends&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;depends&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_dependencies</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;sources&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;sources&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_sources</span><span class="p">)</span>
+
+        <span class="n">sources</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;sources&quot;</span><span class="p">)</span>
+        <span class="n">source</span> <span class="o">=</span> <span class="n">sources</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot; &quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+        <span class="n">basename</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">source</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_version</span> <span class="o">=</span> <span class="p">(</span> <span class="n">basename</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;.tar.gz&quot;</span><span class="p">,</span> <span class="s">&quot;&quot;</span><span class="p">)</span>
+                <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;.tar&quot;</span><span class="p">,</span><span class="s">&quot;&quot;</span><span class="p">)</span>
+                <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;.gz&quot;</span><span class="p">,</span><span class="s">&quot;&quot;</span><span class="p">)</span>
+                <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;.zip&quot;</span><span class="p">,</span><span class="s">&quot;&quot;</span><span class="p">)</span> <span class="p">)</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;build&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;build&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_build</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;binary&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;binary&quot;</span><span class="p">,</span> <span class="s">&quot;ccnd&quot;</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;environment&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;environment&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_environment</span><span class="p">)</span>
+        
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxNS3DceCCND</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">_instantiate_object</span><span class="p">()</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_dependencies</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">use_rpm</span><span class="p">:</span>
+            <span class="k">return</span> <span class="p">(</span> <span class="s">&quot; autoconf openssl-devel  expat-devel libpcap-devel &quot;</span>
+                <span class="s">&quot; ecryptfs-utils-devel libxml2-devel automake gawk &quot;</span> 
+                <span class="s">&quot; gcc gcc-c++ git pcre-devel make &quot;</span><span class="p">)</span>
+        <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">use_deb</span><span class="p">:</span>
+            <span class="k">return</span> <span class="p">(</span> <span class="s">&quot; autoconf libssl-dev libexpat1-dev libpcap-dev &quot;</span>
+                <span class="s">&quot; libecryptfs0 libxml2-utils automake gawk gcc g++ &quot;</span>
+                <span class="s">&quot; git-core pkg-config libpcre3-dev make &quot;</span><span class="p">)</span>
+        <span class="k">return</span> <span class="s">&quot;&quot;</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_sources</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="c">#return &quot;http://www.ccnx.org/releases/ccnx-0.8.1.tar.gz&quot;</span>
+        <span class="k">return</span> <span class="s">&quot;http://www.ccnx.org/releases/ccnx-0.8.2.tar.gz&quot;</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_build</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">sources</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;sources&quot;</span><span class="p">)</span>
+        <span class="n">source</span> <span class="o">=</span> <span class="n">sources</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot; &quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+        <span class="n">tar</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">source</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="p">(</span>
+            <span class="c"># Evaluate if ccnx binaries are already installed</span>
+            <span class="s">&quot; ( &quot;</span>
+                <span class="s">&quot; test -f ${BIN_DCE}/ccnd &amp;&amp; &quot;</span>
+                <span class="s">&quot; echo &#39;binaries found, nothing to do&#39; &quot;</span>
+            <span class="s">&quot; ) || &quot;</span>
+            <span class="c"># If not, untar and build</span>
+            <span class="s">&quot; ( &quot;</span>
+                <span class="s">&quot; tar zxf ${SRC}/</span><span class="si">%(tar)s</span><span class="s">  &amp;&amp; &quot;</span>
+                <span class="s">&quot; cd </span><span class="si">%(version)s</span><span class="s"> &amp;&amp; &quot;</span>
+                <span class="s">&quot; INSTALL_BASE=${BIN_DCE}/.. ./configure &amp;&amp; &quot;</span>
+                <span class="s">&quot; make MORE_LDLIBS=&#39;-pie -rdynamic&#39; &amp;&amp; &quot;</span>
+                <span class="s">&quot; make install &amp;&amp; &quot;</span>
+                <span class="s">&quot; cp ${BIN_DCE}/../bin/ccn* ${BIN_DCE} &amp;&amp; &quot;</span>
+                <span class="s">&quot; cd -&quot;</span>
+             <span class="s">&quot; )&quot;</span><span class="p">)</span> <span class="o">%</span> <span class="p">({</span> <span class="s">&#39;tar&#39;</span><span class="p">:</span> <span class="n">tar</span><span class="p">,</span>
+                        <span class="s">&#39;version&#39;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">version</span>
+                 <span class="p">})</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_environment</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">envs</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">({</span>
+            <span class="s">&quot;debug&quot;</span><span class="p">:</span> <span class="s">&quot;CCND_DEBUG&quot;</span><span class="p">,</span>
+            <span class="s">&quot;port&quot;</span><span class="p">:</span> <span class="s">&quot;CCN_LOCAL_PORT&quot;</span><span class="p">,</span>
+            <span class="s">&quot;sockname&quot;</span> <span class="p">:</span> <span class="s">&quot;CCN_LOCAL_SOCKNAME&quot;</span><span class="p">,</span>
+            <span class="s">&quot;capacity&quot;</span> <span class="p">:</span> <span class="s">&quot;CCND_CAP&quot;</span><span class="p">,</span>
+            <span class="s">&quot;mtu&quot;</span> <span class="p">:</span> <span class="s">&quot;CCND_MTU&quot;</span><span class="p">,</span>
+            <span class="s">&quot;dataPauseMicrosec&quot;</span> <span class="p">:</span> <span class="s">&quot;CCND_DATA_PAUSE_MICROSEC&quot;</span><span class="p">,</span>
+            <span class="s">&quot;defaultTimeToStale&quot;</span> <span class="p">:</span> <span class="s">&quot;CCND_DEFAULT_TIME_TO_STALE&quot;</span><span class="p">,</span>
+            <span class="s">&quot;maxTimeToStale&quot;</span> <span class="p">:</span> <span class="s">&quot;CCND_MAX_TIME_TO_STALE&quot;</span><span class="p">,</span>
+            <span class="s">&quot;maxRteMicrosec&quot;</span> <span class="p">:</span> <span class="s">&quot;CCND_MAX_RTE_MICROSEC&quot;</span><span class="p">,</span>
+            <span class="s">&quot;keyStoreDirectory&quot;</span> <span class="p">:</span> <span class="s">&quot;CCND_KEYSTORE_DIRECTORY&quot;</span><span class="p">,</span>
+            <span class="s">&quot;listenOn&quot;</span> <span class="p">:</span> <span class="s">&quot;CCND_LISTEN_ON&quot;</span><span class="p">,</span>
+            <span class="s">&quot;autoreg&quot;</span> <span class="p">:</span> <span class="s">&quot;CCND_AUTOREG&quot;</span><span class="p">,</span>
+            <span class="s">&quot;prefix&quot;</span> <span class="p">:</span> <span class="s">&quot;CCND_PREFIX&quot;</span><span class="p">,</span>
+            <span class="p">})</span>
+
+        <span class="n">env</span> <span class="o">=</span> <span class="s">&quot;;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="k">lambda</span> <span class="n">k</span><span class="p">:</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">=</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">envs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">k</span><span class="p">),</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">k</span><span class="p">))),</span> 
+            <span class="p">[</span><span class="n">k</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">envs</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">k</span><span class="p">)]))</span>
+
+        <span class="k">return</span> <span class="n">env</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/ns3/ccn/ns3ccnpeekdceapplication.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/ns3/ccn/ns3ccnpeekdceapplication.html
new file mode 100644 (file)
index 0000000..04d2773
--- /dev/null
@@ -0,0 +1,136 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.ns3.ccn.ns3ccnpeekdceapplication &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.ns3.ccn.ns3ccnpeekdceapplication</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span><span class="p">,</span> <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.ns3.ccn.ns3ccndceapplication</span> <span class="kn">import</span> <span class="n">LinuxNS3CCNDceApplication</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="LinuxNS3DceCCNPeek"><a class="viewcode-back" href="../../../../../../_layout/nepi.resources.linux.ns3.ccn.html#nepi.resources.linux.ns3.ccn.ns3ccnpeekdceapplication.LinuxNS3DceCCNPeek">[docs]</a><span class="k">class</span> <span class="nc">LinuxNS3DceCCNPeek</span><span class="p">(</span><span class="n">LinuxNS3CCNDceApplication</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;linux::ns3::dce::CCNPeek&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">content_name</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;contentName&quot;</span><span class="p">,</span>
+                <span class="s">&quot;Content name for the requested content object. &quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">content_name</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_instantiate_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;binary&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;binary&quot;</span><span class="p">,</span> <span class="s">&quot;ccnpeek&quot;</span><span class="p">)</span>
+            
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;contentName&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;arguments&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;contentName&quot;</span><span class="p">))</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;stdinFile&quot;</span><span class="p">,</span> <span class="s">&quot;&quot;</span><span class="p">)</span>
+
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxNS3DceCCNPeek</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">_instantiate_object</span><span class="p">()</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/ns3/ccn/ns3ccnpokedceapplication.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/ns3/ccn/ns3ccnpokedceapplication.html
new file mode 100644 (file)
index 0000000..76a1455
--- /dev/null
@@ -0,0 +1,155 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.ns3.ccn.ns3ccnpokedceapplication &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.ns3.ccn.ns3ccnpokedceapplication</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span><span class="p">,</span> <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.ns3.ccn.ns3ccndceapplication</span> \
+        <span class="kn">import</span> <span class="n">LinuxNS3CCNDceApplication</span>
+
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">tempfile</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="LinuxNS3DceCCNPoke"><a class="viewcode-back" href="../../../../../../_layout/nepi.resources.linux.ns3.ccn.html#nepi.resources.linux.ns3.ccn.ns3ccnpokedceapplication.LinuxNS3DceCCNPoke">[docs]</a><span class="k">class</span> <span class="nc">LinuxNS3DceCCNPoke</span><span class="p">(</span><span class="n">LinuxNS3CCNDceApplication</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;linux::ns3::dce::CCNPoke&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">content_name</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;contentName&quot;</span><span class="p">,</span>
+                <span class="s">&quot;Content name for the requested content object. &quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+        <span class="n">content</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;content&quot;</span><span class="p">,</span>
+                <span class="s">&quot;Content to poke (as a text string). &quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">content_name</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">content</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_instantiate_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;binary&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;binary&quot;</span><span class="p">,</span> <span class="s">&quot;ccnpoke&quot;</span><span class="p">)</span>
+            
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;contentName&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;arguments&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;contentName&quot;</span><span class="p">))</span>
+
+        <span class="c"># Create temporary local file to store content</span>
+        <span class="n">content</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;content&quot;</span><span class="p">)</span>
+        <span class="n">f</span> <span class="o">=</span> <span class="n">tempfile</span><span class="o">.</span><span class="n">NamedTemporaryFile</span><span class="p">(</span><span class="n">delete</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
+        <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">content</span><span class="p">)</span>
+        <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+        <span class="n">localpath</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">name</span>
+        <span class="n">dcepath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s">&quot;/tmp&quot;</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">localpath</span><span class="p">))</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;environment&quot;</span><span class="p">,</span> <span class="s">&quot;HOME=/root&quot;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;files&quot;</span><span class="p">,</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">=</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">localpath</span><span class="p">,</span> <span class="n">dcepath</span><span class="p">))</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;stdinFile&quot;</span><span class="p">,</span> <span class="n">dcepath</span><span class="p">)</span>
+
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxNS3DceCCNPoke</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">_instantiate_object</span><span class="p">()</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/ns3/ccn/ns3ccnrdceapplication.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/ns3/ccn/ns3ccnrdceapplication.html
new file mode 100644 (file)
index 0000000..1d1f7d4
--- /dev/null
@@ -0,0 +1,319 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.ns3.ccn.ns3ccnrdceapplication &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.ns3.ccn.ns3ccnrdceapplication</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span><span class="p">,</span> <span class="n">ResourceState</span> 
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.ns3.ccn.ns3ccndceapplication</span> <span class="kn">import</span> <span class="n">LinuxNS3CCNDceApplication</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="LinuxNS3DceCCNR"><a class="viewcode-back" href="../../../../../../_layout/nepi.resources.linux.ns3.ccn.html#nepi.resources.linux.ns3.ccn.ns3ccnrdceapplication.LinuxNS3DceCCNR">[docs]</a><span class="k">class</span> <span class="nc">LinuxNS3DceCCNR</span><span class="p">(</span><span class="n">LinuxNS3CCNDceApplication</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;linux::ns3::dce::CCNR&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">max_fanout</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;maxFanout&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNR_BTREE_MAX_FANOUT environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">max_leaf_entries</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;maxLeafEntries&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNR_BTREE_MAX_LEAF_ENTRIES environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">max_node_bytes</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;maxNodeBytes&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNR_BTREE_MAX_NODE_BYTES environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">max_node_pool</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;maxNodePool&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNR_BTREE_MAX_NODE_POOL environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">content_cache</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;contentCache&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNR_CONTENT_CACHE environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">debug</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;debug&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNR_DEBUG environmental variable. &quot;</span>
+            <span class="s">&quot;Logging level for ccnr. Defaults to WARNING.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Enumerate</span><span class="p">,</span>
+            <span class="n">allowed</span> <span class="o">=</span> <span class="p">[</span>
+                    <span class="s">&quot;NONE&quot;</span><span class="p">,</span>
+                    <span class="s">&quot;SEVERE&quot;</span><span class="p">,</span>
+                    <span class="s">&quot;ERROR&quot;</span><span class="p">,</span>
+                    <span class="s">&quot;WARNING&quot;</span><span class="p">,</span>
+                    <span class="s">&quot;INFO&quot;</span><span class="p">,</span>
+                    <span class="s">&quot;FINE, FINER, FINEST&quot;</span><span class="p">],</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">directory</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;directory&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNR_DIRECTORY environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">global_prefix</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;globalPrefix&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNR_GLOBAL_PREFIX environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">listen_on</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;listenOn&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNR_LISTEN_ON environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">min_send_bufsize</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;minSendBufsize&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNR_MIN_SEND_BUFSIZE environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">proto</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;proto&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNR_PROTO environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">status_port</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;statusPort&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNR_STATUS_PORT environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">start_write_scope_limit</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;startWriteScopeLimit&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNR_START_WRITE_SCOPE_LIMIT environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">ccns_debug</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ccnsDebug&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNS_DEBUG environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">ccns_enable</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ccnsEnable&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNS_ENABLE environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">ccns_faux_error</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ccnsFauxError&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNS_FAUX_ERROR environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">ccns_heartbeat_micros</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ccnsHeartBeatMicros&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNS_HEART_BEAT_MICROS environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">ccns_max_compares_busy</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ccnsMaxComparesBusy&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNS_MAX_COMPARES_BUSY environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">ccns_max_fetch_busy</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ccnsMaxFetchBusy&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNS_MAX_FETCH_BUSY environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">ccns_node_fetch_lifetime</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ccnsNodeFetchLifetime&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNS_NODE_FETCH_LIFETIME environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">ccns_note_err</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ccnsNoteErr&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNS_NOTE_ERR environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">ccns_repo_store</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ccnsRepoStore&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNS_REPO_STORE environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">ccns_root_advise_fresh</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ccnsRootAdviseFresh&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNS_ROOT_ADVISE_FRESH environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">ccns_root_advise_lifetime</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ccnsRootAdviseLifetime&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNS_ROOT_ADVISE_LIFETIME environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">ccns_stable_enabled</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ccnsStableEnabled&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNS_STABLE_ENABLED environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">ccns_sync_scope</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ccnsSyncScope&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets the CCNS_SYNC_SCOPE environmental variable. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">repo_file</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;repoFile1&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The Repository uses $CCNR_DIRECTORY/repoFile1 for &quot;</span>
+            <span class="s">&quot;persistent storage of CCN Content Objects&quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">max_fanout</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">max_leaf_entries</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">max_node_bytes</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">max_node_pool</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">content_cache</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">debug</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">directory</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">global_prefix</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">listen_on</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">min_send_bufsize</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">proto</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">status_port</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">start_write_scope_limit</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ccns_debug</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ccns_enable</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ccns_faux_error</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ccns_heartbeat_micros</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ccns_max_compares_busy</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ccns_max_fetch_busy</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ccns_node_fetch_lifetime</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ccns_note_err</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ccns_repo_store</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ccns_root_advise_fresh</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ccns_root_advise_lifetime</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ccns_stable_enabled</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ccns_sync_scope</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">repo_file</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_instantiate_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;binary&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;binary&quot;</span><span class="p">,</span> <span class="s">&quot;ccnr&quot;</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;environment&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;environment&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_environment</span><span class="p">)</span>
+       
+        <span class="n">repoFile1</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;repoFile1&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">repoFile1</span><span class="p">:</span>
+            <span class="n">env</span> <span class="o">=</span> <span class="s">&quot;CCNR_DIRECTORY=/REPO/&quot;</span> 
+            <span class="n">environment</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;environment&quot;</span><span class="p">)</span>
+            <span class="k">if</span> <span class="n">environment</span><span class="p">:</span>
+                <span class="n">env</span> <span class="o">+=</span> <span class="s">&quot;;&quot;</span> <span class="o">+</span> <span class="n">environment</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;environment&quot;</span><span class="p">,</span> <span class="n">env</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;files&quot;</span><span class="p">,</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">=/REPO/repoFile1&quot;</span> <span class="o">%</span> <span class="n">repoFile1</span><span class="p">)</span> 
+
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxNS3DceCCNR</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">_instantiate_object</span><span class="p">()</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_environment</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">envs</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">({</span>
+            <span class="s">&quot;maxFanout&quot;</span><span class="p">:</span> <span class="s">&quot;CCNR_BTREE_MAX_FANOUT&quot;</span><span class="p">,</span>
+            <span class="s">&quot;maxLeafEntries&quot;</span><span class="p">:</span> <span class="s">&quot;CCNR_BTREE_MAX_LEAF_ENTRIES&quot;</span><span class="p">,</span>
+            <span class="s">&quot;maxNodeBytes&quot;</span><span class="p">:</span> <span class="s">&quot;CCNR_BTREE_MAX_NODE_BYTES&quot;</span><span class="p">,</span>
+            <span class="s">&quot;maxNodePool&quot;</span><span class="p">:</span> <span class="s">&quot;CCNR_BTREE_MAX_NODE_POOL&quot;</span><span class="p">,</span>
+            <span class="s">&quot;contentCache&quot;</span><span class="p">:</span> <span class="s">&quot;CCNR_CONTENT_CACHE&quot;</span><span class="p">,</span>
+            <span class="s">&quot;debug&quot;</span><span class="p">:</span> <span class="s">&quot;CCNR_DEBUG&quot;</span><span class="p">,</span>
+            <span class="s">&quot;directory&quot;</span><span class="p">:</span> <span class="s">&quot;CCNR_DIRECTORY&quot;</span><span class="p">,</span>
+            <span class="s">&quot;globalPrefix&quot;</span><span class="p">:</span> <span class="s">&quot;CCNR_GLOBAL_PREFIX&quot;</span><span class="p">,</span>
+            <span class="s">&quot;listenOn&quot;</span><span class="p">:</span> <span class="s">&quot;CCNR_LISTEN_ON&quot;</span><span class="p">,</span>
+            <span class="s">&quot;minSendBufsize&quot;</span><span class="p">:</span> <span class="s">&quot;CCNR_MIN_SEND_BUFSIZE&quot;</span><span class="p">,</span>
+            <span class="s">&quot;proto&quot;</span><span class="p">:</span> <span class="s">&quot;CCNR_PROTO&quot;</span><span class="p">,</span>
+            <span class="s">&quot;statusPort&quot;</span><span class="p">:</span> <span class="s">&quot;CCNR_STATUS_PORT&quot;</span><span class="p">,</span>
+            <span class="s">&quot;startWriteScopeLimit&quot;</span><span class="p">:</span> <span class="s">&quot;CCNR_START_WRITE_SCOPE_LIMIT&quot;</span><span class="p">,</span>
+            <span class="s">&quot;ccnsDebug&quot;</span><span class="p">:</span> <span class="s">&quot;CCNS_DEBUG&quot;</span><span class="p">,</span>
+            <span class="s">&quot;ccnsEnable&quot;</span><span class="p">:</span> <span class="s">&quot;CCNS_ENABLE&quot;</span><span class="p">,</span>
+            <span class="s">&quot;ccnsFauxError&quot;</span><span class="p">:</span> <span class="s">&quot;CCNS_FAUX_ERROR&quot;</span><span class="p">,</span>
+            <span class="s">&quot;ccnsHeartBeatMicros&quot;</span><span class="p">:</span> <span class="s">&quot;CCNS_HEART_BEAT_MICROS&quot;</span><span class="p">,</span>
+            <span class="s">&quot;ccnsMaxComparesBusy&quot;</span><span class="p">:</span> <span class="s">&quot;CCNS_MAX_COMPARES_BUSY&quot;</span><span class="p">,</span>
+            <span class="s">&quot;ccnsMaxFetchBusy&quot;</span><span class="p">:</span> <span class="s">&quot;CCNS_MAX_FETCH_BUSY&quot;</span><span class="p">,</span>
+            <span class="s">&quot;ccnsNodeFetchLifetime&quot;</span><span class="p">:</span> <span class="s">&quot;CCNS_NODE_FETCH_LIFETIME&quot;</span><span class="p">,</span>
+            <span class="s">&quot;ccnsNoteErr&quot;</span><span class="p">:</span> <span class="s">&quot;CCNS_NOTE_ERR&quot;</span><span class="p">,</span>
+            <span class="s">&quot;ccnsRepoStore&quot;</span><span class="p">:</span> <span class="s">&quot;CCNS_REPO_STORE&quot;</span><span class="p">,</span>
+            <span class="s">&quot;ccnsRootAdviseFresh&quot;</span><span class="p">:</span> <span class="s">&quot;CCNS_ROOT_ADVISE_FRESH&quot;</span><span class="p">,</span>
+            <span class="s">&quot;ccnsRootAdviseLifetime&quot;</span><span class="p">:</span> <span class="s">&quot;CCNS_ROOT_ADVISE_LIFETIME&quot;</span><span class="p">,</span>
+            <span class="s">&quot;ccnsStableEnabled&quot;</span><span class="p">:</span> <span class="s">&quot;CCNS_STABLE_ENABLED&quot;</span><span class="p">,</span>
+            <span class="s">&quot;ccnsSyncScope&quot;</span><span class="p">:</span> <span class="s">&quot;CCNS_SYNC_SCOPE&quot;</span><span class="p">,</span>
+            <span class="p">})</span>
+
+        <span class="n">env</span> <span class="o">=</span> <span class="s">&quot;;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="k">lambda</span> <span class="n">k</span><span class="p">:</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">=</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">envs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">k</span><span class="p">),</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">k</span><span class="p">))),</span> 
+            <span class="p">[</span><span class="n">k</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">envs</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">k</span><span class="p">)]))</span>
+
+        <span class="k">return</span> <span class="n">env</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/ns3/ccn/ns3fibentrydceapplication.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/ns3/ccn/ns3fibentrydceapplication.html
new file mode 100644 (file)
index 0000000..b9cea6f
--- /dev/null
@@ -0,0 +1,196 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.ns3.ccn.ns3fibentrydceapplication &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.ns3.ccn.ns3fibentrydceapplication</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span><span class="p">,</span> <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.ns3.ccn.ns3ccndceapplication</span> <span class="kn">import</span> <span class="n">LinuxNS3CCNDceApplication</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="LinuxNS3DceFIBEntry"><a class="viewcode-back" href="../../../../../../_layout/nepi.resources.linux.ns3.ccn.html#nepi.resources.linux.ns3.ccn.ns3fibentrydceapplication.LinuxNS3DceFIBEntry">[docs]</a><span class="k">class</span> <span class="nc">LinuxNS3DceFIBEntry</span><span class="p">(</span><span class="n">LinuxNS3CCNDceApplication</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;linux::ns3::dce::FIBEntry&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">uri</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;uri&quot;</span><span class="p">,</span>
+                <span class="s">&quot;URI prefix to match and route for this FIB entry&quot;</span><span class="p">,</span>
+                <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ccnx:/&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">protocol</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;protocol&quot;</span><span class="p">,</span>
+                <span class="s">&quot;Transport protocol used in network connection to peer &quot;</span>
+                <span class="s">&quot;for this FIB entry. One of &#39;udp&#39; or &#39;tcp&#39;.&quot;</span><span class="p">,</span>
+                <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Enumerate</span><span class="p">,</span> 
+                <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;udp&quot;</span><span class="p">,</span>
+                <span class="n">allowed</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;udp&quot;</span><span class="p">,</span> <span class="s">&quot;tcp&quot;</span><span class="p">],</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">host</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;host&quot;</span><span class="p">,</span>
+                <span class="s">&quot;Peer hostname used in network connection for this FIB entry. &quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">port</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;port&quot;</span><span class="p">,</span>
+                <span class="s">&quot;Peer port address used in network connection to peer &quot;</span>
+                <span class="s">&quot;for this FIB entry.&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">ip</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ip&quot;</span><span class="p">,</span>
+                <span class="s">&quot;Peer host public IP used in network connection for this FIB entry. &quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">home</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;home&quot;</span><span class="p">,</span> <span class="s">&quot;Sets HOME environmental variable. &quot;</span><span class="p">,</span>
+                <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;/root&quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">uri</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">protocol</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">host</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">port</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ip</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">home</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_instantiate_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;binary&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;binary&quot;</span><span class="p">,</span> <span class="s">&quot;ccndc&quot;</span><span class="p">)</span>
+            
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;arguments&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;arguments&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_arguments</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;environment&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;environment&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_environment</span><span class="p">)</span>
+        
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxNS3DceFIBEntry</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">_instantiate_object</span><span class="p">()</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_environment</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">envs</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">({</span>
+            <span class="s">&quot;home&quot;</span><span class="p">:</span> <span class="s">&quot;HOME&quot;</span><span class="p">,</span>
+            <span class="p">})</span>
+
+        <span class="n">env</span> <span class="o">=</span> <span class="s">&quot;;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="k">lambda</span> <span class="n">k</span><span class="p">:</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">=</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">envs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">k</span><span class="p">),</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">k</span><span class="p">))),</span> 
+            <span class="p">[</span><span class="n">k</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">envs</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">k</span><span class="p">)]))</span>
+
+        <span class="k">return</span> <span class="n">env</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_arguments</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">args</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;-v&quot;</span><span class="p">,</span> <span class="s">&quot;add&quot;</span><span class="p">]</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;uri&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;uri&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;protocol&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;protocol&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;host&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;host&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;port&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;port&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ip&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ip&quot;</span><span class="p">))</span>
+
+        <span class="k">return</span> <span class="s">&quot;;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> 
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/ns3/fdudptunnel.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/ns3/fdudptunnel.html
new file mode 100644 (file)
index 0000000..bbe45c4
--- /dev/null
@@ -0,0 +1,473 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.ns3.fdudptunnel &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.ns3.fdudptunnel</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span><span class="p">,</span> <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.udptunnel</span> <span class="kn">import</span> <span class="n">LinuxUdpTunnel</span>
+<span class="kn">from</span> <span class="nn">nepi.util.sshfuncs</span> <span class="kn">import</span> <span class="n">ProcStatus</span>
+<span class="kn">from</span> <span class="nn">nepi.util.timefuncs</span> <span class="kn">import</span> <span class="n">tnow</span><span class="p">,</span> <span class="n">tdiffsec</span>
+
+<span class="kn">import</span> <span class="nn">base64</span>
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">socket</span>
+<span class="kn">import</span> <span class="nn">time</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="LinuxNs3FdUdpTunnel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel">[docs]</a><span class="k">class</span> <span class="nc">LinuxNs3FdUdpTunnel</span><span class="p">(</span><span class="n">LinuxUdpTunnel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;linux::ns3::FdUdpTunnel&quot;</span>
+    <span class="n">_help</span> <span class="o">=</span> <span class="s">&quot;Constructs a tunnel between two Ns-3 FdNetdevices &quot;</span> \
+            <span class="s">&quot;located in remote Linux nodes using a UDP connection &quot;</span>
+    <span class="n">_platform</span> <span class="o">=</span> <span class="s">&quot;linux::ns3&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">cipher</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;cipher&quot;</span><span class="p">,</span>
+               <span class="s">&quot;Cipher to encript communication. &quot;</span>
+                <span class="s">&quot;One of PLAIN, AES, Blowfish, DES, DES3. &quot;</span><span class="p">,</span>
+                <span class="n">default</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+                <span class="n">allowed</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;PLAIN&quot;</span><span class="p">,</span> <span class="s">&quot;AES&quot;</span><span class="p">,</span> <span class="s">&quot;Blowfish&quot;</span><span class="p">,</span> <span class="s">&quot;DES&quot;</span><span class="p">,</span> <span class="s">&quot;DES3&quot;</span><span class="p">],</span>
+                <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Enumerate</span><span class="p">,</span> 
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cipher_key</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;cipherKey&quot;</span><span class="p">,</span>
+                <span class="s">&quot;Specify a symmetric encryption key with which to protect &quot;</span>
+                <span class="s">&quot;packets across the tunnel. python-crypto must be installed &quot;</span>
+                <span class="s">&quot;on the system.&quot;</span> <span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">txqueuelen</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;txQueueLen&quot;</span><span class="p">,</span>
+                <span class="s">&quot;Specifies the interface&#39;s transmission queue length. &quot;</span>
+                <span class="s">&quot;Defaults to 1000. &quot;</span><span class="p">,</span> 
+                <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span> 
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">bwlimit</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;bwLimit&quot;</span><span class="p">,</span>
+                <span class="s">&quot;Specifies the interface&#39;s emulated bandwidth in bytes &quot;</span>
+                <span class="s">&quot;per second.&quot;</span><span class="p">,</span>
+                <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span> 
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">cipher</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">cipher_key</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">txqueuelen</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">bwlimit</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxUdpTunnel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;fd-udp-tunnel-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_pids</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_fd1</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_fd1node</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_fd2</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_fd2node</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_pi</span> <span class="o">=</span> <span class="bp">False</span>
+
+<div class="viewcode-block" id="LinuxNs3FdUdpTunnel.log_message"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.log_message">[docs]</a>    <span class="k">def</span> <span class="nf">log_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">get_endpoints</span><span class="p">()</span>
+        <span class="k">return</span> <span class="s">&quot; guid </span><span class="si">%d</span><span class="s"> - </span><span class="si">%s</span><span class="s"> - </span><span class="si">%s</span><span class="s"> - </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">,</span> 
+                <span class="bp">self</span><span class="o">.</span><span class="n">node1</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;hostname&quot;</span><span class="p">),</span> 
+                <span class="bp">self</span><span class="o">.</span><span class="n">node2</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;hostname&quot;</span><span class="p">),</span> 
+                <span class="n">msg</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxNs3FdUdpTunnel.get_endpoints"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.get_endpoints">[docs]</a>    <span class="k">def</span> <span class="nf">get_endpoints</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the list of RM that are endpoints to the tunnel </span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fd2</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fd1</span><span class="p">:</span>
+            <span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3fdnetdevice</span> <span class="kn">import</span> <span class="n">NS3BaseFdNetDevice</span>
+            <span class="n">devices</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">NS3BaseFdNetDevice</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="n">devices</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">devices</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">2</span><span class="p">:</span> 
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;linux::ns3::TunTapFdLink must be connected to exactly one FdNetDevice&quot;</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">_fd1</span> <span class="o">=</span> <span class="n">devices</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_fd2</span> <span class="o">=</span> <span class="n">devices</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
+        
+            <span class="n">simu</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fd1</span><span class="o">.</span><span class="n">simulation</span>
+            <span class="kn">from</span> <span class="nn">nepi.resources.linux.node</span> <span class="kn">import</span> <span class="n">LinuxNode</span>
+            <span class="n">nodes</span> <span class="o">=</span> <span class="n">simu</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">LinuxNode</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_fd1node</span> <span class="o">=</span> <span class="n">nodes</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+     
+            <span class="n">simu</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fd2</span><span class="o">.</span><span class="n">simulation</span>
+            <span class="kn">from</span> <span class="nn">nepi.resources.linux.node</span> <span class="kn">import</span> <span class="n">LinuxNode</span>
+            <span class="n">nodes</span> <span class="o">=</span> <span class="n">simu</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">LinuxNode</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_fd2node</span> <span class="o">=</span> <span class="n">nodes</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fd1node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;hostname&quot;</span><span class="p">)</span> <span class="o">==</span> \
+                    <span class="bp">self</span><span class="o">.</span><span class="n">_fd2node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;hostname&quot;</span><span class="p">):</span>
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;linux::ns3::FdUdpTunnel requires endpoints on different hosts&quot;</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">return</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_fd1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fd2</span><span class="p">]</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNs3FdUdpTunnel.pi"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.pi">[docs]</a>    <span class="k">def</span> <span class="nf">pi</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pi</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNs3FdUdpTunnel.endpoint1"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.endpoint1">[docs]</a>    <span class="k">def</span> <span class="nf">endpoint1</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fd1</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNs3FdUdpTunnel.endpoint2"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.endpoint2">[docs]</a>    <span class="k">def</span> <span class="nf">endpoint2</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fd2</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNs3FdUdpTunnel.node1"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.node1">[docs]</a>    <span class="k">def</span> <span class="nf">node1</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fd1node</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNs3FdUdpTunnel.node2"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.node2">[docs]</a>    <span class="k">def</span> <span class="nf">node2</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fd2node</span>
+</div>
+<div class="viewcode-block" id="LinuxNs3FdUdpTunnel.endpoint_node"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.endpoint_node">[docs]</a>    <span class="k">def</span> <span class="nf">endpoint_node</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">):</span>
+        <span class="n">node</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="k">if</span> <span class="n">endpoint</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">endpoint1</span><span class="p">:</span>
+            <span class="n">node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node1</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node2</span>
+
+        <span class="k">return</span> <span class="n">node</span>
+ </div>
+<div class="viewcode-block" id="LinuxNs3FdUdpTunnel.app_home"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.app_home">[docs]</a>    <span class="k">def</span> <span class="nf">app_home</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">):</span>
+        <span class="n">node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">endpoint_node</span><span class="p">(</span><span class="n">endpoint</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">exp_home</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_home</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxNs3FdUdpTunnel.run_home"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.run_home">[docs]</a>    <span class="k">def</span> <span class="nf">run_home</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">(</span><span class="n">endpoint</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">run_id</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxNs3FdUdpTunnel.upload_sources"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.upload_sources">[docs]</a>    <span class="k">def</span> <span class="nf">upload_sources</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">):</span>
+        <span class="n">scripts</span> <span class="o">=</span> <span class="p">[]</span>
+
+        <span class="c"># vif-passfd python script</span>
+        <span class="n">linux_passfd</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">__file__</span><span class="p">),</span>
+                <span class="s">&quot;..&quot;</span><span class="p">,</span>
+                <span class="s">&quot;scripts&quot;</span><span class="p">,</span>
+                <span class="s">&quot;fd-udp-connect.py&quot;</span><span class="p">)</span>
+
+        <span class="n">scripts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">linux_passfd</span><span class="p">)</span>
+       
+        <span class="c"># tunnel creation python script</span>
+        <span class="n">tunchannel</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">__file__</span><span class="p">),</span> 
+                <span class="s">&quot;..&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;scripts&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;tunchannel.py&quot;</span><span class="p">)</span>
+
+        <span class="n">scripts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">tunchannel</span><span class="p">)</span>
+
+        <span class="c"># Upload scripts</span>
+        <span class="n">scripts</span> <span class="o">=</span> <span class="s">&quot;;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">scripts</span><span class="p">)</span>
+
+        <span class="n">node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">endpoint_node</span><span class="p">(</span><span class="n">endpoint</span><span class="p">)</span>
+        <span class="n">node</span><span class="o">.</span><span class="n">upload</span><span class="p">(</span><span class="n">scripts</span><span class="p">,</span>
+                <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">src_dir</span><span class="p">),</span>
+                <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">False</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxNs3FdUdpTunnel.endpoint_mkdir"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.endpoint_mkdir">[docs]</a>    <span class="k">def</span> <span class="nf">endpoint_mkdir</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">):</span>
+        <span class="n">node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">endpoint_node</span><span class="p">(</span><span class="n">endpoint</span><span class="p">)</span> 
+        <span class="n">run_home</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">(</span><span class="n">endpoint</span><span class="p">)</span>
+        <span class="n">node</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">run_home</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxNs3FdUdpTunnel.initiate_connection"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.initiate_connection">[docs]</a>    <span class="k">def</span> <span class="nf">initiate_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="p">):</span>
+        <span class="n">cipher</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;cipher&quot;</span><span class="p">)</span>
+        <span class="n">cipher_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;cipherKey&quot;</span><span class="p">)</span>
+        <span class="n">bwlimit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;bwLimit&quot;</span><span class="p">)</span>
+        <span class="n">txqueuelen</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;txQueueLen&quot;</span><span class="p">)</span>
+
+        <span class="c"># Upload the tunnel creating script</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">upload_sources</span><span class="p">(</span><span class="n">endpoint</span><span class="p">)</span>
+
+        <span class="c"># Request an address to send the file descriptor to the ns-3 simulation</span>
+        <span class="n">address</span> <span class="o">=</span> <span class="n">endpoint</span><span class="o">.</span><span class="n">recv_fd</span><span class="p">()</span>
+
+        <span class="c"># execute the tunnel creation script</span>
+        <span class="n">node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">endpoint_node</span><span class="p">(</span><span class="n">remote_endpoint</span><span class="p">)</span> 
+        <span class="n">port</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">initiate</span><span class="p">(</span><span class="n">endpoint</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="p">,</span> <span class="n">address</span><span class="p">,</span> <span class="n">cipher</span><span class="p">,</span> 
+                <span class="n">cipher_key</span><span class="p">,</span> <span class="n">bwlimit</span><span class="p">,</span> <span class="n">txqueuelen</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">port</span>
+</div>
+<div class="viewcode-block" id="LinuxNs3FdUdpTunnel.establish_connection"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.establish_connection">[docs]</a>    <span class="k">def</span> <span class="nf">establish_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="p">,</span> <span class="n">port</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">establish</span><span class="p">(</span><span class="n">endpoint</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="p">,</span> <span class="n">port</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxNs3FdUdpTunnel.verify_connection"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.verify_connection">[docs]</a>    <span class="k">def</span> <span class="nf">verify_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">verify</span><span class="p">(</span><span class="n">endpoint</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxNs3FdUdpTunnel.terminate_connection"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.terminate_connection">[docs]</a>    <span class="k">def</span> <span class="nf">terminate_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="p">):</span>
+        <span class="c"># Nothing to do</span>
+        <span class="k">return</span>
+</div>
+<div class="viewcode-block" id="LinuxNs3FdUdpTunnel.check_state_connection"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.check_state_connection">[docs]</a>    <span class="k">def</span> <span class="nf">check_state_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="c"># Make sure the process is still running in background</span>
+        <span class="c"># No execution errors occurred. Make sure the background</span>
+        <span class="c"># process with the recorded pid is still running.</span>
+
+        <span class="n">node1</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">endpoint_node</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">endpoint1</span><span class="p">)</span> 
+        <span class="n">node2</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">endpoint_node</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">endpoint2</span><span class="p">)</span> 
+        <span class="n">run_home1</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">endpoint1</span><span class="p">)</span>
+        <span class="n">run_home2</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">endpoint1</span><span class="p">)</span>
+        <span class="p">(</span><span class="n">pid1</span><span class="p">,</span> <span class="n">ppid1</span><span class="p">)</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pids</span><span class="p">[</span><span class="n">endpoint1</span><span class="p">]</span>
+        <span class="p">(</span><span class="n">pid2</span><span class="p">,</span> <span class="n">ppid2</span><span class="p">)</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pids</span><span class="p">[</span><span class="n">endpoint2</span><span class="p">]</span>
+        
+        <span class="n">status1</span> <span class="o">=</span> <span class="n">node1</span><span class="o">.</span><span class="n">status</span><span class="p">(</span><span class="n">pid1</span><span class="p">,</span> <span class="n">ppid1</span><span class="p">)</span>
+        <span class="n">status2</span> <span class="o">=</span> <span class="n">node2</span><span class="o">.</span><span class="n">status</span><span class="p">(</span><span class="n">pid2</span><span class="p">,</span> <span class="n">ppid2</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">status1</span> <span class="o">==</span> <span class="n">ProcStatus</span><span class="o">.</span><span class="n">FINISHED</span> <span class="ow">and</span> \
+                <span class="n">status2</span> <span class="o">==</span> <span class="n">ProcStatus</span><span class="o">.</span><span class="n">FINISHED</span><span class="p">:</span>
+
+            <span class="c"># check if execution errors occurred</span>
+            <span class="p">(</span><span class="n">out1</span><span class="p">,</span> <span class="n">err1</span><span class="p">),</span> <span class="n">proc1</span> <span class="o">=</span> <span class="n">node1</span><span class="o">.</span><span class="n">check_errors</span><span class="p">(</span><span class="n">run_home1</span><span class="p">)</span>
+            <span class="p">(</span><span class="n">out2</span><span class="p">,</span> <span class="n">err2</span><span class="p">),</span> <span class="n">proc2</span> <span class="o">=</span> <span class="n">node2</span><span class="o">.</span><span class="n">check_errors</span><span class="p">(</span><span class="n">run_home2</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="n">err1</span> <span class="ow">or</span> <span class="n">err2</span><span class="p">:</span> 
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Error occurred in tunnel&quot;</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">err1</span><span class="p">,</span> <span class="n">err2</span><span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">fail</span><span class="p">()</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set_stopped</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="LinuxNs3FdUdpTunnel.wait_local_port"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.wait_local_port">[docs]</a>    <span class="k">def</span> <span class="nf">wait_local_port</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Waits until the local_port file for the endpoint is generated, </span>
+<span class="sd">        and returns the port number </span>
+<span class="sd">        </span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">wait_file</span><span class="p">(</span><span class="n">endpoint</span><span class="p">,</span> <span class="s">&quot;local_port&quot;</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxNs3FdUdpTunnel.wait_result"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.wait_result">[docs]</a>    <span class="k">def</span> <span class="nf">wait_result</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Waits until the return code file for the endpoint is generated </span>
+<span class="sd">        </span>
+<span class="sd">        &quot;&quot;&quot;</span> 
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">wait_file</span><span class="p">(</span><span class="n">endpoint</span><span class="p">,</span> <span class="s">&quot;ret_file&quot;</span><span class="p">)</span>
+ </div>
+<div class="viewcode-block" id="LinuxNs3FdUdpTunnel.wait_file"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.wait_file">[docs]</a>    <span class="k">def</span> <span class="nf">wait_file</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">,</span> <span class="n">filename</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Waits until file on endpoint is generated &quot;&quot;&quot;</span>
+        <span class="n">result</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="n">delay</span> <span class="o">=</span> <span class="mf">1.0</span>
+        
+        <span class="n">node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">endpoint_node</span><span class="p">(</span><span class="n">endpoint</span><span class="p">)</span> 
+        <span class="n">run_home</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">(</span><span class="n">endpoint</span><span class="p">)</span>
+
+        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="mi">20</span><span class="p">):</span>
+            <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">check_output</span><span class="p">(</span><span class="n">run_home</span><span class="p">,</span> <span class="n">filename</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="n">out</span><span class="p">:</span>
+                <span class="n">result</span> <span class="o">=</span> <span class="n">out</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
+                <span class="k">break</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="n">delay</span><span class="p">)</span>
+                <span class="n">delay</span> <span class="o">=</span> <span class="n">delay</span> <span class="o">*</span> <span class="mf">1.5</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Couldn&#39;t retrieve </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">filename</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">return</span> <span class="n">result</span>
+</div>
+<div class="viewcode-block" id="LinuxNs3FdUdpTunnel.initiate"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.initiate">[docs]</a>    <span class="k">def</span> <span class="nf">initiate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="p">,</span> <span class="n">address</span><span class="p">,</span> <span class="n">cipher</span><span class="p">,</span> <span class="n">cipher_key</span><span class="p">,</span> 
+            <span class="n">bwlimit</span><span class="p">,</span> <span class="n">txqueuelen</span><span class="p">):</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_initiate_command</span><span class="p">(</span><span class="n">endpoint</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="p">,</span> 
+                <span class="n">address</span><span class="p">,</span> <span class="n">cipher</span><span class="p">,</span> <span class="n">cipher_key</span><span class="p">,</span> <span class="n">bwlimit</span><span class="p">,</span> <span class="n">txqueuelen</span><span class="p">)</span>
+
+        <span class="n">node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">endpoint_node</span><span class="p">(</span><span class="n">endpoint</span><span class="p">)</span> 
+        <span class="n">run_home</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">(</span><span class="n">endpoint</span><span class="p">)</span>
+        <span class="n">app_home</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">(</span><span class="n">endpoint</span><span class="p">)</span>
+
+        <span class="c"># upload command to connect.sh script</span>
+        <span class="n">shfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">app_home</span><span class="p">,</span> <span class="s">&quot;fd-udp-connect.sh&quot;</span><span class="p">)</span>
+        <span class="n">node</span><span class="o">.</span><span class="n">upload_command</span><span class="p">(</span><span class="n">command</span><span class="p">,</span>
+                <span class="n">shfile</span> <span class="o">=</span> <span class="n">shfile</span><span class="p">,</span>
+                <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">False</span><span class="p">)</span>
+
+        <span class="c"># invoke connect script</span>
+        <span class="n">cmd</span> <span class="o">=</span> <span class="s">&quot;bash </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">shfile</span>
+        <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="n">run_home</span><span class="p">)</span> 
+             
+        <span class="c"># check if execution errors occurred</span>
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Failed to connect endpoints &quot;</span>
+        
+        <span class="k">if</span> <span class="n">proc</span><span class="o">.</span><span class="n">poll</span><span class="p">():</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+    
+        <span class="c"># Wait for pid file to be generated</span>
+        <span class="n">pid</span><span class="p">,</span> <span class="n">ppid</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">wait_pid</span><span class="p">(</span><span class="n">run_home</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">_pids</span><span class="p">[</span><span class="n">endpoint</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">pid</span><span class="p">,</span> <span class="n">ppid</span><span class="p">)</span>
+        
+        <span class="c"># Check for error information on the remote machine</span>
+        <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">check_errors</span><span class="p">(</span><span class="n">run_home</span><span class="p">)</span>
+        <span class="c"># Out is what was written in the stderr file</span>
+        <span class="k">if</span> <span class="n">err</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Failed to start command &#39;</span><span class="si">%s</span><span class="s">&#39; &quot;</span> <span class="o">%</span> <span class="n">command</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="n">port</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wait_local_port</span><span class="p">(</span><span class="n">endpoint</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">port</span>
+</div>
+    <span class="k">def</span> <span class="nf">_initiate_command</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="p">,</span> <span class="n">address</span><span class="p">,</span>
+            <span class="n">cipher</span><span class="p">,</span> <span class="n">cipher_key</span><span class="p">,</span> <span class="n">bwlimit</span><span class="p">,</span> <span class="n">txqueuelen</span><span class="p">):</span>
+        <span class="n">local_node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">endpoint_node</span><span class="p">(</span><span class="n">endpoint</span><span class="p">)</span> 
+        <span class="n">local_run_home</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">(</span><span class="n">endpoint</span><span class="p">)</span>
+        <span class="n">local_app_home</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">(</span><span class="n">endpoint</span><span class="p">)</span>
+        <span class="n">remote_node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">endpoint_node</span><span class="p">(</span><span class="n">remote_endpoint</span><span class="p">)</span> 
+
+        <span class="n">local_ip</span> <span class="o">=</span> <span class="n">local_node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ip&quot;</span><span class="p">)</span>
+        <span class="n">remote_ip</span> <span class="o">=</span> <span class="n">remote_node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ip&quot;</span><span class="p">)</span>
+
+        <span class="n">local_port_file</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">local_run_home</span><span class="p">,</span> <span class="s">&quot;local_port&quot;</span><span class="p">)</span>
+        <span class="n">remote_port_file</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">local_run_home</span><span class="p">,</span>  <span class="s">&quot;remote_port&quot;</span><span class="p">)</span>
+        <span class="n">ret_file</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">local_run_home</span><span class="p">,</span> <span class="s">&quot;ret_file&quot;</span><span class="p">)</span>
+
+        <span class="n">address</span> <span class="o">=</span> <span class="n">base64</span><span class="o">.</span><span class="n">b64encode</span><span class="p">(</span><span class="n">address</span><span class="p">)</span>
+        
+        <span class="n">command</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;&quot;</span><span class="p">]</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;PYTHONPATH=$PYTHONPATH:${SRC}&quot;</span><span class="p">)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;python ${SRC}/fd-udp-connect.py&quot;</span><span class="p">)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-a </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">address</span><span class="p">)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-p </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">local_port_file</span><span class="p">)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-P </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">remote_port_file</span><span class="p">)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-o </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">local_ip</span><span class="p">)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-O </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">remote_ip</span><span class="p">)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-R </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">ret_file</span><span class="p">)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-t </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="s">&quot;IFF_TAP&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pi</span><span class="p">:</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-n&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">cipher</span><span class="p">:</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-c </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">cipher</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">cipher_key</span><span class="p">:</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-k </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="n">cipher_key</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">txqueuelen</span><span class="p">:</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-q </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="n">txqueuelen</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">bwlimit</span><span class="p">:</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-b </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="n">bwlimit</span><span class="p">)</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_paths</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="n">node</span><span class="o">=</span><span class="n">local_node</span><span class="p">,</span> 
+                <span class="n">app_home</span><span class="o">=</span><span class="n">local_app_home</span><span class="p">,</span> <span class="n">run_home</span><span class="o">=</span><span class="n">local_run_home</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">command</span>
+
+<div class="viewcode-block" id="LinuxNs3FdUdpTunnel.establish"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.establish">[docs]</a>    <span class="k">def</span> <span class="nf">establish</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="p">,</span> <span class="n">port</span><span class="p">):</span>
+        <span class="n">node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">endpoint_node</span><span class="p">(</span><span class="n">endpoint</span><span class="p">)</span> 
+        <span class="n">run_home</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">(</span><span class="n">endpoint</span><span class="p">)</span>
+
+        <span class="c"># upload remote port number to file</span>
+        <span class="n">remote_port</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%s</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">port</span>
+        <span class="n">node</span><span class="o">.</span><span class="n">upload</span><span class="p">(</span><span class="n">remote_port</span><span class="p">,</span>
+                <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">run_home</span><span class="p">,</span> <span class="s">&quot;remote_port&quot;</span><span class="p">),</span>
+                <span class="n">text</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span> 
+                <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">False</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxNs3FdUdpTunnel.verify"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.verify">[docs]</a>    <span class="k">def</span> <span class="nf">verify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">wait_result</span><span class="p">(</span><span class="n">endpoint</span><span class="p">)</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/ns3/ns3client.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/ns3/ns3client.html
new file mode 100644 (file)
index 0000000..af81026
--- /dev/null
@@ -0,0 +1,208 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.ns3.ns3client &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.ns3.ns3client</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">import</span> <span class="nn">base64</span>
+<span class="kn">import</span> <span class="nn">cPickle</span>
+<span class="kn">import</span> <span class="nn">errno</span>
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">socket</span>
+<span class="kn">import</span> <span class="nn">time</span>
+<span class="kn">import</span> <span class="nn">weakref</span>
+<span class="kn">import</span> <span class="nn">threading</span>
+
+<span class="kn">from</span> <span class="nn">optparse</span> <span class="kn">import</span> <span class="n">OptionParser</span><span class="p">,</span> <span class="n">SUPPRESS_HELP</span>
+
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3client</span> <span class="kn">import</span> <span class="n">NS3Client</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3server</span> <span class="kn">import</span> <span class="n">NS3WrapperMessage</span>
+
+<div class="viewcode-block" id="LinuxNS3Client"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3client.LinuxNS3Client">[docs]</a><span class="k">class</span> <span class="nc">LinuxNS3Client</span><span class="p">(</span><span class="n">NS3Client</span><span class="p">):</span>
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">simulation</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxNS3Client</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_simulation</span> <span class="o">=</span> <span class="n">weakref</span><span class="o">.</span><span class="n">ref</span><span class="p">(</span><span class="n">simulation</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_socket_lock</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Lock</span><span class="p">()</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNS3Client.simulation"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3client.LinuxNS3Client.simulation">[docs]</a>    <span class="k">def</span> <span class="nf">simulation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_simulation</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="LinuxNS3Client.send_msg"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3client.LinuxNS3Client.send_msg">[docs]</a>    <span class="k">def</span> <span class="nf">send_msg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg_type</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="n">msg</span> <span class="o">=</span> <span class="p">[</span><span class="n">msg_type</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">]</span>
+
+        <span class="k">def</span> <span class="nf">encode</span><span class="p">(</span><span class="n">item</span><span class="p">):</span>
+            <span class="n">item</span> <span class="o">=</span> <span class="n">cPickle</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">item</span><span class="p">)</span>
+            <span class="k">return</span> <span class="n">base64</span><span class="o">.</span><span class="n">b64encode</span><span class="p">(</span><span class="n">item</span><span class="p">)</span>
+
+        <span class="n">encoded</span> <span class="o">=</span> <span class="s">&quot;|&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="n">encode</span><span class="p">,</span> <span class="n">msg</span><span class="p">))</span>
+
+        <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">_socket_lock</span><span class="p">:</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;hostname&quot;</span><span class="p">)</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&#39;localhost&#39;</span><span class="p">,</span> <span class="s">&#39;127.0.0.1&#39;</span><span class="p">]:</span>
+                <span class="n">sock</span> <span class="o">=</span> <span class="n">socket</span><span class="o">.</span><span class="n">socket</span><span class="p">(</span><span class="n">socket</span><span class="o">.</span><span class="n">AF_UNIX</span><span class="p">,</span> <span class="n">socket</span><span class="o">.</span><span class="n">SOCK_STREAM</span><span class="p">)</span>
+                <span class="n">sock</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">remote_socket</span><span class="p">)</span>
+                <span class="n">sock</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="s">&quot;</span><span class="si">%s</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">encoded</span><span class="p">)</span>
+                <span class="n">reply</span> <span class="o">=</span> <span class="n">sock</span><span class="o">.</span><span class="n">recv</span><span class="p">(</span><span class="mi">1024</span><span class="p">)</span>
+                <span class="n">sock</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="n">command</span> <span class="o">=</span> <span class="p">(</span> <span class="s">&quot;python -c &#39;import socket;&quot;</span>
+                    <span class="s">&quot;sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM);&quot;</span>
+                    <span class="s">&quot;sock.connect(</span><span class="se">\&quot;</span><span class="si">%(socket_addr)s</span><span class="se">\&quot;</span><span class="s">);&quot;</span>
+                    <span class="s">&quot;msg = </span><span class="se">\&quot;</span><span class="si">%(encoded_message)s</span><span class="se">\\</span><span class="s">n</span><span class="se">\&quot;</span><span class="s">;&quot;</span>
+                    <span class="s">&quot;sock.send(msg);&quot;</span>
+                    <span class="s">&quot;reply = sock.recv(1024);&quot;</span>
+                    <span class="s">&quot;sock.close();&quot;</span>
+                    <span class="s">&quot;print reply&#39;&quot;</span><span class="p">)</span> <span class="o">%</span> <span class="p">{</span>
+                        <span class="s">&quot;encoded_message&quot;</span><span class="p">:</span> <span class="n">encoded</span><span class="p">,</span>
+                        <span class="s">&quot;socket_addr&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">remote_socket</span><span class="p">,</span>
+                        <span class="p">}</span>
+
+                <span class="p">(</span><span class="n">reply</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> 
+                        <span class="n">with_lock</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span> 
+
+                <span class="k">if</span> <span class="p">(</span><span class="n">err</span> <span class="ow">and</span> <span class="n">proc</span><span class="o">.</span><span class="n">poll</span><span class="p">())</span> <span class="ow">or</span> <span class="n">reply</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="o">==</span> <span class="s">&quot;&quot;</span><span class="p">:</span>
+                    <span class="n">msg</span> <span class="o">=</span> <span class="p">(</span><span class="s">&quot; Couldn&#39;t connect to remote socket </span><span class="si">%s</span><span class="s"> - REPLY: </span><span class="si">%s</span><span class="s"> &quot;</span>
+                          <span class="s">&quot;- ERROR: </span><span class="si">%s</span><span class="s"> &quot;</span><span class="p">)</span> <span class="o">%</span> <span class="p">(</span>
+                            <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">remote_socket</span><span class="p">,</span> <span class="n">reply</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">reply</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+                    <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+                       
+        <span class="n">reply</span> <span class="o">=</span> <span class="n">cPickle</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">base64</span><span class="o">.</span><span class="n">b64decode</span><span class="p">(</span><span class="n">reply</span><span class="p">))</span>
+
+        <span class="k">return</span> <span class="n">reply</span>
+</div>
+<div class="viewcode-block" id="LinuxNS3Client.create"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3client.LinuxNS3Client.create">[docs]</a>    <span class="k">def</span> <span class="nf">create</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_msg</span><span class="p">(</span><span class="n">NS3WrapperMessage</span><span class="o">.</span><span class="n">CREATE</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxNS3Client.factory"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3client.LinuxNS3Client.factory">[docs]</a>    <span class="k">def</span> <span class="nf">factory</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_msg</span><span class="p">(</span><span class="n">NS3WrapperMessage</span><span class="o">.</span><span class="n">FACTORY</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxNS3Client.invoke"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3client.LinuxNS3Client.invoke">[docs]</a>    <span class="k">def</span> <span class="nf">invoke</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_msg</span><span class="p">(</span><span class="n">NS3WrapperMessage</span><span class="o">.</span><span class="n">INVOKE</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxNS3Client.set"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3client.LinuxNS3Client.set">[docs]</a>    <span class="k">def</span> <span class="nf">set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_msg</span><span class="p">(</span><span class="n">NS3WrapperMessage</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxNS3Client.get"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3client.LinuxNS3Client.get">[docs]</a>    <span class="k">def</span> <span class="nf">get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_msg</span><span class="p">(</span><span class="n">NS3WrapperMessage</span><span class="o">.</span><span class="n">GET</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxNS3Client.flush"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3client.LinuxNS3Client.flush">[docs]</a>    <span class="k">def</span> <span class="nf">flush</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_msg</span><span class="p">(</span><span class="n">NS3WrapperMessage</span><span class="o">.</span><span class="n">FLUSH</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxNS3Client.start"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3client.LinuxNS3Client.start">[docs]</a>    <span class="k">def</span> <span class="nf">start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_msg</span><span class="p">(</span><span class="n">NS3WrapperMessage</span><span class="o">.</span><span class="n">START</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxNS3Client.stop"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3client.LinuxNS3Client.stop">[docs]</a>    <span class="k">def</span> <span class="nf">stop</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_msg</span><span class="p">(</span><span class="n">NS3WrapperMessage</span><span class="o">.</span><span class="n">STOP</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxNS3Client.shutdown"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3client.LinuxNS3Client.shutdown">[docs]</a>    <span class="k">def</span> <span class="nf">shutdown</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_msg</span><span class="p">(</span><span class="n">NS3WrapperMessage</span><span class="o">.</span><span class="n">SHUTDOWN</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+        <span class="k">except</span><span class="p">:</span>
+            <span class="k">pass</span>
+
+        <span class="k">return</span> <span class="bp">None</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/ns3/ns3dceapplication.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/ns3/ns3dceapplication.html
new file mode 100644 (file)
index 0000000..b5c8d33
--- /dev/null
@@ -0,0 +1,170 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.ns3.ns3dceapplication &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.ns3.ns3dceapplication</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span><span class="p">,</span> <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3dceapplication</span> <span class="kn">import</span> <span class="n">NS3BaseDceApplication</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="LinuxNS3DceApplication"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3dceapplication.LinuxNS3DceApplication">[docs]</a><span class="k">class</span> <span class="nc">LinuxNS3DceApplication</span><span class="p">(</span><span class="n">NS3BaseDceApplication</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;linux::ns3::dce::Application&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">sources</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;sources&quot;</span><span class="p">,</span>
+                <span class="s">&quot;Path to tar.gz file with sources for the application execute in DCE. &quot;</span>
+                <span class="s">&quot;Sources will be uploaded to ${SRC} and it is the responsibility of &quot;</span>
+                <span class="s">&quot;the build instructions (in the build attribute) to copy the compiled &quot;</span>
+                <span class="s">&quot;binaries to the ${BIN_DCE} directory&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">build</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;build&quot;</span><span class="p">,</span>
+                <span class="s">&quot;Instructions to compile sources DCE-compatible way. &quot;</span>
+                <span class="s">&quot;Note that sources will be uploaded to ${SRC} and the &quot;</span>
+                <span class="s">&quot;build instructions are responsible for copying the &quot;</span>
+                <span class="s">&quot;binaries to the ${BIN_DCE} directory. &quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">depends</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;depends&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;Space-separated list of packages required to run the application&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">sources</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">build</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">depends</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_instantiate_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="p">[]</span>
+
+        <span class="c"># Install package dependencies required to run the binary </span>
+        <span class="n">depends</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;depends&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">depends</span><span class="p">:</span>
+            <span class="n">dcmd</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">install_dependencies</span><span class="p">(</span><span class="n">depends</span> <span class="o">=</span> <span class="n">depends</span><span class="p">)</span>
+            <span class="k">if</span> <span class="n">dcmd</span><span class="p">:</span>
+                <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">dcmd</span><span class="p">)</span>
+       
+        <span class="c"># Upload sources to generate the binary</span>
+        <span class="n">sources</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;sources&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">sources</span><span class="p">:</span>
+            <span class="n">scmd</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">upload_extra_sources</span><span class="p">(</span><span class="n">sources</span> <span class="o">=</span> <span class="n">sources</span><span class="p">)</span>
+            <span class="k">if</span> <span class="n">scmd</span><span class="p">:</span>
+                <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">scmd</span><span class="p">)</span>
+                
+        <span class="c"># Upload instructions to build the binary</span>
+        <span class="n">build</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;build&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">build</span><span class="p">:</span>
+            <span class="n">bcmd</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">build</span> <span class="o">=</span> <span class="n">build</span><span class="p">)</span>
+            <span class="k">if</span> <span class="n">bcmd</span><span class="p">:</span>
+                <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">bcmd</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">command</span><span class="p">:</span>
+            <span class="n">deploy_command</span> <span class="o">=</span> <span class="s">&quot;;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+            <span class="n">prefix</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%d</span><span class="s">_deploy&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span> 
+            <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">execute_deploy_command</span><span class="p">(</span><span class="n">deploy_command</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">)</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/ns3/ns3pingdceapplication.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/ns3/ns3pingdceapplication.html
new file mode 100644 (file)
index 0000000..d4d6d76
--- /dev/null
@@ -0,0 +1,345 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.ns3.ns3pingdceapplication &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.ns3.ns3pingdceapplication</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span><span class="p">,</span> <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.ns3.ns3dceapplication</span> <span class="kn">import</span> <span class="n">LinuxNS3DceApplication</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="LinuxDcePing"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3pingdceapplication.LinuxDcePing">[docs]</a><span class="k">class</span> <span class="nc">LinuxDcePing</span><span class="p">(</span><span class="n">LinuxNS3DceApplication</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;linux::ns3::dce::Ping&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">count</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;count&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -c option. Determines the number of ECHO_REQUEST &quot;</span>
+            <span class="s">&quot;packates to send before stopping.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">mark</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;mark&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -m option. Uses &#39;mark&#39; to tag outgoing packets. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">interval</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;interval&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -i option. Leaves interval seconds between &quot;</span>
+            <span class="s">&quot;successive ECHO_REUQEST packets. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">address</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;address&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -I option. Sets ECHO_REQUEST packets souce address &quot;</span>
+            <span class="s">&quot;to the specified interface address &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">preload</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;preload&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -l option. Sends preload amount of packets &quot;</span>
+            <span class="s">&quot;without waiting for a reply &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">numeric</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;numeric&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -n option. Disables resolution of host addresses into &quot;</span>
+            <span class="s">&quot;symbolic names. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">pattern</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;pattern&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -p option. Species a up to 16 &#39;&#39;pad&#39;&#39; bytes to fill &quot;</span>
+            <span class="s">&quot;out sent packets. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">printtmp</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;printTimestamp&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -D option. Prints timestamp befor each line as: &quot;</span>
+            <span class="s">&quot;unix time + microseconds as in gettimeofday &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">tos</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;tos&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -Q option. Sets Quality of Service related bits in ICMP &quot;</span>
+            <span class="s">&quot;datagrams. tos can be either a decimal or hexadecime number &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">quiet</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;quiet&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -q option. Disables ping standard output &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">rec_route</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;recordRoute&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -R option. Includes the RECORD_ROUTE option in the &quot;</span>
+            <span class="s">&quot;ECHO REQUEST packet and displays route buffer on the Disables &quot;</span>
+            <span class="s">&quot;ping standard output.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">route_bypass</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;routeBypass&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -r option. Bypasses normal routing tables and sends &quot;</span>
+            <span class="s">&quot;ECHO REQUEST packets directly yo a host on an attached interface. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">packetsize</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;packetSize&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -s option. Specifies the number of data bytes to be &quot;</span>
+            <span class="s">&quot;sent. Defaults to 56. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">sendbuff</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;sendBuff&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -S option. Specifies the number of packets to buffer. &quot;</span>
+            <span class="s">&quot;Defaults to one. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">ttl</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ttl&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -t option. Specifies the IP Time to Live for the &quot;</span>
+            <span class="s">&quot;packets. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">timestamp</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;timestamp&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -T option. Sets special IP timestamp options. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">hint</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;hint&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -M option. Selects Path MTU Discovery strategy. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">full_latency</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;fullLatency&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -U option. Calculates round trip time taking into &quot;</span>
+            <span class="s">&quot;account the full user-to-user latency instead of only the &quot;</span>
+            <span class="s">&quot;network round trip time. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">verbose</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;verbose&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -v option. Verbose output. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">flood</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;flood&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -f option. Flood ping. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">deadline</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;deadline&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -w option. Specify a timeout, in seconds, before ping &quot;</span>
+            <span class="s">&quot;exits regardless of how many packets have been sent or received.&quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">timeout</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;timeout&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -W option. Time to wait for a respone in seconds .&quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">target</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;target&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The host to ping .&quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">count</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">mark</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">interval</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">address</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">preload</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">numeric</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">pattern</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">printtmp</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">tos</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">quiet</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">rec_route</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">route_bypass</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">packetsize</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">sendbuff</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ttl</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">timestamp</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">hint</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">full_latency</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">verbose</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">flood</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">deadline</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">timeout</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_instantiate_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;sources&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_sources</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;build&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_build</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;binary&quot;</span><span class="p">,</span> <span class="s">&quot;ping&quot;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;arguments&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_arguments</span><span class="p">)</span>
+        
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxDcePing</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">_instantiate_object</span><span class="p">()</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_sources</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s">&quot;http://www.skbuff.net/iputils/iputils-s20101006.tar.bz2&quot;</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_build</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span>  <span class="p">(</span><span class="s">&quot; ( &quot;</span>
+                <span class="s">&quot; test -f ${BIN_DCE}/ping &amp;&amp; &quot;</span>
+                <span class="s">&quot; echo &#39;binaries found, nothing to do&#39; &quot;</span>
+                <span class="s">&quot; ) || ( &quot;</span>
+                <span class="s">&quot;tar xvjf ${SRC}/iputils-s20101006.tar.bz2 &amp;&amp; &quot;</span>
+                <span class="s">&quot;cd iputils-s20101006/ &amp;&amp; &quot;</span>
+                <span class="s">&quot;sed -i &#39;s/CFLAGS=/CFLAGS+=/g&#39; Makefile &amp;&amp; &quot;</span>
+                <span class="s">&quot;make CFLAGS=-fPIC LDFLAGS=&#39;-pie -rdynamic&#39; ping &amp;&amp; &quot;</span>
+                <span class="s">&quot;cp ping ${BIN_DCE} &amp;&amp; cd - &quot;</span>
+                <span class="s">&quot; )&quot;</span>   
+                <span class="p">)</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_arguments</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;count&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-c </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;count&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;mark&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-m </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;mark&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;interval&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-i </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;interval&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;address&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-I </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;address&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;preload&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-l </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;preload&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;numeric&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-n&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;pattern&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-p </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;pattern&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;tos&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-Q </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;tos&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;quiet&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-q </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;quiet&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;recordRoute&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-R&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;routeBypass&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-r&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;packetSize&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-s </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;packetSize&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;sendBuff&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-S </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;sendBuff&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ttl&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-t </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ttl&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;timestamp&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-T </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;timestamp&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;hint&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-M </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;hint&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;fullLatency&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-U&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;verbose&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-v&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;flood&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-f&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;deadline&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-w </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;deadline&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;timeout&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-W </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;timeout&quot;</span><span class="p">))</span>
+        <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;target&quot;</span><span class="p">))</span>
+
+        <span class="k">return</span> <span class="s">&quot;;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> 
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/ns3/ns3simulation.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/ns3/ns3simulation.html
new file mode 100644 (file)
index 0000000..a7ecfa5
--- /dev/null
@@ -0,0 +1,827 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.ns3.ns3simulation &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.ns3.ns3simulation</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span><span class="p">,</span> <span class="n">ResourceFactory</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.application</span> <span class="kn">import</span> <span class="n">LinuxApplication</span>
+<span class="kn">from</span> <span class="nn">nepi.util.timefuncs</span> <span class="kn">import</span> <span class="n">tnow</span><span class="p">,</span> <span class="n">tdiffsec</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3simulation</span> <span class="kn">import</span> <span class="n">NS3Simulation</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3wrapper</span> <span class="kn">import</span> <span class="n">SIMULATOR_UUID</span><span class="p">,</span> <span class="n">GLOBAL_VALUE_UUID</span><span class="p">,</span> \
+        <span class="n">IPV4_GLOBAL_ROUTING_HELPER_UUID</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.ns3.ns3client</span> <span class="kn">import</span> <span class="n">LinuxNS3Client</span>
+
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">time</span>
+<span class="kn">import</span> <span class="nn">threading</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="LinuxNS3Simulation"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation">[docs]</a><span class="k">class</span> <span class="nc">LinuxNS3Simulation</span><span class="p">(</span><span class="n">LinuxApplication</span><span class="p">,</span> <span class="n">NS3Simulation</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;linux::ns3::Simulation&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">impl_type</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;simulatorImplementationType&quot;</span><span class="p">,</span>
+                <span class="s">&quot;The object class to use as the simulator implementation&quot;</span><span class="p">,</span>
+            <span class="n">allowed</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;ns3::DefaultSimulatorImpl&quot;</span><span class="p">,</span> <span class="s">&quot;ns3::RealtimeSimulatorImpl&quot;</span><span class="p">],</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ns3::DefaultSimulatorImpl&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Enumerate</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">sched_type</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;schedulerType&quot;</span><span class="p">,</span>
+                <span class="s">&quot;The object class to use as the scheduler implementation&quot;</span><span class="p">,</span>
+                <span class="n">allowed</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;ns3::MapScheduler&quot;</span><span class="p">,</span>
+                            <span class="s">&quot;ns3::ListScheduler&quot;</span><span class="p">,</span>
+                            <span class="s">&quot;ns3::HeapScheduler&quot;</span><span class="p">,</span>
+                            <span class="s">&quot;ns3::MapScheduler&quot;</span><span class="p">,</span>
+                            <span class="s">&quot;ns3::CalendarScheduler&quot;</span>
+                    <span class="p">],</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ns3::MapScheduler&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Enumerate</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">check_sum</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;checksumEnabled&quot;</span><span class="p">,</span>
+                <span class="s">&quot;A global switch to enable all checksums for all protocols&quot;</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">ns_log</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;nsLog&quot;</span><span class="p">,</span>
+            <span class="s">&quot;NS_LOG environment variable. &quot;</span> \
+                    <span class="s">&quot; Will only generate output if ns-3 is compiled in DEBUG mode. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">verbose</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;verbose&quot;</span><span class="p">,</span>
+            <span class="s">&quot;True to output debugging info from the ns3 client-server communication&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">enable_dump</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;enableDump&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Enable dumping the remote executed ns-3 commands to a script &quot;</span>
+            <span class="s">&quot;in order to later reproduce and debug the experiment&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">build_mode</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;buildMode&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Mode used to build ns-3 with waf. One if: debug, release, oprimized &quot;</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;optimized&quot;</span><span class="p">,</span> 
+            <span class="n">allowed</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;debug&quot;</span><span class="p">,</span> <span class="s">&quot;release&quot;</span><span class="p">,</span> <span class="s">&quot;optimized&quot;</span><span class="p">],</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Enumerate</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">ns3_version</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ns3Version&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Version of ns-3 to install from nsam repo&quot;</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ns-3.20&quot;</span><span class="p">,</span> 
+            <span class="c">#default = &quot;ns-3-dev&quot;, </span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">pybindgen_version</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;pybindgenVersion&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Version of pybindgen to install from bazar repo&quot;</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;868&quot;</span><span class="p">,</span> 
+            <span class="c">#default = &quot;876&quot;, </span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">dce_version</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;dceVersion&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Version of dce to install from nsam repo (tag branch for repo)&quot;</span><span class="p">,</span>
+            <span class="c">#default = &quot;dce-1.3&quot;, </span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;dce-dev&quot;</span><span class="p">,</span> 
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">populate_routing_tables</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;populateRoutingTables&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Invokes  Ipv4GlobalRoutingHelper.PopulateRoutingTables() &quot;</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">stoptime</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;StopTime&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Time at which the simulation will stop&quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">impl_type</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">sched_type</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">check_sum</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ns_log</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">enable_dump</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">verbose</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">build_mode</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ns3_version</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">pybindgen_version</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">dce_version</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">populate_routing_tables</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">stoptime</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="n">LinuxApplication</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="n">NS3Simulation</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">_client</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-simu-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_socket_name</span> <span class="o">=</span> <span class="s">&quot;ns3-</span><span class="si">%s</span><span class="s">.sock&quot;</span> <span class="o">%</span> <span class="n">os</span><span class="o">.</span><span class="n">urandom</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s">&#39;hex&#39;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_enable_dce</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_dce_helper</span> <span class="o">=</span> <span class="bp">None</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNS3Simulation.socket_name"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.socket_name">[docs]</a>    <span class="k">def</span> <span class="nf">socket_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_socket_name</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNS3Simulation.remote_socket"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.remote_socket">[docs]</a>    <span class="k">def</span> <span class="nf">remote_socket</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">socket_name</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxNS3Simulation.trace"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.trace">[docs]</a>    <span class="k">def</span> <span class="nf">trace</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">attr</span> <span class="o">=</span> <span class="n">TraceAttr</span><span class="o">.</span><span class="n">ALL</span><span class="p">,</span> <span class="n">block</span> <span class="o">=</span> <span class="mi">512</span><span class="p">,</span> <span class="n">offset</span> <span class="o">=</span> <span class="mi">0</span><span class="p">):</span>
+        <span class="c"># stout needs to get flushed on the ns-3 server side, else we will </span>
+        <span class="c"># get an empty stream. We try twice to retrieve the stream</span>
+        <span class="c"># if we get empty stdout since the stream might not be</span>
+        <span class="c"># flushed immediately.</span>
+        <span class="k">if</span> <span class="n">name</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s">&quot;stdout&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">flush</span><span class="p">()</span> 
+            <span class="n">result</span> <span class="o">=</span> <span class="n">LinuxApplication</span><span class="o">.</span><span class="n">trace</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="n">block</span><span class="p">,</span> <span class="n">offset</span><span class="p">)</span>
+            <span class="k">if</span> <span class="n">result</span><span class="p">:</span>
+                <span class="k">return</span> <span class="n">result</span>
+            <span class="c"># Let the stream be flushed</span>
+            <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">LinuxApplication</span><span class="o">.</span><span class="n">trace</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="n">block</span><span class="p">,</span> <span class="n">offset</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxNS3Simulation.upload_sources"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.upload_sources">[docs]</a>    <span class="k">def</span> <span class="nf">upload_sources</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">src_dir</span><span class="p">,</span> <span class="s">&quot;ns3wrapper&quot;</span><span class="p">))</span>
+
+        <span class="c"># upload ns3 wrapper python script</span>
+        <span class="n">ns3_wrapper</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">__file__</span><span class="p">),</span> <span class="s">&quot;..&quot;</span><span class="p">,</span> <span class="s">&quot;..&quot;</span><span class="p">,</span> <span class="s">&quot;ns3&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;ns3wrapper.py&quot;</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">upload</span><span class="p">(</span><span class="n">ns3_wrapper</span><span class="p">,</span>
+                <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">src_dir</span><span class="p">,</span> <span class="s">&quot;ns3wrapper&quot;</span><span class="p">,</span> <span class="s">&quot;ns3wrapper.py&quot;</span><span class="p">),</span>
+                <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">False</span><span class="p">)</span>
+
+        <span class="c"># upload ns3 wrapper debug python script</span>
+        <span class="n">ns3_wrapper_debug</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">__file__</span><span class="p">),</span> <span class="s">&quot;..&quot;</span><span class="p">,</span> <span class="s">&quot;..&quot;</span><span class="p">,</span> <span class="s">&quot;ns3&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;ns3wrapper_debug.py&quot;</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">upload</span><span class="p">(</span><span class="n">ns3_wrapper_debug</span><span class="p">,</span>
+                <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">src_dir</span><span class="p">,</span> <span class="s">&quot;ns3wrapper&quot;</span><span class="p">,</span> <span class="s">&quot;ns3wrapper_debug.py&quot;</span><span class="p">),</span>
+                <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">False</span><span class="p">)</span>
+
+        <span class="c"># upload ns3_server python script</span>
+        <span class="n">ns3_server</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">__file__</span><span class="p">),</span> <span class="s">&quot;..&quot;</span><span class="p">,</span> <span class="s">&quot;..&quot;</span><span class="p">,</span> <span class="s">&quot;ns3&quot;</span><span class="p">,</span>
+                <span class="s">&quot;ns3server.py&quot;</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">upload</span><span class="p">(</span><span class="n">ns3_server</span><span class="p">,</span>
+                <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">src_dir</span><span class="p">,</span> <span class="s">&quot;ns3wrapper&quot;</span><span class="p">,</span> <span class="s">&quot;ns3server.py&quot;</span><span class="p">),</span>
+                <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">False</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">use_rpm</span><span class="p">:</span>
+            <span class="c"># upload pygccxml sources</span>
+            <span class="n">pygccxml_tar</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">__file__</span><span class="p">),</span> <span class="s">&quot;dependencies&quot;</span><span class="p">,</span>
+                    <span class="s">&quot;</span><span class="si">%s</span><span class="s">.tar.gz&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">pygccxml_version</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">upload</span><span class="p">(</span><span class="n">pygccxml_tar</span><span class="p">,</span>
+                    <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">src_dir</span><span class="p">,</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">.tar.gz&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">pygccxml_version</span><span class="p">),</span>
+                    <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">False</span><span class="p">)</span>
+
+        <span class="c"># Upload user defined ns-3 sources</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">src_dir</span><span class="p">,</span> <span class="s">&quot;ns-3&quot;</span><span class="p">))</span>
+        <span class="n">src_dir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">src_dir</span><span class="p">,</span> <span class="s">&quot;ns-3&quot;</span><span class="p">)</span>
+
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxNS3Simulation</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">upload_sources</span><span class="p">(</span><span class="n">src_dir</span> <span class="o">=</span> <span class="n">src_dir</span><span class="p">)</span>
+    </div>
+<div class="viewcode-block" id="LinuxNS3Simulation.upload_extra_sources"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.upload_extra_sources">[docs]</a>    <span class="k">def</span> <span class="nf">upload_extra_sources</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sources</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">src_dir</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">LinuxNS3Simulation</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">upload_sources</span><span class="p">(</span>
+                <span class="n">sources</span> <span class="o">=</span> <span class="n">sources</span><span class="p">,</span> 
+                <span class="n">src_dir</span> <span class="o">=</span> <span class="n">src_dir</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxNS3Simulation.upload_start_command"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.upload_start_command">[docs]</a>    <span class="k">def</span> <span class="nf">upload_start_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span>
+        <span class="n">env</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">)</span>
+
+        <span class="c"># We want to make sure the ccnd is running</span>
+        <span class="c"># before the experiment starts.</span>
+        <span class="c"># Run the command as a bash script in background,</span>
+        <span class="c"># in the host ( but wait until the command has</span>
+        <span class="c"># finished to continue )</span>
+        <span class="n">env</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_paths</span><span class="p">(</span><span class="n">env</span><span class="p">)</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_paths</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+
+        <span class="n">shfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">,</span> <span class="s">&quot;start.sh&quot;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">upload_command</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> 
+                    <span class="n">shfile</span> <span class="o">=</span> <span class="n">shfile</span><span class="p">,</span>
+                    <span class="n">env</span> <span class="o">=</span> <span class="n">env</span><span class="p">,</span>
+                    <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+
+        <span class="c"># Run the ns3wrapper </span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_run_in_background</span><span class="p">()</span>
+
+        <span class="c"># Wait until the remote socket is created</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">wait_remote_socket</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="LinuxNS3Simulation.configure"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.configure">[docs]</a>    <span class="k">def</span> <span class="nf">configure</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">has_changed</span><span class="p">(</span><span class="s">&quot;simulatorImplementationType&quot;</span><span class="p">):</span>
+            <span class="n">simu_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;simulatorImplementationType&quot;</span><span class="p">)</span>
+            <span class="n">stype</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="s">&quot;StringValue&quot;</span><span class="p">,</span> <span class="n">simu_type</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">GLOBAL_VALUE_UUID</span><span class="p">,</span> <span class="s">&quot;Bind&quot;</span><span class="p">,</span> <span class="s">&quot;SimulatorImplementationType&quot;</span><span class="p">,</span> <span class="n">stype</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">has_changed</span><span class="p">(</span><span class="s">&quot;checksumEnabled&quot;</span><span class="p">):</span>
+            <span class="n">check_sum</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;checksumEnabled&quot;</span><span class="p">)</span>
+            <span class="n">btrue</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="s">&quot;BooleanValue&quot;</span><span class="p">,</span> <span class="n">check_sum</span><span class="p">)</span>    
+            <span class="bp">self</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">GLOBAL_VALUE_UUID</span><span class="p">,</span> <span class="s">&quot;Bind&quot;</span><span class="p">,</span> <span class="s">&quot;ChecksumEnabled&quot;</span><span class="p">,</span> <span class="n">btrue</span><span class="p">)</span>
+        
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">has_changed</span><span class="p">(</span><span class="s">&quot;schedulerType&quot;</span><span class="p">):</span>
+            <span class="n">sched_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;schedulerType&quot;</span><span class="p">)</span>
+            <span class="n">stype</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="s">&quot;StringValue&quot;</span><span class="p">,</span> <span class="n">sched_type</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">GLOBAL_VALUE_UUID</span><span class="p">,</span> <span class="s">&quot;Bind&quot;</span><span class="p">,</span> <span class="s">&quot;SchedulerType&quot;</span><span class="p">,</span> <span class="n">btrue</span><span class="p">)</span>
+        </div>
+<div class="viewcode-block" id="LinuxNS3Simulation.do_deploy"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.do_deploy">[docs]</a>    <span class="k">def</span> <span class="nf">do_deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;---- RESCHEDULING DEPLOY ---- node state </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">state</span> <span class="p">)</span>
+            
+            <span class="c"># ccnd needs to wait until node is deployed and running</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">deploy</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_start_command</span><span class="p">)</span>
+            
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;depends&quot;</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;depends&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_dependencies</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;sources&quot;</span><span class="p">):</span>
+                <span class="n">sources</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;sources&quot;</span><span class="p">)</span>
+                <span class="n">source</span> <span class="o">=</span> <span class="n">sources</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot; &quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+                <span class="n">basename</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">source</span><span class="p">)</span>
+                <span class="n">version</span> <span class="o">=</span> <span class="p">(</span> <span class="n">basename</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;.tar.gz&quot;</span><span class="p">,</span> <span class="s">&quot;&quot;</span><span class="p">)</span>
+                    <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;.tar&quot;</span><span class="p">,</span><span class="s">&quot;&quot;</span><span class="p">)</span>
+                    <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;.gz&quot;</span><span class="p">,</span><span class="s">&quot;&quot;</span><span class="p">)</span>
+                    <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;.zip&quot;</span><span class="p">,</span><span class="s">&quot;&quot;</span><span class="p">)</span> <span class="p">)</span>
+
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;ns3Version&quot;</span><span class="p">,</span> <span class="n">version</span><span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;sources&quot;</span><span class="p">,</span> <span class="n">source</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;build&quot;</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;build&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_build</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;install&quot;</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;install&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_install</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_environment</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_provision</span><span class="p">()</span>
+
+            <span class="c"># Create client</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_client</span> <span class="o">=</span> <span class="n">LinuxNS3Client</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">configure</span><span class="p">()</span>
+            
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_ready</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="LinuxNS3Simulation.do_start"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.do_start">[docs]</a>    <span class="k">def</span> <span class="nf">do_start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Starts simulation execution</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Starting&quot;</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;populateRoutingTables&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">IPV4_GLOBAL_ROUTING_HELPER_UUID</span><span class="p">,</span> <span class="s">&quot;PopulateRoutingTables&quot;</span><span class="p">)</span>
+
+            <span class="n">time</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;StopTime&quot;</span><span class="p">)</span>
+            <span class="k">if</span> <span class="n">time</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">stop</span><span class="p">(</span><span class="n">time</span><span class="o">=</span><span class="n">time</span><span class="p">)</span> 
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_started</span><span class="p">()</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Failed to execute command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">command</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+</div>
+<div class="viewcode-block" id="LinuxNS3Simulation.do_stop"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.do_stop">[docs]</a>    <span class="k">def</span> <span class="nf">do_stop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Stops simulation execution</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">:</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;StopTime&quot;</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">stop</span><span class="p">()</span> 
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_stopped</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="LinuxNS3Simulation.do_release"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.do_release">[docs]</a>    <span class="k">def</span> <span class="nf">do_release</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Releasing resource&quot;</span><span class="p">)</span>
+
+        <span class="n">tear_down</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;tearDown&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">tear_down</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">tear_down</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">do_stop</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">shutdown</span><span class="p">()</span>
+        <span class="n">LinuxApplication</span><span class="o">.</span><span class="n">do_stop</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+        
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxApplication</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_release</span><span class="p">()</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNS3Simulation.state"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.state">[docs]</a>    <span class="k">def</span> <span class="nf">state</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxApplication</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">state</span>
+        
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">:</span>
+            <span class="k">try</span><span class="p">:</span>
+                <span class="n">is_finished</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">SIMULATOR_UUID</span><span class="p">,</span> <span class="s">&quot;isFinished&quot;</span><span class="p">)</span>
+                
+                <span class="k">if</span> <span class="n">is_finished</span><span class="p">:</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">set_stopped</span><span class="p">()</span>
+            <span class="k">except</span><span class="p">:</span>
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Simulator failed. Can not retrieve state&quot;</span>
+                <span class="n">out</span> <span class="o">=</span> <span class="s">&quot;&quot;</span>
+
+                <span class="kn">import</span> <span class="nn">traceback</span>
+                <span class="n">err</span> <span class="o">=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">()</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">do_fail</span><span class="p">()</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNS3Simulation.enable_dce"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.enable_dce">[docs]</a>    <span class="k">def</span> <span class="nf">enable_dce</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_enable_dce</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
+            <span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3dceapplication</span> <span class="kn">import</span> <span class="n">NS3BaseDceApplication</span>
+            <span class="n">rclass</span> <span class="o">=</span> <span class="n">ResourceFactory</span><span class="o">.</span><span class="n">get_resource_type</span><span class="p">(</span>
+                    <span class="n">NS3BaseDceApplication</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+            
+            <span class="bp">self</span><span class="o">.</span><span class="n">_enable_dce</span> <span class="o">=</span> <span class="bp">False</span>
+            <span class="k">for</span> <span class="n">guid</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">resources</span><span class="p">:</span>
+                <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+                <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">rm</span><span class="p">,</span> <span class="n">rclass</span><span class="p">):</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">_enable_dce</span> <span class="o">=</span> <span class="bp">True</span>
+
+                    <span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3dcehelper</span> <span class="kn">import</span> <span class="n">NS3DceHelper</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">_dce_helper</span> <span class="o">=</span> <span class="n">NS3DceHelper</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+                    <span class="k">break</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_enable_dce</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNS3Simulation.dce_helper"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.dce_helper">[docs]</a>    <span class="k">def</span> <span class="nf">dce_helper</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_dce_helper</span>
+        </div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_start_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="p">[]</span> 
+
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;PYTHONPATH=$PYTHONPATH:${SRC}/ns3wrapper/&quot;</span><span class="p">)</span>
+        
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;python ${SRC}/ns3wrapper/ns3server.py -S </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> \
+                <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">remote_socket</span><span class="p">)</span> <span class="p">)</span>
+
+        <span class="n">ns_log</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;nsLog&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">ns_log</span><span class="p">:</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-L &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">ns_log</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;enableDump&quot;</span><span class="p">):</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-D&quot;</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;verbose&quot;</span><span class="p">):</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-v&quot;</span><span class="p">)</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">command</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_dependencies</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">use_rpm</span><span class="p">:</span>
+            <span class="k">return</span> <span class="p">(</span> <span class="s">&quot; gcc gcc-c++ python python-devel mercurial bzr tcpdump socat gccxml unzip&quot;</span><span class="p">)</span>
+        <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">use_deb</span><span class="p">:</span>
+            <span class="k">return</span> <span class="p">(</span> <span class="s">&quot; gcc g++ python python-dev mercurial bzr tcpdump socat gccxml python-pygccxml unzip&quot;</span><span class="p">)</span>
+        <span class="k">return</span> <span class="s">&quot;&quot;</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNS3Simulation.ns3_repo"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.ns3_repo">[docs]</a>    <span class="k">def</span> <span class="nf">ns3_repo</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s">&quot;http://code.nsnam.org&quot;</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNS3Simulation.pygccxml_version"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.pygccxml_version">[docs]</a>    <span class="k">def</span> <span class="nf">pygccxml_version</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s">&quot;pygccxml-1.0.0&quot;</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNS3Simulation.dce_repo"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.dce_repo">[docs]</a>    <span class="k">def</span> <span class="nf">dce_repo</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s">&quot;http://code.nsnam.org/ns-3-dce&quot;</span>
+        <span class="c">#eturn &quot;http://code.nsnam.org/epmancini/ns-3-dce&quot;</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNS3Simulation.dce_version"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.dce_version">[docs]</a>    <span class="k">def</span> <span class="nf">dce_version</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">dce_version</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;dceVersion&quot;</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">dce_version</span> <span class="ow">or</span> <span class="s">&quot;dce-dev&quot;</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNS3Simulation.ns3_build_location"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.ns3_build_location">[docs]</a>    <span class="k">def</span> <span class="nf">ns3_build_location</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">location</span> <span class="o">=</span> <span class="s">&quot;${BIN}/ns-3/</span><span class="si">%(ns3_version)s%(dce_version)s</span><span class="s">/</span><span class="si">%(build_mode)s</span><span class="s">/build&quot;</span> \
+                    <span class="o">%</span> <span class="p">{</span>
+                        <span class="s">&quot;ns3_version&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ns3Version&quot;</span><span class="p">),</span>
+                        <span class="s">&quot;dce_version&quot;</span><span class="p">:</span> <span class="s">&quot;-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;dceVersion&quot;</span><span class="p">)</span> \
+                                <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">enable_dce</span> <span class="k">else</span> <span class="s">&quot;&quot;</span><span class="p">,</span> 
+                        <span class="s">&quot;build_mode&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;buildMode&quot;</span><span class="p">),</span>
+                      <span class="p">}</span>
+
+        <span class="k">return</span> <span class="n">location</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNS3Simulation.ns3_src_location"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.ns3_src_location">[docs]</a>    <span class="k">def</span> <span class="nf">ns3_src_location</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">location</span> <span class="o">=</span> <span class="s">&quot;${SRC}/ns-3/</span><span class="si">%(ns3_version)s</span><span class="s">&quot;</span> \
+                    <span class="o">%</span> <span class="p">{</span>
+                        <span class="s">&quot;ns3_version&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ns3Version&quot;</span><span class="p">),</span>
+                      <span class="p">}</span>
+
+        <span class="k">return</span> <span class="n">location</span>
+ </div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxNS3Simulation.dce_src_location"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.dce_src_location">[docs]</a>    <span class="k">def</span> <span class="nf">dce_src_location</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">location</span> <span class="o">=</span> <span class="s">&quot;${SRC}/ns-3-dce/</span><span class="si">%(dce_version)s</span><span class="s">&quot;</span> \
+                   <span class="o">%</span> <span class="p">{</span>
+                        <span class="s">&quot;dce_version&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;dceVersion&quot;</span><span class="p">),</span>
+                     <span class="p">}</span>
+
+        <span class="k">return</span> <span class="n">location</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_clone_ns3_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">source</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;sources&quot;</span><span class="p">)</span>
+        
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">source</span><span class="p">:</span>
+            <span class="n">clone_ns3_cmd</span> <span class="o">=</span> <span class="s">&quot;hg clone </span><span class="si">%(ns3_repo)s</span><span class="s">/</span><span class="si">%(ns3_version)s</span><span class="s"> </span><span class="si">%(ns3_src)s</span><span class="s">&quot;</span> \
+                    <span class="o">%</span> <span class="p">{</span>
+                        <span class="s">&quot;ns3_version&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ns3Version&quot;</span><span class="p">),</span>
+                        <span class="s">&quot;ns3_repo&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">ns3_repo</span><span class="p">,</span>  
+                        <span class="s">&quot;ns3_src&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">ns3_src_location</span><span class="p">,</span>
+                      <span class="p">}</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">if</span> <span class="n">source</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&quot;.tar.gz&quot;</span><span class="p">)</span> <span class="o">&gt;</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
+                <span class="n">clone_ns3_cmd</span> <span class="o">=</span> <span class="p">(</span> 
+                            <span class="s">&quot;tar xzf ${SRC}/ns-3/</span><span class="si">%(basename)s</span><span class="s"> &quot;</span> 
+                            <span class="s">&quot; --strip-components=1 -C </span><span class="si">%(ns3_src)s</span><span class="s">&quot;</span>
+                            <span class="p">)</span> <span class="o">%</span> <span class="p">{</span>
+                                <span class="s">&quot;basename&quot;</span><span class="p">:</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">source</span><span class="p">),</span>
+                                <span class="s">&quot;ns3_src&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">ns3_src_location</span><span class="p">,</span>
+                                <span class="p">}</span>
+            <span class="k">elif</span> <span class="n">source</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&quot;.tar&quot;</span><span class="p">)</span> <span class="o">&gt;</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
+                <span class="n">clone_ns3_cmd</span> <span class="o">=</span> <span class="p">(</span> 
+                            <span class="s">&quot;tar xf ${SRC}/ns-3/</span><span class="si">%(basename)s</span><span class="s"> &quot;</span> 
+                            <span class="s">&quot; --strip-components=1 -C </span><span class="si">%(ns3_src)s</span><span class="s">&quot;</span>
+                            <span class="p">)</span> <span class="o">%</span> <span class="p">{</span>
+                                <span class="s">&quot;basename&quot;</span><span class="p">:</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">source</span><span class="p">),</span>
+                                <span class="s">&quot;ns3_src&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">ns3_src_location</span><span class="p">,</span>
+                                <span class="p">}</span>
+            <span class="k">elif</span> <span class="n">source</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&quot;.zip&quot;</span><span class="p">)</span> <span class="o">&gt;</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
+                <span class="n">basename</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">source</span><span class="p">)</span>
+                <span class="n">bare_basename</span> <span class="o">=</span> <span class="n">basename</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;.zip&quot;</span><span class="p">,</span> <span class="s">&quot;&quot;</span><span class="p">)</span> 
+
+                <span class="n">clone_ns3_cmd</span> <span class="o">=</span> <span class="p">(</span> 
+                            <span class="s">&quot;unzip ${SRC}/ns-3/</span><span class="si">%(basename)s</span><span class="s"> &amp;&amp; &quot;</span>
+                            <span class="s">&quot;mv ${SRC}/ns-3/</span><span class="si">%(bare_basename)s</span><span class="s"> </span><span class="si">%(ns3_src)s</span><span class="s">&quot;</span>
+                            <span class="p">)</span> <span class="o">%</span> <span class="p">{</span>
+                                <span class="s">&quot;bare_basename&quot;</span><span class="p">:</span> <span class="n">basename_name</span><span class="p">,</span>
+                                <span class="s">&quot;basename&quot;</span><span class="p">:</span> <span class="n">basename</span><span class="p">,</span>
+                                <span class="s">&quot;ns3_src&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">ns3_src_location</span><span class="p">,</span>
+                                <span class="p">}</span>
+
+        <span class="k">return</span> <span class="n">clone_ns3_cmd</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_clone_dce_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">clone_dce_cmd</span> <span class="o">=</span> <span class="s">&quot; echo &#39;DCE will not be built&#39; &quot;</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">enable_dce</span><span class="p">:</span>
+            <span class="n">dce_version</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dce_version</span>
+            <span class="n">dce_tag</span> <span class="o">=</span> <span class="s">&quot;&quot;</span>
+            <span class="k">if</span> <span class="n">dce_version</span> <span class="o">!=</span> <span class="s">&quot;dce-dev&quot;</span><span class="p">:</span>
+                <span class="n">dce_tag</span> <span class="o">=</span> <span class="s">&quot;-r </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">dce_version</span>
+
+            <span class="n">clone_dce_cmd</span> <span class="o">=</span> <span class="p">(</span>
+                        <span class="c"># DCE installation</span>
+                        <span class="c"># Test if dce is alredy cloned</span>
+                        <span class="s">&quot; ( &quot;</span>
+                        <span class="s">&quot;  ( &quot;</span>
+                        <span class="s">&quot;    ( test -d </span><span class="si">%(dce_src)s</span><span class="s"> ) &quot;</span>
+                        <span class="s">&quot;   &amp;&amp; echo &#39;dce binaries found, nothing to do&#39;&quot;</span>
+                        <span class="s">&quot;  ) &quot;</span>
+                        <span class="s">&quot; ) &quot;</span>
+                        <span class="s">&quot;  || &quot;</span> 
+                        <span class="c"># Get dce source code</span>
+                        <span class="s">&quot; ( &quot;</span>
+                        <span class="s">&quot;   mkdir -p </span><span class="si">%(dce_src)s</span><span class="s"> &amp;&amp; &quot;</span>
+                        <span class="s">&quot;   hg clone </span><span class="si">%(dce_repo)s</span><span class="s"> </span><span class="si">%(dce_tag)s</span><span class="s"> </span><span class="si">%(dce_src)s</span><span class="s">&quot;</span>
+                        <span class="s">&quot; ) &quot;</span>
+                     <span class="p">)</span> <span class="o">%</span> <span class="p">{</span>
+                            <span class="s">&quot;dce_repo&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">dce_repo</span><span class="p">,</span>
+                            <span class="s">&quot;dce_tag&quot;</span><span class="p">:</span> <span class="n">dce_tag</span><span class="p">,</span>
+                            <span class="s">&quot;dce_src&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">dce_src_location</span><span class="p">,</span>
+                         <span class="p">}</span>
+
+        <span class="k">return</span> <span class="n">clone_dce_cmd</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_build</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="c"># If the user defined local sources for ns-3, we uncompress the sources</span>
+        <span class="c"># on the remote sources directory. Else we clone ns-3 from the official repo.</span>
+        <span class="n">clone_ns3_cmd</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_clone_ns3_command</span>
+        <span class="n">clone_dce_cmd</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_clone_dce_command</span>
+
+        <span class="n">ns3_build_cmd</span> <span class="o">=</span> <span class="p">(</span>
+                <span class="c"># NS3 installation</span>
+                <span class="s">&quot;( &quot;</span>
+                <span class="s">&quot; ( &quot;</span>
+                <span class="c"># Test if ns-3 is alredy cloned</span>
+                <span class="s">&quot;  ((( test -d </span><span class="si">%(ns3_src)s</span><span class="s"> ) || &quot;</span>
+                <span class="s">&quot;    ( test -d ${NS3BINDINGS:=&#39;None&#39;} &amp;&amp; test -d ${NS3LIBRARIES:=&#39;None&#39;})) &quot;</span>
+                <span class="s">&quot;  &amp;&amp; echo &#39;ns-3 binaries found, nothing to do&#39; )&quot;</span>
+                <span class="s">&quot; ) &quot;</span>
+                <span class="s">&quot;  || &quot;</span> 
+                <span class="c"># If not, install ns-3 and its dependencies</span>
+                <span class="s">&quot; (   &quot;</span>
+                <span class="c"># Install pygccxml</span>
+                <span class="s">&quot;   (   &quot;</span>
+                <span class="s">&quot;     ( &quot;</span>
+                <span class="s">&quot;       python -c &#39;import pygccxml&#39; &amp;&amp; &quot;</span>
+                <span class="s">&quot;       echo &#39;pygccxml not found&#39; &quot;</span>
+                <span class="s">&quot;     ) &quot;</span>
+                <span class="s">&quot;      || &quot;</span>
+                <span class="s">&quot;     ( &quot;</span>
+                <span class="s">&quot;       tar xf ${SRC}/</span><span class="si">%(pygccxml_version)s</span><span class="s">.tar.gz -C ${SRC} &amp;&amp; &quot;</span>
+                <span class="s">&quot;       cd ${SRC}/</span><span class="si">%(pygccxml_version)s</span><span class="s"> &amp;&amp; &quot;</span>
+                <span class="s">&quot;       python setup.py build &amp;&amp; &quot;</span>
+                <span class="s">&quot;       sudo -S python setup.py install &quot;</span>
+                <span class="s">&quot;     ) &quot;</span>
+                <span class="s">&quot;   ) &quot;</span> 
+                <span class="c"># Install pybindgen</span>
+                <span class="s">&quot;  &amp;&amp; &quot;</span>
+                <span class="s">&quot;   (   &quot;</span>
+                <span class="s">&quot;     ( &quot;</span>
+                <span class="s">&quot;       test -d ${SRC}/pybindgen/</span><span class="si">%(pybindgen_version)s</span><span class="s"> &amp;&amp; &quot;</span>
+                <span class="s">&quot;       echo &#39;binaries found, nothing to do&#39; &quot;</span>
+                <span class="s">&quot;     ) &quot;</span>
+                <span class="s">&quot;      || &quot;</span>
+                <span class="c"># If not, clone and build</span>
+                <span class="s">&quot;      ( cd ${SRC} &amp;&amp; &quot;</span>
+                <span class="s">&quot;        mkdir -p ${SRC}/pybindgen &amp;&amp; &quot;</span>
+                <span class="s">&quot;        bzr checkout lp:pybindgen -r </span><span class="si">%(pybindgen_version)s</span><span class="s"> ${SRC}/pybindgen/</span><span class="si">%(pybindgen_version)s</span><span class="s"> &amp;&amp; &quot;</span>
+                <span class="s">&quot;        cd ${SRC}/pybindgen/</span><span class="si">%(pybindgen_version)s</span><span class="s"> &amp;&amp; &quot;</span>
+                <span class="s">&quot;        ./waf configure &amp;&amp; &quot;</span>
+                <span class="s">&quot;        ./waf &quot;</span>
+                <span class="s">&quot;      ) &quot;</span>
+                <span class="s">&quot;   ) &quot;</span> 
+                <span class="s">&quot; &amp;&amp; &quot;</span>
+                <span class="c"># Get ns-3 source code</span>
+                <span class="s">&quot;  ( &quot;</span>
+                <span class="s">&quot;     mkdir -p </span><span class="si">%(ns3_src)s</span><span class="s"> &amp;&amp; &quot;</span>
+                <span class="s">&quot;     </span><span class="si">%(clone_ns3_cmd)s</span><span class="s"> &quot;</span>
+                <span class="s">&quot;  ) &quot;</span>
+                <span class="s">&quot; ) &quot;</span>
+                <span class="s">&quot;) &quot;</span>
+                <span class="s">&quot; &amp;&amp; &quot;</span>
+                <span class="s">&quot;( &quot;</span>
+                <span class="s">&quot;   </span><span class="si">%(clone_dce_cmd)s</span><span class="s"> &quot;</span>
+                <span class="s">&quot;) &quot;</span>
+             <span class="p">)</span> <span class="o">%</span> <span class="p">{</span> 
+                    <span class="s">&quot;ns3_src&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">ns3_src_location</span><span class="p">,</span>
+                    <span class="s">&quot;pybindgen_version&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;pybindgenVersion&quot;</span><span class="p">),</span>
+                    <span class="s">&quot;pygccxml_version&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">pygccxml_version</span><span class="p">,</span>
+                    <span class="s">&quot;clone_ns3_cmd&quot;</span><span class="p">:</span> <span class="n">clone_ns3_cmd</span><span class="p">,</span>
+                    <span class="s">&quot;clone_dce_cmd&quot;</span><span class="p">:</span> <span class="n">clone_dce_cmd</span><span class="p">,</span>
+                 <span class="p">}</span>
+
+        <span class="k">return</span> <span class="n">ns3_build_cmd</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_install_dce_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">install_dce_cmd</span> <span class="o">=</span> <span class="s">&quot; echo &#39;DCE will not be installed&#39;&quot;</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">enable_dce</span><span class="p">:</span>
+            <span class="n">install_dce_cmd</span> <span class="o">=</span> <span class="p">(</span>
+                        <span class="s">&quot; ( &quot;</span>
+                        <span class="s">&quot;   ((test -d </span><span class="si">%(ns3_build)s</span><span class="s">/bin_dce ) &amp;&amp; &quot;</span>
+                        <span class="s">&quot;    echo &#39;dce binaries found, nothing to do&#39; )&quot;</span>
+                        <span class="s">&quot; ) &quot;</span>
+                        <span class="s">&quot; ||&quot;</span> 
+                        <span class="s">&quot; (   &quot;</span>
+                         <span class="c"># If not, copy build to dce</span>
+                        <span class="s">&quot;  cd </span><span class="si">%(dce_src)s</span><span class="s"> &amp;&amp; &quot;</span>
+                        <span class="s">&quot;  rm -rf </span><span class="si">%(dce_src)s</span><span class="s">/build &amp;&amp; &quot;</span>
+                        <span class="s">&quot;  ./waf configure </span><span class="si">%(enable_opt)s</span><span class="s"> --with-pybindgen=${SRC}/pybindgen/</span><span class="si">%(pybindgen_version)s</span><span class="s"> &quot;</span>
+                        <span class="s">&quot;  --prefix=</span><span class="si">%(ns3_build)s</span><span class="s"> --with-ns3=</span><span class="si">%(ns3_build)s</span><span class="s"> &amp;&amp; &quot;</span>
+                        <span class="s">&quot;  ./waf build &amp;&amp; &quot;</span>
+                        <span class="s">&quot;  ./waf install &amp;&amp; &quot;</span>
+                        <span class="s">&quot;  [ ! -e </span><span class="si">%(ns3_build)s</span><span class="s">/lib/python/site-packages/ns/dce.so ] &amp;&amp; &quot;</span>
+                        <span class="s">&quot;   mv </span><span class="si">%(ns3_build)s</span><span class="s">/lib*/python*/site-packages/ns/dce.so </span><span class="si">%(ns3_build)s</span><span class="s">/lib/python/site-packages/ns/ &quot;</span>
+                        <span class="s">&quot; )&quot;</span>
+                <span class="p">)</span> <span class="o">%</span> <span class="p">{</span> 
+                    <span class="s">&quot;pybindgen_version&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;pybindgenVersion&quot;</span><span class="p">),</span>
+                    <span class="s">&quot;enable_opt&quot;</span><span class="p">:</span> <span class="s">&quot;--enable-opt&quot;</span> <span class="k">if</span>  <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;buildMode&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="s">&quot;optimized&quot;</span> <span class="k">else</span> <span class="s">&quot;&quot;</span><span class="p">,</span>
+                    <span class="s">&quot;ns3_build&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">ns3_build_location</span><span class="p">,</span>
+                    <span class="s">&quot;dce_src&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">dce_src_location</span><span class="p">,</span>
+                     <span class="p">}</span>
+
+        <span class="k">return</span> <span class="n">install_dce_cmd</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_install</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">install_dce_cmd</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_install_dce_command</span>
+
+        <span class="n">install_ns3_cmd</span> <span class="o">=</span> <span class="p">(</span>
+                 <span class="c"># Test if ns-3 is alredy installed</span>
+                <span class="s">&quot;(&quot;</span>
+                <span class="s">&quot; ( &quot;</span>
+                <span class="s">&quot;  ( ( (test -d </span><span class="si">%(ns3_build)s</span><span class="s">/lib ) || &quot;</span>
+                <span class="s">&quot;    (test -d ${NS3BINDINGS:=&#39;None&#39;} &amp;&amp; test -d ${NS3LIBRARIES:=&#39;None&#39;}) ) &amp;&amp; &quot;</span>
+                <span class="s">&quot;    echo &#39;binaries found, nothing to do&#39; )&quot;</span>
+                <span class="s">&quot; ) &quot;</span>
+                <span class="s">&quot; ||&quot;</span> 
+                <span class="s">&quot; (   &quot;</span>
+                 <span class="c"># If not, copy ns-3 build to bin</span>
+                <span class="s">&quot;  mkdir -p </span><span class="si">%(ns3_build)s</span><span class="s"> &amp;&amp; &quot;</span>
+                <span class="s">&quot;  cd </span><span class="si">%(ns3_src)s</span><span class="s"> &amp;&amp; &quot;</span>
+                <span class="s">&quot;  rm -rf </span><span class="si">%(ns3_src)s</span><span class="s">/build &amp;&amp; &quot;</span>
+                <span class="s">&quot;  ./waf configure -d </span><span class="si">%(build_mode)s</span><span class="s"> --with-pybindgen=${SRC}/pybindgen/</span><span class="si">%(pybindgen_version)s</span><span class="s"> &quot;</span>
+                <span class="s">&quot;  --prefix=</span><span class="si">%(ns3_build)s</span><span class="s"> &amp;&amp; &quot;</span>
+                <span class="s">&quot;  ./waf build &amp;&amp; &quot;</span>
+                <span class="s">&quot;  ./waf install &amp;&amp; &quot;</span>
+                <span class="s">&quot;  mv </span><span class="si">%(ns3_build)s</span><span class="s">/lib*/python* </span><span class="si">%(ns3_build)s</span><span class="s">/lib/python &quot;</span>
+                <span class="s">&quot; )&quot;</span>
+                <span class="s">&quot;) &quot;</span>
+                <span class="s">&quot; &amp;&amp; &quot;</span>
+                <span class="s">&quot;( &quot;</span>
+                <span class="s">&quot;   </span><span class="si">%(install_dce_cmd)s</span><span class="s"> &quot;</span>
+                <span class="s">&quot;) &quot;</span>
+              <span class="p">)</span> <span class="o">%</span> <span class="p">{</span> 
+                    <span class="s">&quot;pybindgen_version&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;pybindgenVersion&quot;</span><span class="p">),</span>
+                    <span class="s">&quot;build_mode&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;buildMode&quot;</span><span class="p">),</span>
+                    <span class="s">&quot;install_dce_cmd&quot;</span><span class="p">:</span> <span class="n">install_dce_cmd</span><span class="p">,</span>
+                    <span class="s">&quot;ns3_build&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">ns3_build_location</span><span class="p">,</span>
+                    <span class="s">&quot;ns3_src&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">ns3_src_location</span><span class="p">,</span>
+                 <span class="p">}</span>
+
+        <span class="k">return</span> <span class="n">install_ns3_cmd</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_environment</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">env</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="n">env</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;PYTHONPATH=$PYTHONPATH:${NS3BINDINGS:=</span><span class="si">%(ns3_build)s</span><span class="s">/lib/python/site-packages}&quot;</span> <span class="o">%</span> <span class="p">{</span> 
+                    <span class="s">&quot;ns3_build&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">ns3_build_location</span>
+                 <span class="p">})</span>
+        <span class="c"># If NS3LIBRARIES is defined and not empty, assign its value, </span>
+        <span class="c"># if not assign ns3_build_home/lib/ to NS3LIBRARIES and LD_LIBARY_PATH</span>
+        <span class="n">env</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;LD_LIBRARY_PATH=${NS3LIBRARIES:=</span><span class="si">%(ns3_build)s</span><span class="s">/lib}&quot;</span> <span class="o">%</span> <span class="p">{</span> 
+                    <span class="s">&quot;ns3_build&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">ns3_build_location</span>
+                 <span class="p">})</span>
+        <span class="n">env</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;DCE_PATH=$NS3LIBRARIES/../bin_dce&quot;</span><span class="p">)</span>
+        <span class="n">env</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;DCE_ROOT=$NS3LIBRARIES/..&quot;</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="s">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">env</span><span class="p">)</span> 
+
+<div class="viewcode-block" id="LinuxNS3Simulation.replace_paths"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.replace_paths">[docs]</a>    <span class="k">def</span> <span class="nf">replace_paths</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">command</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Replace all special path tags with shell-escaped actual paths.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="p">(</span> <span class="n">command</span>
+            <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;${USR}&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">usr_dir</span><span class="p">)</span>
+            <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;${LIB}&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">lib_dir</span><span class="p">)</span>
+            <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;${BIN}&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">bin_dir</span><span class="p">)</span>
+            <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;${SRC}&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">src_dir</span><span class="p">)</span>
+            <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;${SHARE}&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">share_dir</span><span class="p">)</span>
+            <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;${EXP}&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">exp_dir</span><span class="p">)</span>
+            <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;${EXP_HOME}&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">exp_home</span><span class="p">)</span>
+            <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;${APP_HOME}&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">)</span>
+            <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;${RUN_HOME}&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">)</span>
+            <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;${NODE_HOME}&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">node_home</span><span class="p">)</span>
+            <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;${HOME}&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">home_dir</span><span class="p">)</span>
+            <span class="c"># If NS3LIBRARIES is defined and not empty, use that value, </span>
+            <span class="c"># if not use ns3_build_home/lib/</span>
+            <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;${BIN_DCE}&quot;</span><span class="p">,</span> <span class="s">&quot;${NS3LIBRARIES-</span><span class="si">%s</span><span class="s">/lib}/../bin_dce&quot;</span> <span class="o">%</span> \
+                    <span class="bp">self</span><span class="o">.</span><span class="n">ns3_build_location</span><span class="p">)</span>
+            <span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxNS3Simulation.valid_connection"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.valid_connection">[docs]</a>    <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="c"># TODO: Validate!</span>
+        <span class="k">return</span> <span class="bp">True</span>
+</div>
+<div class="viewcode-block" id="LinuxNS3Simulation.wait_remote_socket"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.wait_remote_socket">[docs]</a>    <span class="k">def</span> <span class="nf">wait_remote_socket</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Waits until the remote socket is created</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot; [ -e </span><span class="si">%s</span><span class="s"> ] &amp;&amp; echo &#39;DONE&#39; &quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">remote_socket</span>
+
+        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="mi">200</span><span class="p">):</span>
+            <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="n">retry</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> 
+                    <span class="n">with_lock</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="n">out</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&quot;DONE&quot;</span><span class="p">)</span> <span class="o">&gt;</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
+                <span class="k">break</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s">&quot;Remote socket not found at </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> \
+                    <span class="bp">self</span><span class="o">.</span><span class="n">remote_socket</span><span class="p">)</span>
+    
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/ns3/tuntapfdlink.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/ns3/tuntapfdlink.html
new file mode 100644 (file)
index 0000000..7ca4fe9
--- /dev/null
@@ -0,0 +1,251 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.ns3.tuntapfdlink &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.ns3.tuntapfdlink</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceState</span><span class="p">,</span> <span class="n">clsinit_copy</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.application</span> <span class="kn">import</span> <span class="n">LinuxApplication</span>
+
+<span class="kn">import</span> <span class="nn">base64</span>
+<span class="kn">import</span> <span class="nn">fcntl</span>
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">socket</span>
+<span class="kn">import</span> <span class="nn">struct</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="LinuxTunTapFdLink"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink">[docs]</a><span class="k">class</span> <span class="nc">LinuxTunTapFdLink</span><span class="p">(</span><span class="n">LinuxApplication</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot; Interconnects a TAP or TUN Linux device to a FdNetDevice</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;linux::ns3::TunTapFdLink&quot;</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxTunTapFdLink</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_tap</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_fdnetdevice</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_fd_node</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">send_address</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;tuntap-link-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxTunTapFdLink.fdnetdevice"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink.fdnetdevice">[docs]</a>    <span class="k">def</span> <span class="nf">fdnetdevice</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fdnetdevice</span><span class="p">:</span>
+            <span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3fdnetdevice</span> <span class="kn">import</span> <span class="n">NS3BaseFdNetDevice</span>
+            <span class="n">devices</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">NS3BaseFdNetDevice</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="n">devices</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">devices</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">:</span> 
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;TunTapFdLink must be connected to exactly one FdNetDevice&quot;</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">_fdnetdevice</span> <span class="o">=</span> <span class="n">devices</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+        
+            <span class="n">simu</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fdnetdevice</span><span class="o">.</span><span class="n">simulation</span>
+            <span class="kn">from</span> <span class="nn">nepi.resources.linux.node</span> <span class="kn">import</span> <span class="n">LinuxNode</span>
+            <span class="n">nodes</span> <span class="o">=</span> <span class="n">simu</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">LinuxNode</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_fd_node</span> <span class="o">=</span> <span class="n">nodes</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+        
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fdnetdevice</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxTunTapFdLink.fdnode"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink.fdnode">[docs]</a>    <span class="k">def</span> <span class="nf">fdnode</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fd_node</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxTunTapFdLink.tap"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink.tap">[docs]</a>    <span class="k">def</span> <span class="nf">tap</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tap</span><span class="p">:</span>
+            <span class="kn">from</span> <span class="nn">nepi.resources.linux.tap</span> <span class="kn">import</span> <span class="n">LinuxTap</span>
+            <span class="n">devices</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">LinuxTap</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="n">devices</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">devices</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">:</span> 
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;TunTapLink must be connected to exactly one Tap or Tun&quot;</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">_tap</span> <span class="o">=</span> <span class="n">devices</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+        
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tap</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxTunTapFdLink.tapnode"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink.tapnode">[docs]</a>    <span class="k">def</span> <span class="nf">tapnode</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">tap</span><span class="o">.</span><span class="n">node</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxTunTapFdLink.node"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink.node">[docs]</a>    <span class="k">def</span> <span class="nf">node</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">tapnode</span>
+</div>
+<div class="viewcode-block" id="LinuxTunTapFdLink.upload_sources"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink.upload_sources">[docs]</a>    <span class="k">def</span> <span class="nf">upload_sources</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">scripts</span> <span class="o">=</span> <span class="p">[]</span>
+
+        <span class="c"># vif-passfd python script</span>
+        <span class="n">linux_passfd</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">__file__</span><span class="p">),</span>
+                <span class="s">&quot;..&quot;</span><span class="p">,</span>
+                <span class="s">&quot;scripts&quot;</span><span class="p">,</span>
+                <span class="s">&quot;linux-tap-passfd.py&quot;</span><span class="p">)</span>
+
+        <span class="n">scripts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">linux_passfd</span><span class="p">)</span>
+        
+        <span class="c"># Upload scripts</span>
+        <span class="n">scripts</span> <span class="o">=</span> <span class="s">&quot;;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">scripts</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">upload</span><span class="p">(</span><span class="n">scripts</span><span class="p">,</span>
+                <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">src_dir</span><span class="p">),</span>
+                <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">False</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxTunTapFdLink.upload_start_command"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink.upload_start_command">[docs]</a>    <span class="k">def</span> <span class="nf">upload_start_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">tapnode</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;hostname&quot;</span><span class="p">)</span> <span class="o">!=</span> \
+                <span class="bp">self</span><span class="o">.</span><span class="n">fdnode</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;hostname&quot;</span><span class="p">):</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Tap and FdNetDevice are not in the same host&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">send_address</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fdnetdevice</span><span class="o">.</span><span class="n">recv_fd</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_start_command</span><span class="p">)</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span>
+
+        <span class="n">shfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">,</span> <span class="s">&quot;start.sh&quot;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">run_and_wait</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">,</span>
+                <span class="n">shfile</span><span class="o">=</span><span class="n">shfile</span><span class="p">,</span>
+                <span class="n">wait_run</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span>
+                <span class="n">overwrite</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+        </div>
+<div class="viewcode-block" id="LinuxTunTapFdLink.do_deploy"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink.do_deploy">[docs]</a>    <span class="k">def</span> <span class="nf">do_deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">tap</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span> <span class="ow">or</span> \
+                <span class="bp">self</span><span class="o">.</span><span class="n">fdnetdevice</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;---- RESCHEDULING DEPLOY ---- &quot;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">deploy</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_provision</span><span class="p">()</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_ready</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="LinuxTunTapFdLink.do_start"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink.do_start">[docs]</a>    <span class="k">def</span> <span class="nf">do_start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+            <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Starting command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_started</span><span class="p">()</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Failed to execute command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">command</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_start_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">address</span> <span class="o">=</span> <span class="n">base64</span><span class="o">.</span><span class="n">b64encode</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">send_address</span><span class="p">)</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="c"># Use tap-passfd.py to send fd from TAP to FdNetDevice</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;sudo -S&quot;</span><span class="p">)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;PYTHONPATH=$PYTHONPATH:${SRC}&quot;</span><span class="p">)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;python ${SRC}/linux-tap-passfd.py&quot;</span><span class="p">)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-a </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">address</span><span class="p">)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-S </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">tap</span><span class="o">.</span><span class="n">sock_name</span><span class="p">)</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_paths</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">command</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/ping.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/ping.html
new file mode 100644 (file)
index 0000000..e019c1e
--- /dev/null
@@ -0,0 +1,372 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.ping &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.ping</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span><span class="p">,</span> <span class="n">ResourceState</span> 
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.application</span> <span class="kn">import</span> <span class="n">LinuxApplication</span>
+<span class="kn">from</span> <span class="nn">nepi.util.timefuncs</span> <span class="kn">import</span> <span class="n">tnow</span>
+
+<span class="kn">import</span> <span class="nn">os</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="LinuxPing"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.ping.LinuxPing">[docs]</a><span class="k">class</span> <span class="nc">LinuxPing</span><span class="p">(</span><span class="n">LinuxApplication</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;linux::Ping&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">count</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;count&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -c option. Determines the number of ECHO_REQUEST &quot;</span>
+            <span class="s">&quot;packates to send before stopping.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">mark</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;mark&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -m option. Uses &#39;mark&#39; to tag outgoing packets. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">interval</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;interval&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -i option. Leaves interval seconds between &quot;</span>
+            <span class="s">&quot;successive ECHO_REUQEST packets. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">address</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;address&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -I option. Sets ECHO_REQUEST packets souce address &quot;</span>
+            <span class="s">&quot;to the specified interface address &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">preload</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;preload&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -l option. Sends preload amount of packets &quot;</span>
+            <span class="s">&quot;without waiting for a reply &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">numeric</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;numeric&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -n option. Disables resolution of host addresses into &quot;</span>
+            <span class="s">&quot;symbolic names. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">pattern</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;pattern&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -p option. Species a up to 16 &#39;&#39;pad&#39;&#39; bytes to fill &quot;</span>
+            <span class="s">&quot;out sent packets. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">printtmp</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;printTimestamp&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -D option. Prints timestamp befor each line as: &quot;</span>
+            <span class="s">&quot;unix time + microseconds as in gettimeofday &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">tos</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;tos&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -Q option. Sets Quality of Service related bits in ICMP &quot;</span>
+            <span class="s">&quot;datagrams. tos can be either a decimal or hexadecime number &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">quiet</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;quiet&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -q option. Disables ping standard output &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">rec_route</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;recordRoute&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -R option. Includes the RECORD_ROUTE option in the &quot;</span>
+            <span class="s">&quot;ECHO REQUEST packet and displays route buffer on the Disables &quot;</span>
+            <span class="s">&quot;ping standard output.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">route_bypass</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;routeBypass&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -r option. Bypasses normal routing tables and sends &quot;</span>
+            <span class="s">&quot;ECHO REQUEST packets directly yo a host on an attached interface. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">packetsize</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;packetSize&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -s option. Specifies the number of data bytes to be &quot;</span>
+            <span class="s">&quot;sent. Defaults to 56. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">sendbuff</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;sendBuff&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -S option. Specifies the number of packets to buffer. &quot;</span>
+            <span class="s">&quot;Defaults to one. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">ttl</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ttl&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -t option. Specifies the IP Time to Live for the &quot;</span>
+            <span class="s">&quot;packets. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">timestamp</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;timestamp&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -T option. Sets special IP timestamp options. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">hint</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;hint&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -M option. Selects Path MTU Discovery strategy. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">full_latency</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;fullLatency&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -U option. Calculates round trip time taking into &quot;</span>
+            <span class="s">&quot;account the full user-to-user latency instead of only the &quot;</span>
+            <span class="s">&quot;network round trip time. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">verbose</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;verbose&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -v option. Verbose output. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">flood</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;flood&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -f option. Flood ping. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">deadline</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;deadline&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -w option. Specify a timeout, in seconds, before ping &quot;</span>
+            <span class="s">&quot;exits regardless of how many packets have been sent or received.&quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">timeout</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;timeout&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets ping -W option. Time to wait for a respone in seconds .&quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">target</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;target&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The host to ping .&quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">early_start</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;earlyStart&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Start ping as early as deployment. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">count</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">mark</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">interval</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">address</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">preload</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">numeric</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">pattern</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">printtmp</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">tos</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">quiet</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">rec_route</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">route_bypass</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">packetsize</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">sendbuff</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ttl</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">timestamp</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">hint</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">full_latency</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">verbose</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">flood</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">deadline</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">timeout</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">early_start</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxPing</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ping-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span>
+
+<div class="viewcode-block" id="LinuxPing.upload_start_command"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.ping.LinuxPing.upload_start_command">[docs]</a>    <span class="k">def</span> <span class="nf">upload_start_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxPing</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">upload_start_command</span><span class="p">()</span>
+        
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;earlyStart&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_run_in_background</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="LinuxPing.do_deploy"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.ping.LinuxPing.do_deploy">[docs]</a>    <span class="k">def</span> <span class="nf">do_deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_start_command</span><span class="p">)</span>
+
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxPing</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_deploy</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="LinuxPing.do_start"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.ping.LinuxPing.do_start">[docs]</a>    <span class="k">def</span> <span class="nf">do_start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;earlyStart&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+                <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Starting command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
+
+                <span class="bp">self</span><span class="o">.</span><span class="n">set_started</span><span class="p">()</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Failed to execute command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">command</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+        <span class="k">else</span><span class="p">:</span>
+           <span class="nb">super</span><span class="p">(</span><span class="n">LinuxPing</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_start</span><span class="p">()</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_start_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
+
+        <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;echo &#39;Starting PING to </span><span class="si">%s</span><span class="s">&#39; ;&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;target&quot;</span><span class="p">))</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;printTimestamp&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;&quot;&quot;echo &quot;`date +&#39;%Y%m</span><span class="si">%d</span><span class="s">%H%M%S&#39;`&quot;;&quot;&quot;&quot;</span><span class="p">)</span>
+
+        <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;ping &quot;</span><span class="p">)</span>
+        
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;count&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-c </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;count&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;mark&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-m </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;mark&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;interval&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-i </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;interval&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;address&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-I </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;address&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;preload&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-l </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;preload&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;numeric&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-n&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;pattern&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-p </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;pattern&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;tos&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-Q </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;tos&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;quiet&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-q </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;quiet&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;recordRoute&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-R&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;routeBypass&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-r&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;packetSize&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-s </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;packetSize&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;sendBuff&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-S </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;sendBuff&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ttl&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-t </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ttl&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;timestamp&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-T </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;timestamp&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;hint&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-M </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;hint&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;fullLatency&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-U&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;verbose&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-v&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;flood&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-f&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;deadline&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-w </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;deadline&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;timeout&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-W </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;timeout&quot;</span><span class="p">))</span>
+        <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;target&quot;</span><span class="p">))</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">command</span>
+
+<div class="viewcode-block" id="LinuxPing.valid_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.ping.LinuxPing.valid_connection">[docs]</a>    <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="c"># TODO: Validate!</span>
+        <span class="k">return</span> <span class="bp">True</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/route.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/route.html
new file mode 100644 (file)
index 0000000..a55f75f
--- /dev/null
@@ -0,0 +1,251 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.route &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.route</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span><span class="p">,</span> <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.application</span> <span class="kn">import</span> <span class="n">LinuxApplication</span>
+
+<span class="kn">import</span> <span class="nn">os</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="LinuxRoute"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.route.LinuxRoute">[docs]</a><span class="k">class</span> <span class="nc">LinuxRoute</span><span class="p">(</span><span class="n">LinuxApplication</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;linux::Route&quot;</span>
+    <span class="n">_help</span> <span class="o">=</span> <span class="s">&quot;Adds a route to the host using iptools &quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">network</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;network&quot;</span><span class="p">,</span> <span class="s">&quot;Network address&quot;</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+        <span class="n">prefix</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;prefix&quot;</span><span class="p">,</span> <span class="s">&quot;IP prefix length&quot;</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+        <span class="n">nexthop</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;nexthop&quot;</span><span class="p">,</span> <span class="s">&quot;Nexthop IP&quot;</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">network</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">prefix</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">nexthop</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxRoute</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;route-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_device</span> <span class="o">=</span> <span class="bp">None</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxRoute.device"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.route.LinuxRoute.device">[docs]</a>    <span class="k">def</span> <span class="nf">device</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_device</span><span class="p">:</span>
+            <span class="kn">from</span> <span class="nn">nepi.resources.linux.tap</span> <span class="kn">import</span> <span class="n">LinuxTap</span>
+            <span class="kn">from</span> <span class="nn">nepi.resources.linux.tun</span> <span class="kn">import</span> <span class="n">LinuxTun</span>
+            <span class="kn">from</span> <span class="nn">nepi.resources.linux.interface</span> <span class="kn">import</span> <span class="n">LinuxInterface</span>
+            <span class="n">tap</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">LinuxTap</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+            <span class="n">tun</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">LinuxTun</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+            <span class="n">interface</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">LinuxInterface</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+            <span class="k">if</span> <span class="n">tap</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_device</span> <span class="o">=</span> <span class="n">tap</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+            <span class="k">elif</span> <span class="n">tun</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_device</span> <span class="o">=</span> <span class="n">tun</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+            <span class="k">elif</span> <span class="n">interface</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_device</span> <span class="o">=</span> <span class="n">interface</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="s">&quot;linux::Routes must be connected to a &quot;</span>\
+                        <span class="s">&quot;linux::TAP, linux::TUN, or linux::Interface&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_device</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxRoute.node"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.route.LinuxRoute.node">[docs]</a>    <span class="k">def</span> <span class="nf">node</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">device</span><span class="o">.</span><span class="n">node</span>
+</div>
+<div class="viewcode-block" id="LinuxRoute.upload_start_command"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.route.LinuxRoute.upload_start_command">[docs]</a>    <span class="k">def</span> <span class="nf">upload_start_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="c"># We want to make sure the route is configured</span>
+        <span class="c"># before the deploy is over, so we execute the </span>
+        <span class="c"># start script now and wait until it finishes. </span>
+        <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_paths</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+
+        <span class="n">shfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">,</span> <span class="s">&quot;start.sh&quot;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">run_and_wait</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">,</span>
+            <span class="n">shfile</span> <span class="o">=</span> <span class="n">shfile</span><span class="p">,</span>
+            <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxRoute.upload_sources"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.route.LinuxRoute.upload_sources">[docs]</a>    <span class="k">def</span> <span class="nf">upload_sources</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="c"># upload stop.sh script</span>
+        <span class="n">stop_command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_paths</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_stop_command</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">upload</span><span class="p">(</span><span class="n">stop_command</span><span class="p">,</span>
+                <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">,</span> <span class="s">&quot;stop.sh&quot;</span><span class="p">),</span>
+                <span class="n">text</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span>
+                <span class="c"># Overwrite file every time. </span>
+                <span class="c"># The stop.sh has the path to the socket, which should change</span>
+                <span class="c"># on every experiment run.</span>
+                <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxRoute.do_deploy"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.route.LinuxRoute.do_deploy">[docs]</a>    <span class="k">def</span> <span class="nf">do_deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">device</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">device</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">PROVISIONED</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">deploy</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_start_command</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_provision</span><span class="p">()</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_ready</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="LinuxRoute.do_start"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.route.LinuxRoute.do_start">[docs]</a>    <span class="k">def</span> <span class="nf">do_start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+            <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Starting command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_started</span><span class="p">()</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Failed to execute command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">command</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+</div>
+<div class="viewcode-block" id="LinuxRoute.do_stop"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.route.LinuxRoute.do_stop">[docs]</a>    <span class="k">def</span> <span class="nf">do_stop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;command&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span>
+        
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Stopping command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
+
+            <span class="n">command</span> <span class="o">=</span> <span class="s">&quot;bash </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">,</span> <span class="s">&quot;stop.sh&quot;</span><span class="p">)</span>
+            <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">execute_command</span><span class="p">(</span><span class="n">command</span><span class="p">,</span>
+                    <span class="n">blocking</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="n">err</span><span class="p">:</span>
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Failed to stop command &#39;</span><span class="si">%s</span><span class="s">&#39; &quot;</span> <span class="o">%</span> <span class="n">command</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_stopped</span><span class="p">()</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_start_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">network</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;network&quot;</span><span class="p">)</span>
+        <span class="n">prefix</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;prefix&quot;</span><span class="p">)</span>
+        <span class="n">nexthop</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;nexthop&quot;</span><span class="p">)</span>
+        <span class="n">devicename</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">device</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;deviceName&quot;</span><span class="p">)</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;sudo -S ip route add </span><span class="si">%s</span><span class="s">/</span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s"> dev </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;network&quot;</span><span class="p">),</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;prefix&quot;</span><span class="p">),</span>
+            <span class="s">&quot;default&quot;</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">nexthop</span> <span class="k">else</span> <span class="s">&quot;via </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">nexthop</span><span class="p">,</span>
+            <span class="n">devicename</span><span class="p">))</span>
+
+        <span class="k">return</span> <span class="s">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_stop_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">network</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;network&quot;</span><span class="p">)</span>
+        <span class="n">prefix</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;prefix&quot;</span><span class="p">)</span>
+        <span class="n">nexthop</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;nexthop&quot;</span><span class="p">)</span>
+        <span class="n">devicename</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">device</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;deviceName&quot;</span><span class="p">)</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;sudo -S ip route del </span><span class="si">%s</span><span class="s">/</span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s"> dev </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;network&quot;</span><span class="p">),</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;prefix&quot;</span><span class="p">),</span>
+            <span class="s">&quot;default&quot;</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">nexthop</span> <span class="k">else</span> <span class="s">&quot;via </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">nexthop</span><span class="p">,</span>
+            <span class="n">devicename</span><span class="p">))</span>
+
+        <span class="k">return</span> <span class="s">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/rpmfuncs.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/rpmfuncs.html
new file mode 100644 (file)
index 0000000..4503d56
--- /dev/null
@@ -0,0 +1,161 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.rpmfuncs &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.rpmfuncs</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="n">RPM_FUSION_URL</span> <span class="o">=</span> <span class="s">&#39;http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm&#39;</span>
+<span class="n">RPM_FUSION_URL_F12</span> <span class="o">=</span> <span class="s">&#39;http://download1.rpmfusion.org/free/fedora/releases/12/Everything/x86_64/os/rpmfusion-free-release-12-1.noarch.rpm&#39;</span>
+<span class="n">RPM_FUSION_URL_F14</span> <span class="o">=</span> <span class="s">&#39;http://download1.rpmfusion.org/free/fedora/releases/14/Everything/x86_64/os/rpmfusion-free-release-14-0.4.noarch.rpm&#39;</span>
+
+
+<span class="c"># TODO: Investigate using http://nixos.org/nix/</span>
+
+<div class="viewcode-block" id="install_packages_command"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.rpmfuncs.install_packages_command">[docs]</a><span class="k">def</span> <span class="nf">install_packages_command</span><span class="p">(</span><span class="n">os</span><span class="p">,</span> <span class="n">packages</span><span class="p">):</span>
+    <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">packages</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
+        <span class="n">packages</span> <span class="o">=</span> <span class="p">[</span><span class="n">packages</span><span class="p">]</span>
+
+    <span class="n">cmd</span> <span class="o">=</span> <span class="n">install_rpmfusion_command</span><span class="p">(</span><span class="n">os</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">cmd</span><span class="p">:</span> <span class="n">cmd</span> <span class="o">+=</span> <span class="s">&quot; ; &quot;</span>
+    <span class="n">cmd</span> <span class="o">+=</span> <span class="s">&quot; &amp;&amp; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="k">lambda</span> <span class="n">p</span><span class="p">:</span> 
+            <span class="s">&quot; { rpm -q </span><span class="si">%(package)s</span><span class="s"> || sudo -S yum -y install --nogpgcheck </span><span class="si">%(package)s</span><span class="s"> ; } &quot;</span> <span class="o">%</span> <span class="p">{</span>
+                    <span class="s">&#39;package&#39;</span><span class="p">:</span> <span class="n">p</span><span class="p">},</span> <span class="n">packages</span><span class="p">))</span>
+    
+    <span class="c">#cmd = { rpm -q rpmfusion-free-release || sudo -s rpm -i ... ; } &amp;&amp; { rpm -q vim || sudo yum -y install vim ; } &amp;&amp; ..</span>
+    <span class="k">return</span> <span class="n">cmd</span> 
+</div>
+<div class="viewcode-block" id="remove_packages_command"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.rpmfuncs.remove_packages_command">[docs]</a><span class="k">def</span> <span class="nf">remove_packages_command</span><span class="p">(</span><span class="n">os</span><span class="p">,</span> <span class="n">packages</span><span class="p">):</span>
+    <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">packages</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
+        <span class="n">packages</span> <span class="o">=</span> <span class="p">[</span><span class="n">packages</span><span class="p">]</span>
+
+    <span class="n">cmd</span> <span class="o">=</span> <span class="s">&quot; &amp;&amp; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="k">lambda</span> <span class="n">p</span><span class="p">:</span> 
+            <span class="s">&quot; { rpm -q </span><span class="si">%(package)s</span><span class="s"> &amp;&amp; sudo -S yum -y remove </span><span class="si">%(package)s</span><span class="s"> ; } &quot;</span> <span class="o">%</span> <span class="p">{</span>
+                    <span class="s">&#39;package&#39;</span><span class="p">:</span> <span class="n">p</span><span class="p">},</span> <span class="n">packages</span><span class="p">))</span>
+        
+    <span class="c">#cmd = { rpm -q vim &amp;&amp; sudo yum -y remove vim ; } &amp;&amp; ..</span>
+    <span class="k">return</span> <span class="n">cmd</span> 
+</div>
+<div class="viewcode-block" id="install_rpmfusion_command"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.rpmfuncs.install_rpmfusion_command">[docs]</a><span class="k">def</span> <span class="nf">install_rpmfusion_command</span><span class="p">(</span><span class="n">os</span><span class="p">):</span>
+    <span class="kn">from</span> <span class="nn">nepi.resources.linux.node</span> <span class="kn">import</span> <span class="n">OSType</span>
+
+    <span class="n">cmd</span> <span class="o">=</span> <span class="s">&quot; { rpm -q rpmfusion-free-release || sudo -S rpm -i </span><span class="si">%(package)s</span><span class="s"> ; } &quot;</span>
+
+    <span class="k">if</span> <span class="p">(</span><span class="n">os</span> <span class="o">&amp;</span> <span class="n">OSType</span><span class="o">.</span><span class="n">FEDORA_8</span><span class="p">):</span>
+        <span class="c"># RpmFusion for Fedora 8 is unmaintained </span>
+        <span class="n">cmd</span> <span class="o">=</span> <span class="s">&quot;&quot;</span>
+    <span class="k">elif</span> <span class="p">(</span><span class="n">os</span> <span class="o">&amp;</span> <span class="n">OSType</span><span class="o">.</span><span class="n">FEDORA_12</span><span class="p">):</span>
+        <span class="c"># For f12</span>
+        <span class="n">cmd</span> <span class="o">=</span>  <span class="n">cmd</span> <span class="o">%</span>  <span class="p">{</span><span class="s">&#39;package&#39;</span><span class="p">:</span> <span class="n">RPM_FUSION_URL_F12</span><span class="p">}</span>
+    <span class="k">elif</span> <span class="p">(</span><span class="n">os</span> <span class="o">&amp;</span> <span class="n">OSType</span><span class="o">.</span><span class="n">FEDORA_14</span><span class="p">):</span>
+        <span class="c"># For f14</span>
+        <span class="n">cmd</span> <span class="o">=</span> <span class="n">cmd</span> <span class="o">%</span>  <span class="p">{</span><span class="s">&#39;package&#39;</span><span class="p">:</span> <span class="n">RPM_FUSION_URL_F14</span><span class="p">}</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="c"># For f14+</span>
+        <span class="n">cmd</span> <span class="o">=</span> <span class="n">cmd</span> <span class="o">%</span>  <span class="p">{</span><span class="s">&#39;package&#39;</span><span class="p">:</span> <span class="n">RPM_FUSION_URL</span><span class="p">}</span>
+
+    <span class="k">return</span> <span class="n">cmd</span>
+ </div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/tap.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/tap.html
new file mode 100644 (file)
index 0000000..a49c330
--- /dev/null
@@ -0,0 +1,710 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.tap &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.tap</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span><span class="p">,</span> <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.application</span> <span class="kn">import</span> <span class="n">LinuxApplication</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.node</span> <span class="kn">import</span> <span class="n">LinuxNode</span>
+<span class="kn">from</span> <span class="nn">nepi.util.timefuncs</span> <span class="kn">import</span> <span class="n">tnow</span><span class="p">,</span> <span class="n">tdiffsec</span>
+
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">time</span>
+
+<span class="n">PYTHON_VSYS_VERSION</span> <span class="o">=</span> <span class="s">&quot;1.0&quot;</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="LinuxTap"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap">[docs]</a><span class="k">class</span> <span class="nc">LinuxTap</span><span class="p">(</span><span class="n">LinuxApplication</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;linux::Tap&quot;</span>
+    <span class="n">_help</span> <span class="o">=</span> <span class="s">&quot;Creates a TAP device on a Linux host&quot;</span>
+
+    <span class="n">IFF_TUN</span> <span class="o">=</span> <span class="mh">0x0001</span>
+    <span class="n">IFF_TAP</span> <span class="o">=</span> <span class="mh">0x0002</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">ip</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ip&quot;</span><span class="p">,</span> <span class="s">&quot;IPv4 Address&quot;</span><span class="p">,</span>
+              <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">mac</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;mac&quot;</span><span class="p">,</span> <span class="s">&quot;MAC Address&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">prefix</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;prefix&quot;</span><span class="p">,</span> <span class="s">&quot;IPv4 network prefix&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">mtu</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;mtu&quot;</span><span class="p">,</span> <span class="s">&quot;Maximum transmition unit for device&quot;</span><span class="p">,</span>
+                <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">)</span>
+
+        <span class="n">devname</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;deviceName&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;Name of the network interface (e.g. eth0, wlan0, etc)&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">NoWrite</span><span class="p">)</span>
+
+        <span class="n">up</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;up&quot;</span><span class="p">,</span> <span class="s">&quot;Link up&quot;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span>
+                <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">)</span>
+        
+        <span class="n">pointopoint</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;pointopoint&quot;</span><span class="p">,</span> <span class="s">&quot;Peer IP address&quot;</span><span class="p">,</span> 
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">txqueuelen</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;txqueuelen&quot;</span><span class="p">,</span> <span class="s">&quot;Length of transmission queue&quot;</span><span class="p">,</span> 
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">txqueuelen</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;txqueuelen&quot;</span><span class="p">,</span> <span class="s">&quot;Length of transmission queue&quot;</span><span class="p">,</span> 
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">gre_key</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;greKey&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;GRE key to be used to configure GRE tunnel&quot;</span><span class="p">,</span> 
+                <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">gre_remote</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;greRemote&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;Public IP of remote endpoint for GRE tunnel&quot;</span><span class="p">,</span> 
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">pi</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;pi&quot;</span><span class="p">,</span> <span class="s">&quot;Add PI (protocol information) header&quot;</span><span class="p">,</span> 
+                <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+                <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">)</span>
+        <span class="n">tear_down</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;tearDown&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;Bash script to be executed before releasing the resource&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ip</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">mac</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">prefix</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">mtu</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">devname</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">up</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">pointopoint</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">txqueuelen</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">gre_key</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">gre_remote</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">pi</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">tear_down</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxTap</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_gre_enabled</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_vif_prefix</span> <span class="o">=</span> <span class="s">&quot;tap&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_vif_type</span> <span class="o">=</span> <span class="s">&quot;IFF_TAP&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_vif_type_flag</span> <span class="o">=</span> <span class="n">LinuxTap</span><span class="o">.</span><span class="n">IFF_TAP</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">vif_prefix</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">)</span>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxTap.node"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.node">[docs]</a>    <span class="k">def</span> <span class="nf">node</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">LinuxNode</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+        <span class="k">if</span> <span class="n">node</span><span class="p">:</span> <span class="k">return</span> <span class="n">node</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+        <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="s">&quot;linux::TAP/TUN devices must be connected to a linux::Node&quot;</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxTap.gre_enabled"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.gre_enabled">[docs]</a>    <span class="k">def</span> <span class="nf">gre_enabled</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_gre_enabled</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
+            <span class="kn">from</span> <span class="nn">nepi.resources.linux.gretunnel</span> <span class="kn">import</span> <span class="n">LinuxGRETunnel</span>
+            <span class="n">gre</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">LinuxGRETunnel</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+            <span class="k">if</span> <span class="n">gre</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_gre_enabled</span> <span class="o">=</span> <span class="bp">True</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_gre_enabled</span>
+</div>
+<div class="viewcode-block" id="LinuxTap.upload_sources"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.upload_sources">[docs]</a>    <span class="k">def</span> <span class="nf">upload_sources</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">scripts</span> <span class="o">=</span> <span class="p">[]</span>
+
+        <span class="c"># udp-connect python script</span>
+        <span class="n">udp_connect</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">__file__</span><span class="p">),</span> <span class="s">&quot;scripts&quot;</span><span class="p">,</span>
+                <span class="s">&quot;linux-udp-connect.py&quot;</span><span class="p">)</span>
+        
+        <span class="n">scripts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">udp_connect</span><span class="p">)</span>
+
+        <span class="n">tap_create</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">__file__</span><span class="p">),</span> <span class="s">&quot;scripts&quot;</span><span class="p">,</span>
+                <span class="s">&quot;linux-tap-create.py&quot;</span><span class="p">)</span>
+        
+        <span class="n">scripts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">tap_create</span><span class="p">)</span>
+
+        <span class="n">tap_delete</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">__file__</span><span class="p">),</span> <span class="s">&quot;scripts&quot;</span><span class="p">,</span>
+                <span class="s">&quot;linux-tap-delete.py&quot;</span><span class="p">)</span>
+        
+        <span class="n">scripts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">tap_delete</span><span class="p">)</span>
+
+        <span class="c"># tunnel creation python script</span>
+        <span class="n">tunchannel</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">__file__</span><span class="p">),</span> <span class="s">&quot;scripts&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;tunchannel.py&quot;</span><span class="p">)</span>
+
+        <span class="n">scripts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">tunchannel</span><span class="p">)</span>
+
+        <span class="c"># Upload scripts</span>
+        <span class="n">scripts</span> <span class="o">=</span> <span class="s">&quot;;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">scripts</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">upload</span><span class="p">(</span><span class="n">scripts</span><span class="p">,</span>
+                <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">src_dir</span><span class="p">),</span>
+                <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">False</span><span class="p">)</span>
+
+        <span class="c"># upload stop.sh script</span>
+        <span class="n">stop_command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_paths</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_stop_command</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">upload</span><span class="p">(</span><span class="n">stop_command</span><span class="p">,</span>
+                <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">,</span> <span class="s">&quot;stop.sh&quot;</span><span class="p">),</span>
+                <span class="n">text</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span>
+                <span class="c"># Overwrite file every time. </span>
+                <span class="c"># The stop.sh has the path to the socket, which should change</span>
+                <span class="c"># on every experiment run.</span>
+                <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+</div>
+    <span class="k">def</span> <span class="nf">upload_start_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="c"># If GRE mode is enabled, TAP creation is delayed until the</span>
+        <span class="c"># tunnel is established</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">gre_enabled</span><span class="p">:</span>
+            <span class="c"># We want to make sure the device is up and running</span>
+            <span class="c"># before the deploy is over, so we execute the </span>
+            <span class="c"># start script now and wait until it finishes. </span>
+            <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span>
+            <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_paths</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+
+            <span class="n">shfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">,</span> <span class="s">&quot;start.sh&quot;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">run_and_wait</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">,</span>
+                <span class="n">shfile</span> <span class="o">=</span> <span class="n">shfile</span><span class="p">,</span>
+                <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+
+<div class="viewcode-block" id="LinuxTap.upload_start_command"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.upload_start_command">[docs]</a>    <span class="k">def</span> <span class="nf">upload_start_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="c"># If GRE mode is enabled, TAP creation is delayed until the</span>
+        <span class="c"># tunnel is established</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">gre_enabled</span><span class="p">:</span>
+            <span class="c"># Overwrite file every time. </span>
+            <span class="c"># The start.sh has the path to the socket, wich should change</span>
+            <span class="c"># on every experiment run.</span>
+            <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span>
+            
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Uploading command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
+            
+            <span class="c"># replace application specific paths in the command</span>
+            <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_paths</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+            
+            <span class="c"># replace application specific paths in the environment</span>
+            <span class="n">env</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">)</span>
+            <span class="n">env</span> <span class="o">=</span> <span class="n">env</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_paths</span><span class="p">(</span><span class="n">env</span><span class="p">)</span>
+
+            <span class="n">shfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">,</span> <span class="s">&quot;start.sh&quot;</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">upload_command</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> 
+                    <span class="n">shfile</span> <span class="o">=</span> <span class="n">shfile</span><span class="p">,</span>
+                    <span class="n">env</span> <span class="o">=</span> <span class="n">env</span><span class="p">,</span>
+                    <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+
+            <span class="c"># We want to make sure the device is up and running</span>
+            <span class="c"># before the deploy finishes, so we execute now the </span>
+            <span class="c"># start script. We run it in background, because the </span>
+            <span class="c"># TAP will live for as long as the process that </span>
+            <span class="c"># created it is running, and wait until the TAP  </span>
+            <span class="c"># is created. </span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_run_in_background</span><span class="p">()</span>
+            </div>
+<div class="viewcode-block" id="LinuxTap.do_deploy"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.do_deploy">[docs]</a>    <span class="k">def</span> <span class="nf">do_deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">PROVISIONED</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">deploy</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">gre_enabled</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_vif_prefix</span> <span class="o">=</span> <span class="s">&quot;gre&quot;</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">vif_prefix</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;deviceName&quot;</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;deviceName&quot;</span><span class="p">,</span> <span class="s">&quot;</span><span class="si">%s%d</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">vif_prefix</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">))</span> 
+
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_start_command</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;depends&quot;</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;depends&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_dependencies</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;install&quot;</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;install&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_install</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_provision</span><span class="p">()</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_ready</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="LinuxTap.do_start"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.do_start">[docs]</a>    <span class="k">def</span> <span class="nf">do_start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+            <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Starting command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_started</span><span class="p">()</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Failed to execute command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">command</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+</div>
+<div class="viewcode-block" id="LinuxTap.do_stop"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.do_stop">[docs]</a>    <span class="k">def</span> <span class="nf">do_stop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;command&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span>
+        
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Stopping command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
+
+            <span class="n">command</span> <span class="o">=</span> <span class="s">&quot;bash </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">,</span> <span class="s">&quot;stop.sh&quot;</span><span class="p">)</span>
+            <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">execute_command</span><span class="p">(</span><span class="n">command</span><span class="p">,</span>
+                    <span class="n">blocking</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="n">err</span><span class="p">:</span>
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Failed to stop command &#39;</span><span class="si">%s</span><span class="s">&#39; &quot;</span> <span class="o">%</span> <span class="n">command</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_stopped</span><span class="p">()</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxTap.state"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.state">[docs]</a>    <span class="k">def</span> <span class="nf">state</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">state_check_delay</span> <span class="o">=</span> <span class="mf">0.5</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span> <span class="ow">and</span> \
+                <span class="n">tdiffsec</span><span class="p">(</span><span class="n">tnow</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_last_state_check</span><span class="p">)</span> <span class="o">&gt;</span> <span class="n">state_check_delay</span><span class="p">:</span>
+
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;deviceName&quot;</span><span class="p">):</span>
+                <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s">&quot;ifconfig&quot;</span><span class="p">)</span>
+
+                <span class="k">if</span> <span class="n">out</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;deviceName&quot;</span><span class="p">))</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span> 
+                    <span class="c"># tap is not running is not running (socket not found)</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">set_stopped</span><span class="p">()</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">_last_state_check</span> <span class="o">=</span> <span class="n">tnow</span><span class="p">()</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span>
+</div>
+<div class="viewcode-block" id="LinuxTap.do_release"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.do_release">[docs]</a>    <span class="k">def</span> <span class="nf">do_release</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="c"># Node needs to wait until all associated RMs are released</span>
+        <span class="c"># to be released</span>
+        <span class="kn">from</span> <span class="nn">nepi.resources.linux.tunnel</span> <span class="kn">import</span> <span class="n">LinuxTunnel</span>
+        <span class="n">rms</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">LinuxTunnel</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+
+        <span class="k">for</span> <span class="n">rm</span> <span class="ow">in</span> <span class="n">rms</span><span class="p">:</span>
+            <span class="k">if</span> <span class="n">rm</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STOPPED</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">release</span><span class="p">)</span>
+                <span class="k">return</span> 
+
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxTap</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_release</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="LinuxTap.gre_connect"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.gre_connect">[docs]</a>    <span class="k">def</span> <span class="nf">gre_connect</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="p">,</span> <span class="n">connection_app_home</span><span class="p">,</span>
+            <span class="n">connection_run_home</span><span class="p">):</span>
+        <span class="n">gre_connect_command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_gre_connect_command</span><span class="p">(</span><span class="n">remote_endpoint</span><span class="p">,</span>
+                <span class="n">connection_app_home</span><span class="p">,</span> <span class="n">connection_run_home</span><span class="p">)</span>
+
+        <span class="c"># upload command to connect.sh script</span>
+        <span class="n">shfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">connection_app_home</span><span class="p">,</span> <span class="s">&quot;gre-connect.sh&quot;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">upload_command</span><span class="p">(</span><span class="n">gre_connect_command</span><span class="p">,</span>
+                <span class="n">shfile</span> <span class="o">=</span> <span class="n">shfile</span><span class="p">,</span>
+                <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">False</span><span class="p">)</span>
+
+        <span class="c"># invoke connect script</span>
+        <span class="n">cmd</span> <span class="o">=</span> <span class="s">&quot;bash </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">shfile</span>
+        <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="n">connection_run_home</span><span class="p">,</span>
+                <span class="n">pidfile</span> <span class="o">=</span> <span class="s">&quot;gre_connect_pidfile&quot;</span><span class="p">,</span>
+                <span class="n">stdout</span> <span class="o">=</span> <span class="s">&quot;gre_connect_stdout&quot;</span><span class="p">,</span>
+                <span class="n">stderr</span> <span class="o">=</span> <span class="s">&quot;gre_connect_stderr&quot;</span><span class="p">,</span> 
+                <span class="p">)</span>
+             
+        <span class="c"># check if execution errors occurred</span>
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Failed to connect endpoints &quot;</span>
+        
+        <span class="k">if</span> <span class="n">proc</span><span class="o">.</span><span class="n">poll</span><span class="p">()</span> <span class="ow">or</span> <span class="n">err</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+    
+        <span class="c"># Wait for pid file to be generated</span>
+        <span class="n">pid</span><span class="p">,</span> <span class="n">ppid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">wait_pid</span><span class="p">(</span><span class="n">connection_run_home</span><span class="p">,</span> 
+                <span class="n">pidfile</span> <span class="o">=</span> <span class="s">&quot;gre_connect_pidfile&quot;</span><span class="p">)</span>
+        
+        <span class="c"># If the process is not running, check for error information</span>
+        <span class="c"># on the remote machine</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">pid</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">ppid</span><span class="p">:</span>
+            <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">check_errors</span><span class="p">(</span><span class="n">connection_run_home</span><span class="p">,</span>
+                    <span class="n">stderr</span> <span class="o">=</span> <span class="s">&quot;gre_connect_stderr&quot;</span><span class="p">)</span> 
+
+            <span class="c"># Out is what was written in the stderr file</span>
+            <span class="k">if</span> <span class="n">err</span><span class="p">:</span>
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Failed to start command &#39;</span><span class="si">%s</span><span class="s">&#39; &quot;</span> <span class="o">%</span> <span class="n">command</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+        
+        <span class="k">return</span> <span class="bp">True</span>
+</div>
+<div class="viewcode-block" id="LinuxTap.initiate_udp_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.initiate_udp_connection">[docs]</a>    <span class="k">def</span> <span class="nf">initiate_udp_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="p">,</span> <span class="n">connection_app_home</span><span class="p">,</span> 
+            <span class="n">connection_run_home</span><span class="p">,</span> <span class="n">cipher</span><span class="p">,</span> <span class="n">cipher_key</span><span class="p">,</span> <span class="n">bwlimit</span><span class="p">,</span> <span class="n">txqueuelen</span><span class="p">):</span>
+        <span class="n">port</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">udp_connect</span><span class="p">(</span><span class="n">remote_endpoint</span><span class="p">,</span> <span class="n">connection_app_home</span><span class="p">,</span> 
+            <span class="n">connection_run_home</span><span class="p">,</span> <span class="n">cipher</span><span class="p">,</span> <span class="n">cipher_key</span><span class="p">,</span> <span class="n">bwlimit</span><span class="p">,</span> <span class="n">txqueuelen</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">port</span>
+</div>
+<div class="viewcode-block" id="LinuxTap.udp_connect"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.udp_connect">[docs]</a>    <span class="k">def</span> <span class="nf">udp_connect</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="p">,</span> <span class="n">connection_app_home</span><span class="p">,</span> 
+            <span class="n">connection_run_home</span><span class="p">,</span> <span class="n">cipher</span><span class="p">,</span> <span class="n">cipher_key</span><span class="p">,</span> <span class="n">bwlimit</span><span class="p">,</span> <span class="n">txqueuelen</span><span class="p">):</span>
+        <span class="n">udp_connect_command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_udp_connect_command</span><span class="p">(</span>
+                <span class="n">remote_endpoint</span><span class="p">,</span> <span class="n">connection_app_home</span><span class="p">,</span> <span class="n">connection_run_home</span><span class="p">,</span>
+                <span class="n">cipher</span><span class="p">,</span> <span class="n">cipher_key</span><span class="p">,</span> <span class="n">bwlimit</span><span class="p">,</span> <span class="n">txqueuelen</span><span class="p">)</span>
+
+        <span class="c"># upload command to connect.sh script</span>
+        <span class="n">shfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">connection_app_home</span><span class="p">,</span> <span class="s">&quot;udp-connect.sh&quot;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">upload_command</span><span class="p">(</span><span class="n">udp_connect_command</span><span class="p">,</span>
+                <span class="n">shfile</span> <span class="o">=</span> <span class="n">shfile</span><span class="p">,</span>
+                <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">False</span><span class="p">)</span>
+
+        <span class="c"># invoke connect script</span>
+        <span class="n">cmd</span> <span class="o">=</span> <span class="s">&quot;bash </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">shfile</span>
+        <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="n">connection_run_home</span><span class="p">,</span>
+               <span class="n">pidfile</span> <span class="o">=</span> <span class="s">&quot;udp_connect_pidfile&quot;</span><span class="p">,</span>
+               <span class="n">stdout</span> <span class="o">=</span> <span class="s">&quot;udp_connect_stdout&quot;</span><span class="p">,</span>
+               <span class="n">stderr</span> <span class="o">=</span> <span class="s">&quot;udp_connect_stderr&quot;</span><span class="p">,</span> 
+                <span class="p">)</span> 
+             
+        <span class="c"># check if execution errors occurred</span>
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Failed to connect endpoints &quot;</span>
+        
+        <span class="k">if</span> <span class="n">proc</span><span class="o">.</span><span class="n">poll</span><span class="p">():</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+    
+        <span class="c"># Wait for pid file to be generated</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_pid</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ppid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">wait_pid</span><span class="p">(</span>
+                <span class="n">connection_run_home</span><span class="p">,</span>
+                <span class="n">pidfile</span> <span class="o">=</span> <span class="s">&quot;udp_connect_pidfile&quot;</span><span class="p">)</span>
+        
+        <span class="c"># If the process is not running, check for error information</span>
+        <span class="c"># on the remote machine</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pid</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ppid</span><span class="p">:</span>
+            <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">check_errors</span><span class="p">(</span>
+                    <span class="n">connection_run_home</span><span class="p">,</span>
+                    <span class="n">stderr</span> <span class="o">=</span> <span class="s">&quot;udp_connect_stderr&quot;</span><span class="p">)</span>
+
+            <span class="c"># Out is what was written in the stderr file</span>
+            <span class="k">if</span> <span class="n">err</span><span class="p">:</span>
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Failed to start command &#39;</span><span class="si">%s</span><span class="s">&#39; &quot;</span> <span class="o">%</span> <span class="n">command</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">wait_file</span><span class="p">(</span><span class="n">connection_run_home</span><span class="p">,</span> <span class="s">&quot;local_port&quot;</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxTap.establish_udp_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.establish_udp_connection">[docs]</a>    <span class="k">def</span> <span class="nf">establish_udp_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="p">,</span>
+            <span class="n">connection_app_home</span><span class="p">,</span> <span class="n">connection_run_home</span><span class="p">,</span> <span class="n">port</span><span class="p">):</span>
+        <span class="c"># upload remote port number to file</span>
+        <span class="n">rem_port</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%s</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">port</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">upload</span><span class="p">(</span><span class="n">rem_port</span><span class="p">,</span>
+                <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">connection_run_home</span><span class="p">,</span> <span class="s">&quot;remote_port&quot;</span><span class="p">),</span>
+                <span class="n">text</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span> 
+                <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">False</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxTap.verify_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.verify_connection">[docs]</a>    <span class="k">def</span> <span class="nf">verify_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="p">,</span>
+            <span class="n">connection_app_home</span><span class="p">,</span> <span class="n">connection_run_home</span><span class="p">):</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">wait_file</span><span class="p">(</span><span class="n">connection_run_home</span><span class="p">,</span> <span class="s">&quot;ret_file&quot;</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxTap.terminate_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.terminate_connection">[docs]</a>    <span class="k">def</span> <span class="nf">terminate_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="p">,</span>
+            <span class="n">connection_app_home</span><span class="p">,</span> <span class="n">connection_run_home</span><span class="p">):</span>
+        <span class="k">if</span>  <span class="bp">self</span><span class="o">.</span><span class="n">_pid</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ppid</span><span class="p">:</span>
+            <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">kill</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_pid</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ppid</span><span class="p">,</span> 
+                    <span class="n">sudo</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span> 
+
+            <span class="c"># check if execution errors occurred</span>
+            <span class="k">if</span> <span class="n">proc</span><span class="o">.</span><span class="n">poll</span><span class="p">()</span> <span class="ow">and</span> <span class="n">err</span><span class="p">:</span>
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Failed to Kill the Tap&quot;</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+</div>
+<div class="viewcode-block" id="LinuxTap.check_status"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.check_status">[docs]</a>    <span class="k">def</span> <span class="nf">check_status</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">status</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_pid</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ppid</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxTap.wait_file"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.wait_file">[docs]</a>    <span class="k">def</span> <span class="nf">wait_file</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">home</span><span class="p">,</span> <span class="n">filename</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Waits until file on endpoint is generated &quot;&quot;&quot;</span>
+        <span class="n">result</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="n">delay</span> <span class="o">=</span> <span class="mf">1.0</span>
+
+        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="mi">20</span><span class="p">):</span>
+            <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">check_output</span><span class="p">(</span><span class="n">home</span><span class="p">,</span> <span class="n">filename</span><span class="p">)</span>
+            <span class="k">if</span> <span class="n">out</span><span class="p">:</span>
+                <span class="n">result</span> <span class="o">=</span> <span class="n">out</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
+                <span class="k">break</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="n">delay</span><span class="p">)</span>
+                <span class="n">delay</span> <span class="o">=</span> <span class="n">delay</span> <span class="o">*</span> <span class="mf">1.5</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Couldn&#39;t retrieve </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">filename</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">return</span> <span class="n">result</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_start_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">gre_enabled</span><span class="p">:</span>
+            <span class="n">command</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">command</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;sudo -S &quot;</span><span class="p">]</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;PYTHONPATH=$PYTHONPATH:${SRC}&quot;</span><span class="p">)</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;python ${SRC}/linux-tap-create.py&quot;</span><span class="p">)</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-t </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">vif_type</span><span class="p">)</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-a </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ip&quot;</span><span class="p">))</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-n </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;prefix&quot;</span><span class="p">))</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-N </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;deviceName&quot;</span><span class="p">))</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-S </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">sock_name</span><span class="p">)</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;pi&quot;</span><span class="p">):</span>
+                <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-p&quot;</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="s">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_stop_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">gre_enabled</span><span class="p">:</span>
+            <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_stop_gre_command</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">command</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;sudo -S &quot;</span><span class="p">]</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;PYTHONPATH=$PYTHONPATH:${SRC}&quot;</span><span class="p">)</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;python ${SRC}/linux-tap-delete.py&quot;</span><span class="p">)</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-N </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;deviceName&quot;</span><span class="p">))</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-S </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">sock_name</span><span class="p">)</span>
+            <span class="n">command</span> <span class="o">=</span> <span class="s">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">command</span>
+
+    <span class="k">def</span> <span class="nf">_gre_connect_command</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="p">,</span> 
+            <span class="n">connection_app_home</span><span class="p">,</span> <span class="n">connecrion_app_home</span><span class="p">):</span>
+        <span class="c"># Set the remote endpoint to (private) device IP</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;pointopoint&quot;</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ip&quot;</span><span class="p">))</span>
+        <span class="c">## public node IP</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;greRemote&quot;</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ip&quot;</span><span class="p">))</span>
+
+        <span class="c"># Generate GRE connect command</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;(&quot;</span><span class="p">]</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_stop_gre_command</span><span class="p">)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;) ; (&quot;</span><span class="p">)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_start_gre_command</span><span class="p">)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;)&quot;</span><span class="p">)</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_paths</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">command</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_start_gre_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;sudo -S modprobe ip_gre&quot;</span><span class="p">)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;sudo -S ip tunnel add </span><span class="si">%s</span><span class="s"> mode gre remote </span><span class="si">%s</span><span class="s"> local </span><span class="si">%s</span><span class="s"> ttl 255 csum key </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;deviceName&quot;</span><span class="p">),</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;greRemote&quot;</span><span class="p">),</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ip&quot;</span><span class="p">),</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;greKey&quot;</span><span class="p">)</span>
+            <span class="p">))</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;sudo -S ip addr add </span><span class="si">%s</span><span class="s">/</span><span class="si">%s</span><span class="s"> peer </span><span class="si">%s</span><span class="s">/</span><span class="si">%s</span><span class="s"> dev </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ip&quot;</span><span class="p">),</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;prefix&quot;</span><span class="p">),</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;pointopoint&quot;</span><span class="p">),</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;prefix&quot;</span><span class="p">),</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;deviceName&quot;</span><span class="p">),</span>
+                <span class="p">))</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;sudo -S ip link set </span><span class="si">%s</span><span class="s"> up &quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;deviceName&quot;</span><span class="p">))</span>
+
+        <span class="k">return</span> <span class="s">&quot;;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_stop_gre_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;sudo -S modprobe -r ip_gre&quot;</span><span class="p">)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;sudo -S ip link set down dev </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;deviceName&quot;</span><span class="p">),</span>
+            <span class="p">))</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;sudo -S ip link del dev </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;deviceName&quot;</span><span class="p">),</span>
+                <span class="p">))</span>
+
+        <span class="k">return</span> <span class="s">&quot;;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_udp_connect_command</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="p">,</span> 
+            <span class="n">connection_app_home</span><span class="p">,</span> <span class="n">connection_run_home</span><span class="p">,</span>
+            <span class="n">cipher</span><span class="p">,</span> <span class="n">cipher_key</span><span class="p">,</span> <span class="n">bwlimit</span><span class="p">,</span> <span class="n">txqueuelen</span><span class="p">):</span>
+
+        <span class="c"># Set the remote endpoint to the IP of the device</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;pointopoint&quot;</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ip&quot;</span><span class="p">))</span>
+        
+        <span class="c"># Public IP of the remote NODE to stablish tunnel</span>
+        <span class="n">remote_ip</span> <span class="o">=</span> <span class="n">remote_endpoint</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ip&quot;</span><span class="p">)</span>
+        <span class="n">local_ip</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ip&quot;</span><span class="p">)</span>
+
+        <span class="n">local_port_file</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">connection_run_home</span><span class="p">,</span> 
+                <span class="s">&quot;local_port&quot;</span><span class="p">)</span>
+
+        <span class="n">remote_port_file</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">connection_run_home</span><span class="p">,</span> 
+                <span class="s">&quot;remote_port&quot;</span><span class="p">)</span>
+
+        <span class="n">ret_file</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">connection_run_home</span><span class="p">,</span> 
+                <span class="s">&quot;ret_file&quot;</span><span class="p">)</span>
+
+        <span class="c"># Generate UDP connect command</span>
+        <span class="c"># Use the start command to configure TAP with peer info</span>
+        <span class="n">start_command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_start_command</span>
+        
+        <span class="n">command</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;&quot;</span><span class="p">]</span>
+        <span class="c"># Use pl-vid-udp-connect.py to stablish the tunnel between endpoints</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;sudo -S&quot;</span><span class="p">)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;PYTHONPATH=$PYTHONPATH:${SRC}&quot;</span><span class="p">)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;python ${SRC}/linux-udp-connect.py&quot;</span><span class="p">)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-t </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">vif_type</span><span class="p">)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-S </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">sock_name</span><span class="p">)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-p </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="n">local_port_file</span><span class="p">)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-P </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="n">remote_port_file</span><span class="p">)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-o </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="n">local_ip</span><span class="p">)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-O </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="n">remote_ip</span><span class="p">)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-R </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="n">ret_file</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;pi&quot;</span><span class="p">):</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-n&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">cipher</span><span class="p">:</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-c </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="n">cipher</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">cipher_key</span><span class="p">:</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-k </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="n">cipher_key</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">txqueuelen</span><span class="p">:</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-q </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="n">txqueuelen</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">bwlimit</span><span class="p">:</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-b </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="n">bwlimit</span><span class="p">)</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_paths</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">command</span>
+    
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_dependencies</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s">&quot;mercurial make gcc&quot;</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_install</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="c"># Install python-vsys and python-passfd</span>
+        <span class="n">install_passfd</span> <span class="o">=</span> <span class="p">(</span> <span class="s">&quot; ( python -c &#39;import passfd&#39; ) &quot;</span>
+                    <span class="s">&quot; || &quot;</span>
+                    <span class="s">&quot; ( &quot;</span>
+                    <span class="s">&quot;   cd ${SRC} ; &quot;</span>
+                    <span class="s">&quot;   hg clone http://nepi.inria.fr/code/python-passfd ; &quot;</span>
+                    <span class="s">&quot;   cd python-passfd ; &quot;</span>
+                    <span class="s">&quot;   make all ; &quot;</span>
+                    <span class="s">&quot;   sudo -S make install &quot;</span>
+                    <span class="s">&quot; )&quot;</span> <span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">install_passfd</span>
+
+    <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="c"># TODO: Validate!</span>
+        <span class="k">return</span> <span class="bp">True</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxTap.vif_type"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.vif_type">[docs]</a>    <span class="k">def</span> <span class="nf">vif_type</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_vif_type</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxTap.vif_type_flag"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.vif_type_flag">[docs]</a>    <span class="k">def</span> <span class="nf">vif_type_flag</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_vif_type_flag</span>
+ </div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxTap.vif_prefix"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.vif_prefix">[docs]</a>    <span class="k">def</span> <span class="nf">vif_prefix</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_vif_prefix</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxTap.sock_name"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.sock_name">[docs]</a>    <span class="k">def</span> <span class="nf">sock_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">,</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">.sock&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">vif_prefix</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxTap.valid_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.valid_connection">[docs]</a>    <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="c"># TODO: Validate!</span>
+        <span class="k">return</span> <span class="bp">True</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/tcpdump.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/tcpdump.html
new file mode 100644 (file)
index 0000000..690d480
--- /dev/null
@@ -0,0 +1,499 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.tcpdump &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.tcpdump</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span> 
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.application</span> <span class="kn">import</span> <span class="n">LinuxApplication</span>
+<span class="kn">from</span> <span class="nn">nepi.util.timefuncs</span> <span class="kn">import</span> <span class="n">tnow</span>
+
+<span class="kn">import</span> <span class="nn">os</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="LinuxTcpdump"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tcpdump.LinuxTcpdump">[docs]</a><span class="k">class</span> <span class="nc">LinuxTcpdump</span><span class="p">(</span><span class="n">LinuxApplication</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;linux::Tcpdump&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">A</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;A&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets tcpdump -A option. &quot;</span>
+            <span class="s">&quot;Prints each packet (minus its link level header) in ASCII.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">b</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;b&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets tcpdump -b option. &quot;</span>
+            <span class="s">&quot;Prints the AS number in BGP packets in ASDOT notation. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">B</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;B&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets tcpdump -B option. &quot;</span>
+            <span class="s">&quot;Sets the operaing system capture buffer size in untils of &quot;</span>
+            <span class="s">&quot;KiB (1024 bytes).&quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">c</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;c&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets tcpdump -c option. &quot;</span>
+            <span class="s">&quot;Exists after receiving count packets.&quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">C</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;C&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets tcpdump -C option. &quot;</span>
+            <span class="s">&quot;Before writing a raw packet to a savefile, check whether the &quot;</span>
+            <span class="s">&quot;file is currently larger than file_size and, if so, close the &quot;</span>
+            <span class="s">&quot;current  savefile  and  open a new one. &quot;</span>
+            <span class="s">&quot;Savefiles after the first savefile will have the name specified &quot;</span>
+            <span class="s">&quot;with the -w with a number after it, starting at 1 and continuing &quot;</span>
+            <span class="s">&quot;upward. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">d</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;d&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets tcpdump -d option. &quot;</span>
+            <span class="s">&quot;Dump the compiled packet-matching code in a human readable form &quot;</span>
+            <span class="s">&quot;to standard output and stop.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">dd</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;dd&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets tcpdump -dd option. &quot;</span>
+            <span class="s">&quot;Dump packet-matching code as a C program fragment. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">ddd</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ddd&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets tcpdump -ddd option. &quot;</span>
+            <span class="s">&quot;Dump packet-matching code as decimal numbers &quot;</span>
+            <span class="s">&quot;(preceded with a count).&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">D</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;D&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets tcpdump -D option. &quot;</span>
+            <span class="s">&quot;Print the list of the network interfaces available on the system &quot;</span>
+            <span class="s">&quot;and on which tcpdump can capture packets. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">e</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;e&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets tcpdump -e option. &quot;</span>
+            <span class="s">&quot;Print the link-level header on each dump line.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">F</span> <span class="o">=</span>  <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;F&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets tcpdump -F option. &quot;</span>
+            <span class="s">&quot;Use file as input for the filter expression.&quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">G</span> <span class="o">=</span>  <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;G&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets tcpdump -G option. &quot;</span>
+            <span class="s">&quot;If specified, rotates the dump file specified with the -w &quot;</span>
+            <span class="s">&quot;option every rotate_seconds seconds. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">i</span> <span class="o">=</span>  <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;i&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets tcpdump -i option. &quot;</span>
+            <span class="s">&quot;Listen on interface.  If unspecified, tcpdump searches the &quot;</span>
+            <span class="s">&quot;system interface list for the lowest  numbered, configured &quot;</span>
+            <span class="s">&quot;up interface (excluding loopback). &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">I</span> <span class="o">=</span>  <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;I&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets tcpdump -I option. &quot;</span>
+            <span class="s">&quot;Put the interface in &#39;monitor mode&#39;; this is supported only &quot;</span>
+            <span class="s">&quot;on IEEE 802.11 Wi-Fi interfaces, and supported only on some &quot;</span>
+            <span class="s">&quot;operating systems. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">j</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;j&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets tcpdump -j option. &quot;</span>
+            <span class="s">&quot;Sets the time stamp type for the capture to tstamp_type. &quot;</span>
+            <span class="s">&quot;The names to use for the time stamp types are given in &quot;</span>
+            <span class="s">&quot;pcap-tstamp-type(7); not all the types listed there will &quot;</span>
+            <span class="s">&quot;necessarily be valid for any given interface.&quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">K</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;K&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets tcpdump -K option. &quot;</span>
+            <span class="s">&quot;Don&#39;t attempt to verify IP, TCP, or UDP checksums. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">l</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;l&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets tcpdump -l option. &quot;</span>
+            <span class="s">&quot;Make stdout line buffered. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">U</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;U&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets tcpdump -U option. &quot;</span>
+            <span class="s">&quot;Similar to -l in its behavior, but it will cause output to be &quot;</span>
+            <span class="s">&quot;``packet-buffered&#39;&#39;, so that the output is written to stdout &quot;</span>
+            <span class="s">&quot;at the end of each packet. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">n</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;n&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets tcpdump -n option. &quot;</span>
+            <span class="s">&quot;Don&#39;t convert addresses (i.e., host addresses, port numbers, &quot;</span>
+            <span class="s">&quot;etc.) to names.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">N</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;N&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets tcpdump -N option. &quot;</span>
+            <span class="s">&quot;Don&#39;t  print domain name qualification of host names. &quot;</span>
+            <span class="s">&quot;E.g., if you give this flag then tcpdump will print ``nic&#39;&#39; &quot;</span> 
+            <span class="s">&quot;instead of ``nic.ddn.mil&#39;&#39;.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">S</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;S&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets tcpdump -S option. &quot;</span>
+            <span class="s">&quot;Print absolute, rather than relative, TCP sequence numbers.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">s</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;s&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets tcpdump -s option. &quot;</span>
+            <span class="s">&quot;Snarf  snaplen bytes of data from each packet rather than &quot;</span>
+            <span class="s">&quot;the default of 65535 bytes. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">T</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;T&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets tcpdump -T option. &quot;</span>
+             <span class="s">&quot;Force packets selected by &#39;expression&#39; to be interpreted the &quot;</span>
+             <span class="s">&quot;specified type.  Currently known types are aodv  (Ad-hoc &quot;</span>
+             <span class="s">&quot;On-demand  Distance Vector protocol), cnfp (Cisco NetFlow &quot;</span>
+             <span class="s">&quot;protocol), rpc (Remote Procedure Call), rtp (Real-Time &quot;</span>
+             <span class="s">&quot;Applications protocol), rtcp (Real-Time Applications control &quot;</span>
+             <span class="s">&quot;protocol), snmp (Simple Network Management Protocol), tftp &quot;</span>
+             <span class="s">&quot;(Trivial  File Transfer Protocol), vat (Visual Audio Tool), &quot;</span>
+             <span class="s">&quot;and wb (distributed White Board).&quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">t</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;t&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets tcpdump -t option. &quot;</span>
+            <span class="s">&quot;Don&#39;t print a timestamp on each dump line.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">tt</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;tt&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets tcpdump -tt option. &quot;</span>
+            <span class="s">&quot;Print an unformatted timestamp on each dump line. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">ttt</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ttt&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets tcpdump -ttt option. &quot;</span>
+            <span class="s">&quot;Print a delta (micro-second resolution) between current &quot;</span>
+            <span class="s">&quot;and previous line on each dump line.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">tttt</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;tttt&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets tcpdump -tttt option. &quot;</span>
+            <span class="s">&quot;Print a timestamp in default format proceeded by date on &quot;</span>
+            <span class="s">&quot;each dump line. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">ttttt</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ttttt&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets tcpdump -ttttt option. &quot;</span>
+            <span class="s">&quot;Print a delta (micro-second resolution) between current and &quot;</span>
+            <span class="s">&quot;first line on each dump line.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">v</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;v&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets tcpdump -v option. &quot;</span>
+            <span class="s">&quot;When  parsing  and printing, produce (slightly more) &quot;</span>
+            <span class="s">&quot;verbose output. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">vv</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;vv&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets tcpdump -vv option. &quot;</span>
+            <span class="s">&quot;Even  more  verbose  output. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">vvv</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;vvv&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets tcpdump -vv option. &quot;</span>
+            <span class="s">&quot;Even  more  verbose  output. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">w</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;w&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Sets tcpdump -w option. &quot;</span>
+            <span class="s">&quot;Write  the  raw  packets to file rather than parsing &quot;</span>
+            <span class="s">&quot;and printing them out.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">expression</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;expression&quot;</span><span class="p">,</span>
+            <span class="s">&quot;selects  which packets will be dumped.&quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">A</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">B</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">C</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">d</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">dd</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ddd</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">D</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">F</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">G</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">I</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">j</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">K</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">l</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">U</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">n</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">N</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">S</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">T</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">tt</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ttt</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">tttt</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ttttt</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">vv</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">vvv</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">w</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxTcpdump</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;tcpdump-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_sudo_kill</span> <span class="o">=</span> <span class="bp">True</span>
+
+<div class="viewcode-block" id="LinuxTcpdump.do_deploy"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tcpdump.LinuxTcpdump.do_deploy">[docs]</a>    <span class="k">def</span> <span class="nf">do_deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_start_command</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">,</span> <span class="s">&quot;PATH=$PATH:/usr/sbin/&quot;</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;depends&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;depends&quot;</span><span class="p">,</span> <span class="s">&quot;tcpdump&quot;</span><span class="p">)</span>
+
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxTcpdump</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_deploy</span><span class="p">()</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_start_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;sudo -S tcpdump&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;A&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-A&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;b&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-b&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;B&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-B </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;B&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;c&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-c </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;c&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;C&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-C </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;C&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;d&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-d&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;dd&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-dd&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ddd&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-ddd&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;D&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-D&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;e&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-e&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;F&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-F </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;F&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;G&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-G&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;i&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-i </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;i&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;I&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-I&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;j&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-j </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;j&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;K&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-K&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;l&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-l&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;U&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-U&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;n&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-n&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;N&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-N&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;S&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-S&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;s&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-s </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;s&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;T&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-T </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;T&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;t&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-t&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;tt&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-tt&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ttt&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-ttt&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;tttt&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-tttt&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ttttt&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-ttttt&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;v&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-v&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;vv&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-vv&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;vvv&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-vvv&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;w&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-w </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;w&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;expression&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;expression&quot;</span><span class="p">))</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">command</span>
+
+<div class="viewcode-block" id="LinuxTcpdump.valid_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tcpdump.LinuxTcpdump.valid_connection">[docs]</a>    <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="c"># TODO: Validate!</span>
+        <span class="k">return</span> <span class="bp">True</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/traceroute.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/traceroute.html
new file mode 100644 (file)
index 0000000..21c71a3
--- /dev/null
@@ -0,0 +1,217 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.traceroute &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.traceroute</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span><span class="p">,</span> <span class="n">ResourceState</span> 
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.application</span> <span class="kn">import</span> <span class="n">LinuxApplication</span>
+<span class="kn">from</span> <span class="nn">nepi.util.timefuncs</span> <span class="kn">import</span> <span class="n">tnow</span>
+
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">socket</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="LinuxTraceroute"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.traceroute.LinuxTraceroute">[docs]</a><span class="k">class</span> <span class="nc">LinuxTraceroute</span><span class="p">(</span><span class="n">LinuxApplication</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;linux::Traceroute&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">countinuous</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;continuous&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Run traceroute in a while loop&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">print_timestamp</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;printTimestamp&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Print timestamp before running traceroute&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">use_ip</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;useIP&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Use the IP address instead of the host domain name. &quot;</span>
+            <span class="s">&quot;Useful for environments were dns resolution problems occur &quot;</span>
+            <span class="s">&quot;frequently&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">target</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;target&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Traceroute target host (host that will be pinged)&quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">early_start</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;earlyStart&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Start ping as early as deployment. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">countinuous</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">print_timestamp</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">use_ip</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">early_start</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxTraceroute</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;traceroute-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span>
+
+<div class="viewcode-block" id="LinuxTraceroute.upload_start_command"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.traceroute.LinuxTraceroute.upload_start_command">[docs]</a>    <span class="k">def</span> <span class="nf">upload_start_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxTraceroute</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">upload_start_command</span><span class="p">()</span>
+        
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;earlyStart&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_run_in_background</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="LinuxTraceroute.do_deploy"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.traceroute.LinuxTraceroute.do_deploy">[docs]</a>    <span class="k">def</span> <span class="nf">do_deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_start_command</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;depends&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;depends&quot;</span><span class="p">,</span> <span class="s">&quot;traceroute&quot;</span><span class="p">)</span>
+
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxTraceroute</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_deploy</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="LinuxTraceroute.do_start"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.traceroute.LinuxTraceroute.do_start">[docs]</a>    <span class="k">def</span> <span class="nf">do_start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;earlyStart&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+                <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Starting command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
+
+                <span class="bp">self</span><span class="o">.</span><span class="n">set_started</span><span class="p">()</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Failed to execute command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">command</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+        <span class="k">else</span><span class="p">:</span>
+           <span class="nb">super</span><span class="p">(</span><span class="n">LinuxTraceroute</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_start</span><span class="p">()</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_start_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;continuous&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;while true; do &quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;printTimestamp&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;&quot;&quot;echo &quot;`date +&#39;%Y%m</span><span class="si">%d</span><span class="s">%H%M%S&#39;`&quot;;&quot;&quot;&quot;</span><span class="p">)</span>
+        <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;traceroute&quot;</span><span class="p">)</span>
+
+        <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;target&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;useIP&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">target</span> <span class="o">=</span> <span class="n">socket</span><span class="o">.</span><span class="n">gethostbyname</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
+        <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
+        
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;continuous&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;; sleep 2 ; done &quot;</span><span class="p">)</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">command</span>
+
+<div class="viewcode-block" id="LinuxTraceroute.valid_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.traceroute.LinuxTraceroute.valid_connection">[docs]</a>    <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="c"># TODO: Validate!</span>
+        <span class="k">return</span> <span class="bp">True</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/tun.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/tun.html
new file mode 100644 (file)
index 0000000..f93671e
--- /dev/null
@@ -0,0 +1,127 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.tun &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.tun</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.tap</span> <span class="kn">import</span> <span class="n">LinuxTap</span>
+
+<span class="kn">import</span> <span class="nn">os</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="LinuxTun"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tun.LinuxTun">[docs]</a><span class="k">class</span> <span class="nc">LinuxTun</span><span class="p">(</span><span class="n">LinuxTap</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;linux::Tun&quot;</span>
+    <span class="n">_help</span> <span class="o">=</span> <span class="s">&quot;Creates a TUN device on a Linux host&quot;</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxTun</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_vif_prefix</span> <span class="o">=</span> <span class="s">&quot;tun&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_vif_type</span> <span class="o">=</span> <span class="s">&quot;IFF_TUN&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_vif_type_flag</span> <span class="o">=</span> <span class="n">LinuxTap</span><span class="o">.</span><span class="n">IFF_TUN</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">vif_prefix</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">)</span>
+    
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/tunnel.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/tunnel.html
new file mode 100644 (file)
index 0000000..6efeb74
--- /dev/null
@@ -0,0 +1,256 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.tunnel &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.tunnel</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span><span class="p">,</span> <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.application</span> <span class="kn">import</span> <span class="n">LinuxApplication</span>
+<span class="kn">from</span> <span class="nn">nepi.util.timefuncs</span> <span class="kn">import</span> <span class="n">tnow</span><span class="p">,</span> <span class="n">tdiffsec</span>
+
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">time</span>
+
+<span class="n">state_check_delay</span> <span class="o">=</span> <span class="mf">0.5</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="LinuxTunnel"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tunnel.LinuxTunnel">[docs]</a><span class="k">class</span> <span class="nc">LinuxTunnel</span><span class="p">(</span><span class="n">LinuxApplication</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;abstract::linux::Tunnel&quot;</span>
+    <span class="n">_help</span> <span class="o">=</span> <span class="s">&quot;Constructs a tunnel between two Linux endpoints&quot;</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxTunnel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;tunnel-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span>
+
+<div class="viewcode-block" id="LinuxTunnel.log_message"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tunnel.LinuxTunnel.log_message">[docs]</a>    <span class="k">def</span> <span class="nf">log_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s">&quot; guid </span><span class="si">%d</span><span class="s"> - tunnel </span><span class="si">%s</span><span class="s"> - </span><span class="si">%s</span><span class="s"> - </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">,</span> 
+                <span class="bp">self</span><span class="o">.</span><span class="n">endpoint1</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;hostname&quot;</span><span class="p">),</span> 
+                <span class="bp">self</span><span class="o">.</span><span class="n">endpoint2</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;hostname&quot;</span><span class="p">),</span> 
+                <span class="n">msg</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxTunnel.get_endpoints"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tunnel.LinuxTunnel.get_endpoints">[docs]</a>    <span class="k">def</span> <span class="nf">get_endpoints</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the list of RM that are endpoints to the tunnel </span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">raise</span> <span class="ne">NotImplementedError</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxTunnel.endpoint1"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tunnel.LinuxTunnel.endpoint1">[docs]</a>    <span class="k">def</span> <span class="nf">endpoint1</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">endpoints</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_endpoints</span><span class="p">()</span>
+        <span class="k">if</span> <span class="n">endpoints</span><span class="p">:</span> <span class="k">return</span> <span class="n">endpoints</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+        <span class="k">return</span> <span class="bp">None</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxTunnel.endpoint2"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tunnel.LinuxTunnel.endpoint2">[docs]</a>    <span class="k">def</span> <span class="nf">endpoint2</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">endpoints</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_endpoints</span><span class="p">()</span>
+        <span class="k">if</span> <span class="n">endpoints</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">endpoints</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span> <span class="k">return</span> <span class="n">endpoints</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
+        <span class="k">return</span> <span class="bp">None</span>
+</div>
+<div class="viewcode-block" id="LinuxTunnel.app_home"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tunnel.LinuxTunnel.app_home">[docs]</a>    <span class="k">def</span> <span class="nf">app_home</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">endpoint</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">exp_home</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_home</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxTunnel.run_home"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tunnel.LinuxTunnel.run_home">[docs]</a>    <span class="k">def</span> <span class="nf">run_home</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">(</span><span class="n">endpoint</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">run_id</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxTunnel.endpoint_mkdir"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tunnel.LinuxTunnel.endpoint_mkdir">[docs]</a>    <span class="k">def</span> <span class="nf">endpoint_mkdir</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">):</span>
+        <span class="n">endpoint</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">(</span><span class="n">endpoint</span><span class="p">))</span>
+</div>
+<div class="viewcode-block" id="LinuxTunnel.initiate_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tunnel.LinuxTunnel.initiate_connection">[docs]</a>    <span class="k">def</span> <span class="nf">initiate_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="p">):</span>
+        <span class="k">raise</span> <span class="ne">NotImplementedError</span>
+</div>
+<div class="viewcode-block" id="LinuxTunnel.establish_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tunnel.LinuxTunnel.establish_connection">[docs]</a>    <span class="k">def</span> <span class="nf">establish_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
+        <span class="k">raise</span> <span class="ne">NotImplementedError</span>
+</div>
+<div class="viewcode-block" id="LinuxTunnel.verify_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tunnel.LinuxTunnel.verify_connection">[docs]</a>    <span class="k">def</span> <span class="nf">verify_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="p">):</span>
+        <span class="k">raise</span> <span class="ne">NotImplementedError</span>
+</div>
+<div class="viewcode-block" id="LinuxTunnel.terminate_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tunnel.LinuxTunnel.terminate_connection">[docs]</a>    <span class="k">def</span> <span class="nf">terminate_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="p">):</span>
+        <span class="k">raise</span> <span class="ne">NotImplementedError</span>
+</div>
+<div class="viewcode-block" id="LinuxTunnel.check_state_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tunnel.LinuxTunnel.check_state_connection">[docs]</a>    <span class="k">def</span> <span class="nf">check_state_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="p">):</span>
+        <span class="k">raise</span> <span class="ne">NotImplementedError</span>
+</div>
+<div class="viewcode-block" id="LinuxTunnel.do_provision"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tunnel.LinuxTunnel.do_provision">[docs]</a>    <span class="k">def</span> <span class="nf">do_provision</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="c"># create run dir for tunnel on each node </span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">endpoint_mkdir</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">endpoint1</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">endpoint_mkdir</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">endpoint2</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;Initiate the connection&quot;</span><span class="p">)</span>
+        <span class="c"># Start 2 step connection</span>
+        <span class="c"># Initiate connection from endpoint 1 to endpoint 2</span>
+        <span class="n">data1</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">initiate_connection</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">endpoint1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">endpoint2</span><span class="p">)</span>
+
+        <span class="c"># Initiate connection from endpoint 2 to endpoint 1</span>
+        <span class="n">data2</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">initiate_connection</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">endpoint2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">endpoint1</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;Establish the connection&quot;</span><span class="p">)</span>
+        <span class="c"># Establish connection from endpoint 1 to endpoint 2</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">establish_connection</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">endpoint1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">endpoint2</span><span class="p">,</span> <span class="n">data2</span><span class="p">)</span>
+        
+        <span class="c"># Establish connection from endpoint 2 to endpoint 1</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">establish_connection</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">endpoint2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">endpoint1</span><span class="p">,</span> <span class="n">data1</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;Verify the connection&quot;</span><span class="p">)</span>
+        <span class="c"># check if connection was successful on both sides</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">verify_connection</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">endpoint1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">endpoint2</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">verify_connection</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">endpoint2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">endpoint1</span><span class="p">)</span>
+       
+        <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Provisioning finished&quot;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set_provisioned</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="LinuxTunnel.do_deploy"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tunnel.LinuxTunnel.do_deploy">[docs]</a>    <span class="k">def</span> <span class="nf">do_deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="p">(</span><span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">endpoint1</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">endpoint1</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">)</span> <span class="ow">or</span> \
+            <span class="p">(</span><span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">endpoint2</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">endpoint2</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">deploy</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_provision</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_ready</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="LinuxTunnel.do_start"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tunnel.LinuxTunnel.do_start">[docs]</a>    <span class="k">def</span> <span class="nf">do_start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+            <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Starting command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
+            
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_started</span><span class="p">()</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Failed to execute command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">command</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+</div>
+<div class="viewcode-block" id="LinuxTunnel.do_stop"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tunnel.LinuxTunnel.do_stop">[docs]</a>    <span class="k">def</span> <span class="nf">do_stop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Stops application execution</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Stopping tunnel&quot;</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">terminate_connection</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">endpoint1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">endpoint2</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">terminate_connection</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">endpoint2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">endpoint1</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_stopped</span><span class="p">()</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="LinuxTunnel.state"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tunnel.LinuxTunnel.state">[docs]</a>    <span class="k">def</span> <span class="nf">state</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the state of the application</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">:</span>
+            <span class="c"># In order to avoid overwhelming the remote host and</span>
+            <span class="c"># the local processor with too many ssh queries, the state is only</span>
+            <span class="c"># requested every &#39;state_check_delay&#39; seconds.</span>
+            <span class="k">if</span> <span class="n">tdiffsec</span><span class="p">(</span><span class="n">tnow</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_last_state_check</span><span class="p">)</span> <span class="o">&gt;</span> <span class="n">state_check_delay</span><span class="p">:</span>
+                
+                <span class="bp">self</span><span class="o">.</span><span class="n">check_state_connection</span><span class="p">()</span>
+
+                <span class="bp">self</span><span class="o">.</span><span class="n">_last_state_check</span> <span class="o">=</span> <span class="n">tnow</span><span class="p">()</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span>
+</div>
+<div class="viewcode-block" id="LinuxTunnel.valid_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.tunnel.LinuxTunnel.valid_connection">[docs]</a>    <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="c"># TODO: Validate!</span>
+        <span class="k">return</span> <span class="bp">True</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/udptest.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/udptest.html
new file mode 100644 (file)
index 0000000..a896201
--- /dev/null
@@ -0,0 +1,461 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.udptest &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.udptest</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span><span class="p">,</span> <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.application</span> <span class="kn">import</span> <span class="n">LinuxApplication</span>
+<span class="kn">from</span> <span class="nn">nepi.util.timefuncs</span> <span class="kn">import</span> <span class="n">tnow</span>
+
+<span class="kn">import</span> <span class="nn">os</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="LinuxUdpTest"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.udptest.LinuxUdpTest">[docs]</a><span class="k">class</span> <span class="nc">LinuxUdpTest</span><span class="p">(</span><span class="n">LinuxApplication</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot; Uses the hpcbench udptest tool to gather UDP measurements.</span>
+<span class="sd">    Measurements require two ends, a server and a client RM.</span>
+
+<span class="sd">    http://hpcbench.sourceforge.net/</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;linux::UdpTest&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">s</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;s&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Runs in server mode. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">p</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;p&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Port to listen to in server mode, or to connect to in client mode. &quot;</span>
+            <span class="s">&quot;Defaults to 5678. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">a</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;a&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Client option. Perform UDP Round Trip Time (latency) &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">A</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;A&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Client option. &quot;</span>
+            <span class="s">&quot;Message size for UDP RTT test. &quot;</span>
+            <span class="s">&quot;UDP RTT (latency) test with specified message size.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">b</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;b&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Client option. &quot;</span>
+            <span class="s">&quot;Client UDP buffer size in bytes. Using system default &quot;</span>
+            <span class="s">&quot;value if not defined.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">B</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;B&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Client option. &quot;</span>
+            <span class="s">&quot;Server UDP buffer size in bytes. The same as cleint&#39;s by default.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">c</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;c&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Client option. &quot;</span>
+            <span class="s">&quot;CPU log option. Tracing system info during the test. &quot;</span>
+            <span class="s">&quot;Only available when output is defined. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">d</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;d&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Client option. &quot;</span>
+            <span class="s">&quot;Data size of each read/write in bytes. The same as packet size &quot;</span>
+            <span class="s">&quot;by default.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">e</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;e&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Client option. &quot;</span>
+            <span class="s">&quot;Exponential test (data size of each sending increasing from 1 &quot;</span>
+            <span class="s">&quot;byte to packet size). &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">g</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;g&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Client option. &quot;</span>
+            <span class="s">&quot;UDP traffic generator (Keep sending data to a host). &quot;</span>
+            <span class="s">&quot;Work without server&#39;s support.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">target</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;target&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Client option. &quot;</span>
+            <span class="s">&quot;Hostname or IP address of UDP server. Must be specified.&quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">i</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;i&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Client option. &quot;</span>
+            <span class="s">&quot;Bidirectional UDP throuhgput test. Default is unidirection &quot;</span>
+            <span class="s">&quot;stream test. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">l</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;l&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Client option. &quot;</span>
+            <span class="s">&quot;UDP datagram (packet) size in bytes ( &lt; udp-buffer-szie ). &quot;</span>
+            <span class="s">&quot;1460 by default.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">m</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;m&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Client option. &quot;</span>
+            <span class="s">&quot;Total message size in bytes. 1048576 by default.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">o</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;o&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Client option. &quot;</span>
+            <span class="s">&quot;Output file name. &quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">P</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;P&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Client option. &quot;</span>
+            <span class="s">&quot;Write the plot file for gnuplot. Only enable when the output &quot;</span>
+            <span class="s">&quot;is specified. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">q</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;q&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Client option. &quot;</span>
+            <span class="s">&quot;Define the TOS field of IP packets. &quot;</span>
+            <span class="s">&quot;Six values can be used for this setting:</span><span class="se">\n</span><span class="s">&quot;</span>
+            <span class="s">&quot; 1:(IPTOS)-Minimize delay</span><span class="se">\n</span><span class="s">&quot;</span>
+            <span class="s">&quot; 2:(IPTOS)-Maximize throughput</span><span class="se">\n</span><span class="s">&quot;</span>
+            <span class="s">&quot; 3:(DiffServ)-Class1 with low drop probability</span><span class="se">\n</span><span class="s">&quot;</span>
+            <span class="s">&quot; 4:(DiffServ)-class1 with high drop probability</span><span class="se">\n</span><span class="s">&quot;</span>
+            <span class="s">&quot; 5:(DiffServ)-Class4 with low drop probabiltiy</span><span class="se">\n</span><span class="s">&quot;</span>
+            <span class="s">&quot; 6:(DiffServ)-Class4 with high drop probabiltiy</span><span class="se">\n</span><span class="s">&quot;</span>
+            <span class="s">&quot;Write the plot file for gnuplot. Only enable when the output &quot;</span>
+            <span class="s">&quot;is specified. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Enumerate</span><span class="p">,</span>
+            <span class="n">allowed</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;1&quot;</span><span class="p">,</span> <span class="s">&quot;2&quot;</span><span class="p">,</span> <span class="s">&quot;3&quot;</span><span class="p">,</span> <span class="s">&quot;4&quot;</span><span class="p">,</span> <span class="s">&quot;5&quot;</span><span class="p">,</span> <span class="s">&quot;6&quot;</span><span class="p">],</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">r</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;r&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Client option. &quot;</span>
+            <span class="s">&quot;Repetition of tests. 10 by default. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">t</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;t&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Client option. &quot;</span>
+            <span class="s">&quot;Test time constraint in seconds. 5 by default. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">T</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;T&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Client option. &quot;</span>
+            <span class="s">&quot;Throughput constraint for UDP generator or throughput &quot;</span>
+            <span class="s">&quot;test. Unlimited by default. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">continuous</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;continuous&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Run nping in a while loop&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">print_timestamp</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;printTimestamp&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Print timestamp before running nping&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">A</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">B</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">d</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">g</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">g</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">l</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">m</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">o</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">P</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">q</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">r</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">T</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">continuous</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">print_timestamp</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxUdpTest</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;udptest-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span>
+
+<div class="viewcode-block" id="LinuxUdpTest.do_deploy"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.udptest.LinuxUdpTest.do_deploy">[docs]</a>    <span class="k">def</span> <span class="nf">do_deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_start_command</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;sources&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;sources&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_sources</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;install&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;install&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_install</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;build&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;build&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_build</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_environment</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;depends&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;depends&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_depends</span><span class="p">)</span>
+
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxUdpTest</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_deploy</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="LinuxUdpTest.upload_start_command"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.udptest.LinuxUdpTest.upload_start_command">[docs]</a>    <span class="k">def</span> <span class="nf">upload_start_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxUdpTest</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">upload_start_command</span><span class="p">()</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;s&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="c"># We want to make sure the server is running</span>
+            <span class="c"># before the client starts.</span>
+            <span class="c"># Run the command as a bash script in background,</span>
+            <span class="c"># in the host ( but wait until the command has</span>
+            <span class="c"># finished to continue )</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_run_in_background</span><span class="p">()</span>
+    </div>
+<div class="viewcode-block" id="LinuxUdpTest.do_start"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.udptest.LinuxUdpTest.do_start">[docs]</a>    <span class="k">def</span> <span class="nf">do_start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;s&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="c"># Server is already running</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+                <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Starting command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
+
+                <span class="bp">self</span><span class="o">.</span><span class="n">set_started</span><span class="p">()</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Failed to execute command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">command</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">err</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="nb">super</span><span class="p">(</span><span class="n">LinuxUdpTest</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_start</span><span class="p">()</span>
+ </div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_start_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;continuous&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;while true; do &quot;</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;printTimestamp&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;&quot;&quot;echo &quot;`date +&#39;%Y%m</span><span class="si">%d</span><span class="s">%H%M%S&#39;`&quot;;&quot;&quot;&quot;</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;s&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;udpserver&quot;</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;udptest&quot;</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;p&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-p </span><span class="si">%d</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;p&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;a&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-a&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;A&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-A </span><span class="si">%d</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;A&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;b&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-b </span><span class="si">%d</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;b&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;B&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-B </span><span class="si">%d</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;B&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;c&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-c&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;d&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-d </span><span class="si">%d</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;d&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;e&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-e&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;g&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-g&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;target&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-h </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;target&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;i&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-i&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;l&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-l </span><span class="si">%d</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;l&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;m&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-m </span><span class="si">%d</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;m&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;o&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-o </span><span class="si">%d</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;o&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;P&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-P </span><span class="si">%d</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;P&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;q&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-q </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;q&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;r&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-r </span><span class="si">%d</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;r&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;t&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-t </span><span class="si">%d</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;t&quot;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;T&quot;</span><span class="p">):</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-T </span><span class="si">%d</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;T&quot;</span><span class="p">))</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;continuous&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;; done &quot;</span><span class="p">)</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">command</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_sources</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s">&quot;http://hpcbench.sourceforge.net/udp.tar.gz&quot;</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_depends</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s">&quot;gcc make&quot;</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_build</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">sources</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;sources&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot; &quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+        <span class="n">sources</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">sources</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="p">(</span>
+            <span class="c"># Evaluate if ccnx binaries are already installed</span>
+            <span class="s">&quot; ( &quot;</span>
+                <span class="s">&quot; test -f ${BIN}/udptest &amp;&amp; &quot;</span>
+                <span class="s">&quot; echo &#39;binaries found, nothing to do&#39; &quot;</span>
+            <span class="s">&quot; ) || ( &quot;</span>
+            <span class="c"># If not, untar and build</span>
+                <span class="s">&quot; ( &quot;</span>
+                    <span class="s">&quot; mkdir -p ${SRC}/udptest &amp;&amp; &quot;</span>
+                    <span class="s">&quot; tar xf ${SRC}/</span><span class="si">%(sources)s</span><span class="s"> --strip-components=1 -C ${SRC}/udptest &quot;</span>
+                 <span class="s">&quot; ) &amp;&amp; &quot;</span>
+                    <span class="s">&quot;cd ${SRC}/udptest &amp;&amp; &quot;</span>
+                    <span class="c"># Just execute and silence warnings...</span>
+                    <span class="s">&quot; ( make ) &quot;</span>
+             <span class="s">&quot; )&quot;</span><span class="p">)</span> <span class="o">%</span> <span class="p">({</span> <span class="s">&#39;sources&#39;</span><span class="p">:</span> <span class="n">sources</span><span class="p">,</span>
+                 <span class="p">})</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_install</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="p">(</span>
+            <span class="c"># Evaluate if ccnx binaries are already installed</span>
+            <span class="s">&quot; ( &quot;</span>
+                <span class="s">&quot; test -f ${BIN}/udptest &amp;&amp; &quot;</span>
+                <span class="s">&quot; echo &#39;binaries found, nothing to do&#39; &quot;</span>
+            <span class="s">&quot; ) || ( &quot;</span>
+            <span class="c"># If not, install</span>
+                <span class="s">&quot;  mv ${SRC}/udptest ${BIN} &quot;</span>
+            <span class="s">&quot; )&quot;</span><span class="p">)</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_environment</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s">&quot;PATH=$PATH:${BIN}/udptest&quot;</span>
+
+<div class="viewcode-block" id="LinuxUdpTest.valid_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.udptest.LinuxUdpTest.valid_connection">[docs]</a>    <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="c"># TODO: Validate!</span>
+        <span class="k">return</span> <span class="bp">True</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/linux/udptunnel.html b/doc/sphinx/_build/html/_modules/nepi/resources/linux/udptunnel.html
new file mode 100644 (file)
index 0000000..38d2835
--- /dev/null
@@ -0,0 +1,245 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.linux.udptunnel &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.linux.udptunnel</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span><span class="p">,</span> <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.tunnel</span> <span class="kn">import</span> <span class="n">LinuxTunnel</span>
+<span class="kn">from</span> <span class="nn">nepi.util.sshfuncs</span> <span class="kn">import</span> <span class="n">ProcStatus</span>
+<span class="kn">from</span> <span class="nn">nepi.util.timefuncs</span> <span class="kn">import</span> <span class="n">tnow</span><span class="p">,</span> <span class="n">tdiffsec</span>
+
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">socket</span>
+<span class="kn">import</span> <span class="nn">time</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="LinuxUdpTunnel"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.udptunnel.LinuxUdpTunnel">[docs]</a><span class="k">class</span> <span class="nc">LinuxUdpTunnel</span><span class="p">(</span><span class="n">LinuxTunnel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;linux::UdpTunnel&quot;</span>
+    <span class="n">_help</span> <span class="o">=</span> <span class="s">&quot;Constructs a tunnel between two Linux endpoints using a UDP connection &quot;</span>
+    <span class="n">_platform</span> <span class="o">=</span> <span class="s">&quot;linux&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">cipher</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;cipher&quot;</span><span class="p">,</span>
+               <span class="s">&quot;Cipher to encript communication. &quot;</span>
+                <span class="s">&quot;One of PLAIN, AES, Blowfish, DES, DES3. &quot;</span><span class="p">,</span>
+                <span class="n">default</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+                <span class="n">allowed</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;PLAIN&quot;</span><span class="p">,</span> <span class="s">&quot;AES&quot;</span><span class="p">,</span> <span class="s">&quot;Blowfish&quot;</span><span class="p">,</span> <span class="s">&quot;DES&quot;</span><span class="p">,</span> <span class="s">&quot;DES3&quot;</span><span class="p">],</span>
+                <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Enumerate</span><span class="p">,</span> 
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cipher_key</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;cipherKey&quot;</span><span class="p">,</span>
+                <span class="s">&quot;Specify a symmetric encryption key with which to protect &quot;</span>
+                <span class="s">&quot;packets across the tunnel. python-crypto must be installed &quot;</span>
+                <span class="s">&quot;on the system.&quot;</span> <span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">txqueuelen</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;txQueueLen&quot;</span><span class="p">,</span>
+                <span class="s">&quot;Specifies the interface&#39;s transmission queue length. &quot;</span>
+                <span class="s">&quot;Defaults to 1000. &quot;</span><span class="p">,</span> 
+                <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span> 
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">bwlimit</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;bwLimit&quot;</span><span class="p">,</span>
+                <span class="s">&quot;Specifies the interface&#39;s emulated bandwidth in bytes &quot;</span>
+                <span class="s">&quot;per second.&quot;</span><span class="p">,</span>
+                <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span> 
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">cipher</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">cipher_key</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">txqueuelen</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">bwlimit</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">LinuxUdpTunnel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;udp-tunnel-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_pids</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
+
+<div class="viewcode-block" id="LinuxUdpTunnel.log_message"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.udptunnel.LinuxUdpTunnel.log_message">[docs]</a>    <span class="k">def</span> <span class="nf">log_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s">&quot; guid </span><span class="si">%d</span><span class="s"> - udptunnel </span><span class="si">%s</span><span class="s"> - </span><span class="si">%s</span><span class="s"> - </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">,</span> 
+                <span class="bp">self</span><span class="o">.</span><span class="n">endpoint1</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;hostname&quot;</span><span class="p">),</span> 
+                <span class="bp">self</span><span class="o">.</span><span class="n">endpoint2</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;hostname&quot;</span><span class="p">),</span> 
+                <span class="n">msg</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxUdpTunnel.get_endpoints"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.udptunnel.LinuxUdpTunnel.get_endpoints">[docs]</a>    <span class="k">def</span> <span class="nf">get_endpoints</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the list of RM that are endpoints to the tunnel </span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">connected</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="k">for</span> <span class="n">guid</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">connections</span><span class="p">:</span>
+            <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+            <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">rm</span><span class="p">,</span> <span class="s">&quot;initiate_udp_connection&quot;</span><span class="p">):</span>
+                <span class="n">connected</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">rm</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">connected</span>
+</div>
+<div class="viewcode-block" id="LinuxUdpTunnel.initiate_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.udptunnel.LinuxUdpTunnel.initiate_connection">[docs]</a>    <span class="k">def</span> <span class="nf">initiate_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="p">):</span>
+        <span class="n">cipher</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;cipher&quot;</span><span class="p">)</span>
+        <span class="n">cipher_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;cipherKey&quot;</span><span class="p">)</span>
+        <span class="n">bwlimit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;bwLimit&quot;</span><span class="p">)</span>
+        <span class="n">txqueuelen</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;txQueueLen&quot;</span><span class="p">)</span>
+        <span class="n">connection_app_home</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">(</span><span class="n">endpoint</span><span class="p">)</span>
+        <span class="n">connection_run_home</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">(</span><span class="n">endpoint</span><span class="p">)</span>
+
+        <span class="n">port</span> <span class="o">=</span> <span class="n">endpoint</span><span class="o">.</span><span class="n">initiate_udp_connection</span><span class="p">(</span>
+                <span class="n">remote_endpoint</span><span class="p">,</span> 
+                <span class="n">connection_app_home</span><span class="p">,</span>
+                <span class="n">connection_run_home</span><span class="p">,</span> 
+                <span class="n">cipher</span><span class="p">,</span> <span class="n">cipher_key</span><span class="p">,</span> <span class="n">bwlimit</span><span class="p">,</span> <span class="n">txqueuelen</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">port</span>
+</div>
+<div class="viewcode-block" id="LinuxUdpTunnel.establish_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.udptunnel.LinuxUdpTunnel.establish_connection">[docs]</a>    <span class="k">def</span> <span class="nf">establish_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="p">,</span> <span class="n">port</span><span class="p">):</span>
+        <span class="n">connection_app_home</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">(</span><span class="n">endpoint</span><span class="p">)</span>
+        <span class="n">connection_run_home</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">(</span><span class="n">endpoint</span><span class="p">)</span>
+
+        <span class="n">endpoint</span><span class="o">.</span><span class="n">establish_udp_connection</span><span class="p">(</span><span class="n">remote_endpoint</span><span class="p">,</span>
+                <span class="n">connection_app_home</span><span class="p">,</span>
+                <span class="n">connection_run_home</span><span class="p">,</span> 
+                <span class="n">port</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxUdpTunnel.verify_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.udptunnel.LinuxUdpTunnel.verify_connection">[docs]</a>    <span class="k">def</span> <span class="nf">verify_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="p">):</span>
+        <span class="n">connection_app_home</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">(</span><span class="n">endpoint</span><span class="p">)</span>
+        <span class="n">connection_run_home</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">(</span><span class="n">endpoint</span><span class="p">)</span>
+
+        <span class="n">endpoint</span><span class="o">.</span><span class="n">verify_connection</span><span class="p">(</span><span class="n">remote_endpoint</span><span class="p">,</span>
+                <span class="n">connection_app_home</span><span class="p">,</span> 
+                <span class="n">connection_run_home</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxUdpTunnel.terminate_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.udptunnel.LinuxUdpTunnel.terminate_connection">[docs]</a>    <span class="k">def</span> <span class="nf">terminate_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="p">):</span>
+        <span class="n">connection_app_home</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">(</span><span class="n">endpoint</span><span class="p">)</span>
+        <span class="n">connection_run_home</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">(</span><span class="n">endpoint</span><span class="p">)</span>
+
+        <span class="n">endpoint</span><span class="o">.</span><span class="n">terminate_connection</span><span class="p">(</span><span class="n">remote_endpoint</span><span class="p">,</span>
+                <span class="n">connection_app_home</span><span class="p">,</span> 
+                <span class="n">connection_run_home</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="LinuxUdpTunnel.check_state_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.linux.html#nepi.resources.linux.udptunnel.LinuxUdpTunnel.check_state_connection">[docs]</a>    <span class="k">def</span> <span class="nf">check_state_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="c"># Make sure the process is still running in background</span>
+        <span class="c"># No execution errors occurred. Make sure the background</span>
+        <span class="c"># process with the recorded pid is still running.</span>
+
+        <span class="n">status1</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">endpoint1</span><span class="o">.</span><span class="n">check_status</span><span class="p">()</span>
+        <span class="n">status2</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">endpoint2</span><span class="o">.</span><span class="n">check_status</span><span class="p">()</span>
+
+        <span class="k">if</span> <span class="n">status1</span> <span class="o">==</span> <span class="n">ProcStatus</span><span class="o">.</span><span class="n">FINISHED</span> <span class="ow">and</span> \
+                <span class="n">status2</span> <span class="o">==</span> <span class="n">ProcStatus</span><span class="o">.</span><span class="n">FINISHED</span><span class="p">:</span>
+
+            <span class="c"># check if execution errors occurred</span>
+            <span class="p">(</span><span class="n">out1</span><span class="p">,</span> <span class="n">err1</span><span class="p">),</span> <span class="n">proc1</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">endpoint1</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">check_errors</span><span class="p">(</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">endpoint1</span><span class="p">))</span>
+
+            <span class="p">(</span><span class="n">out2</span><span class="p">,</span> <span class="n">err2</span><span class="p">),</span> <span class="n">proc2</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">endpoint2</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">check_errors</span><span class="p">(</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">endpoint2</span><span class="p">))</span>
+
+            <span class="k">if</span> <span class="n">err1</span> <span class="ow">or</span> <span class="n">err2</span><span class="p">:</span> 
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Error occurred in tunnel&quot;</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">err1</span><span class="p">,</span> <span class="n">err2</span><span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">fail</span><span class="p">()</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set_stopped</span><span class="p">()</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/netns/netnsapplication.html b/doc/sphinx/_build/html/_modules/nepi/resources/netns/netnsapplication.html
new file mode 100644 (file)
index 0000000..40d168e
--- /dev/null
@@ -0,0 +1,190 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.netns.netnsapplication &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.netns.netnsapplication</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.netns.netnsbase</span> <span class="kn">import</span> <span class="n">NetNSBase</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span><span class="p">,</span> <span class="n">ResourceState</span>
+
+<span class="kn">import</span> <span class="nn">shlex</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NetNSApplication"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsapplication.NetNSApplication">[docs]</a><span class="k">class</span> <span class="nc">NetNSApplication</span><span class="p">(</span><span class="n">NetNSBase</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;netns::Application&quot;</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NetNSApplication</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_traces</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">,</span> <span class="s">&quot;Command to execute&quot;</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NetNSApplication.emulation"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsapplication.NetNSApplication.emulation">[docs]</a>    <span class="k">def</span> <span class="nf">emulation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">emulation</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NetNSApplication.node"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsapplication.NetNSApplication.node">[docs]</a>    <span class="k">def</span> <span class="nf">node</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="kn">from</span> <span class="nn">nepi.resources.netns.netnsnode</span> <span class="kn">import</span> <span class="n">NetNSNode</span>
+        <span class="n">node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">NetNSNode</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">node</span><span class="p">:</span> 
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Route not connected to Node!!&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">return</span> <span class="n">node</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_rms_to_wait</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="p">]</span>
+
+<div class="viewcode-block" id="NetNSApplication.do_start"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsapplication.NetNSApplication.do_start">[docs]</a>    <span class="k">def</span> <span class="nf">do_start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">emulation</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;---- RESCHEDULING START ----&quot;</span> <span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">start</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_configure_traces</span><span class="p">()</span>
+
+            <span class="n">command</span> <span class="o">=</span> <span class="n">shlex</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">))</span>
+            <span class="n">stdout</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_traces</span><span class="p">[</span><span class="s">&quot;stdout&quot;</span><span class="p">]</span>
+            <span class="n">stderr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_traces</span><span class="p">[</span><span class="s">&quot;stderr&quot;</span><span class="p">]</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_uuid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">emulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> 
+                    <span class="s">&quot;Popen&quot;</span><span class="p">,</span> <span class="n">command</span><span class="p">,</span> <span class="n">stdout</span> <span class="o">=</span> <span class="n">stdout</span><span class="p">,</span> 
+                    <span class="n">stderr</span> <span class="o">=</span> <span class="n">stderr</span><span class="p">)</span>
+
+            <span class="nb">super</span><span class="p">(</span><span class="n">NetNSApplication</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_start</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_start_time</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">emulation</span><span class="o">.</span><span class="n">start_time</span>
+</div>
+    <span class="k">def</span> <span class="nf">_configure_traces</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">stdout</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">/</span><span class="si">%d</span><span class="s">.stdout&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">emulation</span><span class="o">.</span><span class="n">run_home</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">)</span>
+        <span class="n">stderr</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">/</span><span class="si">%d</span><span class="s">.stderr&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">emulation</span><span class="o">.</span><span class="n">run_home</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_trace_filename</span><span class="p">[</span><span class="s">&quot;stdout&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">stdout</span> 
+        <span class="bp">self</span><span class="o">.</span><span class="n">_trace_filename</span><span class="p">[</span><span class="s">&quot;stderr&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">stderr</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_traces</span><span class="p">[</span><span class="s">&quot;stdout&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">emulation</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="s">&quot;open&quot;</span><span class="p">,</span> <span class="n">stdout</span><span class="p">,</span> <span class="s">&quot;w&quot;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_traces</span><span class="p">[</span><span class="s">&quot;stderr&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">emulation</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="s">&quot;open&quot;</span><span class="p">,</span> <span class="n">stderr</span><span class="p">,</span> <span class="s">&quot;w&quot;</span><span class="p">)</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NetNSApplication.state"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsapplication.NetNSApplication.state">[docs]</a>    <span class="k">def</span> <span class="nf">state</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">:</span>
+            <span class="n">retcode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">emulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;poll&quot;</span><span class="p">)</span>
+   
+            <span class="k">if</span> <span class="n">retcode</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
+                <span class="k">if</span> <span class="n">retcode</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">set_stopped</span><span class="p">()</span>
+                <span class="k">else</span><span class="p">:</span>
+                    <span class="n">out</span> <span class="o">=</span> <span class="s">&quot;&quot;</span>
+                    <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Failed to execute command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span>
+                    <span class="n">err</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">trace</span><span class="p">(</span><span class="s">&quot;stderr&quot;</span><span class="p">)</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">do_fail</span><span class="p">()</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/netns/netnsbase.html b/doc/sphinx/_build/html/_modules/nepi/resources/netns/netnsbase.html
new file mode 100644 (file)
index 0000000..575244d
--- /dev/null
@@ -0,0 +1,230 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.netns.netnsbase &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.netns.netnsbase</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Flags</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">TraceAttr</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NetNSBase"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsbase.NetNSBase">[docs]</a><span class="k">class</span> <span class="nc">NetNSBase</span><span class="p">(</span><span class="n">ResourceManager</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;abstract::netns::Object&quot;</span>
+    <span class="n">_platform</span> <span class="o">=</span> <span class="s">&quot;netns&quot;</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NetNSBase</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_uuid</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_connected</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_trace_filename</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NetNSBase.connected"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsbase.NetNSBase.connected">[docs]</a>    <span class="k">def</span> <span class="nf">connected</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_connected</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NetNSBase.uuid"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsbase.NetNSBase.uuid">[docs]</a>    <span class="k">def</span> <span class="nf">uuid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_uuid</span>
+</div>
+<div class="viewcode-block" id="NetNSBase.trace"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsbase.NetNSBase.trace">[docs]</a>    <span class="k">def</span> <span class="nf">trace</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">attr</span> <span class="o">=</span> <span class="n">TraceAttr</span><span class="o">.</span><span class="n">ALL</span><span class="p">,</span> <span class="n">block</span> <span class="o">=</span> <span class="mi">512</span><span class="p">,</span> <span class="n">offset</span> <span class="o">=</span> <span class="mi">0</span><span class="p">):</span>
+        <span class="n">filename</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_trace_filename</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">filename</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s">&quot;Can not resolve trace </span><span class="si">%s</span><span class="s">. Did you enabled it?&quot;</span> <span class="o">%</span> <span class="n">name</span><span class="p">)</span>
+            <span class="k">return</span> <span class="s">&quot;&quot;</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">emulation</span><span class="o">.</span><span class="n">trace</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="n">block</span><span class="p">,</span> <span class="n">offset</span><span class="p">)</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_rms_to_wait</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the collection of RMs that this RM needs to</span>
+<span class="sd">        wait for before start</span>
+
+<span class="sd">        This method should be overriden to wait for other</span>
+<span class="sd">        objects to be deployed before proceeding with the deployment</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="s">&quot;No dependencies defined!&quot;</span>
+
+    <span class="k">def</span> <span class="nf">_instantiate_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">_wait_rms</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">rms</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+        <span class="k">for</span> <span class="n">rm</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_rms_to_wait</span><span class="p">:</span>
+            <span class="k">if</span> <span class="n">rm</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
+                <span class="n">rms</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">rm</span><span class="p">)</span>
+
+        <span class="sd">&quot;&quot;&quot; Returns True if dependent RMs are not yer READY, False otherwise&quot;&quot;&quot;</span>
+        <span class="k">for</span> <span class="n">rm</span> <span class="ow">in</span> <span class="n">rms</span><span class="p">:</span>
+            <span class="k">if</span> <span class="n">rm</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+                <span class="k">return</span> <span class="bp">True</span>
+        <span class="k">return</span> <span class="bp">False</span>
+
+<div class="viewcode-block" id="NetNSBase.do_provision"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsbase.NetNSBase.do_provision">[docs]</a>    <span class="k">def</span> <span class="nf">do_provision</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_instantiate_object</span><span class="p">()</span>
+      
+        <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Provisioning finished&quot;</span><span class="p">)</span>
+
+        <span class="nb">super</span><span class="p">(</span><span class="n">NetNSBase</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_provision</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="NetNSBase.do_deploy"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsbase.NetNSBase.do_deploy">[docs]</a>    <span class="k">def</span> <span class="nf">do_deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_wait_rms</span><span class="p">():</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;---- RESCHEDULING DEPLOY ----&quot;</span> <span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">deploy</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_provision</span><span class="p">()</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_ready</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="NetNSBase.do_start"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsbase.NetNSBase.do_start">[docs]</a>    <span class="k">def</span> <span class="nf">do_start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+            <span class="c"># No need to do anything, emulation.Run() will start every object</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Starting&quot;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_started</span><span class="p">()</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Failed &quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+</div>
+<div class="viewcode-block" id="NetNSBase.do_stop"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsbase.NetNSBase.do_stop">[docs]</a>    <span class="k">def</span> <span class="nf">do_stop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">:</span>
+            <span class="c"># No need to do anything, emulation.Destroy() will stop every object</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_stopped</span><span class="p">()</span>
+    </div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NetNSBase.state"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsbase.NetNSBase.state">[docs]</a>    <span class="k">def</span> <span class="nf">state</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span>
+</div>
+<div class="viewcode-block" id="NetNSBase.get"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsbase.NetNSBase.get">[docs]</a>    <span class="k">def</span> <span class="nf">get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
+        <span class="c">#flags = Flags.NoWrite | Flags.NoRead | Flags.Design</span>
+        <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="ow">in</span> <span class="p">[</span><span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">,</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">]</span> \
+                <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">has_flag</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">flags</span><span class="p">):</span>
+            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">emulation</span><span class="o">.</span><span class="n">emu_get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
+        
+        <span class="n">value</span> <span class="o">=</span> <span class="nb">super</span><span class="p">(</span><span class="n">NetNSBase</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">value</span>
+</div>
+<div class="viewcode-block" id="NetNSBase.set"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsbase.NetNSBase.set">[docs]</a>    <span class="k">def</span> <span class="nf">set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
+        <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span>
+        <span class="k">if</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">&gt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">NEW</span> <span class="ow">and</span> \
+                <span class="bp">self</span><span class="o">.</span><span class="n">has_flag</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">))</span> <span class="ow">or</span> \
+                <span class="bp">self</span><span class="o">.</span><span class="n">has_flag</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">Flags</span><span class="o">.</span><span class="n">NoWrite</span><span class="p">):</span>
+            <span class="n">out</span> <span class="o">=</span> <span class="n">err</span> <span class="o">=</span> <span class="s">&quot;&quot;</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Cannot change Design only attribue </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">name</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+            <span class="k">return</span> 
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="ow">in</span> <span class="p">[</span><span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">,</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">]:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">emulation</span><span class="o">.</span><span class="n">emu_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
+        
+        <span class="n">value</span> <span class="o">=</span> <span class="nb">super</span><span class="p">(</span><span class="n">NetNSBase</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">value</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/netns/netnsclient.html b/doc/sphinx/_build/html/_modules/nepi/resources/netns/netnsclient.html
new file mode 100644 (file)
index 0000000..42ff64a
--- /dev/null
@@ -0,0 +1,132 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.netns.netnsclient &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.netns.netnsclient</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<div class="viewcode-block" id="NetNSClient"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsclient.NetNSClient">[docs]</a><span class="k">class</span> <span class="nc">NetNSClient</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot; Common Interface for NS3 client classes &quot;&quot;&quot;</span>
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NetNSClient</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+
+<div class="viewcode-block" id="NetNSClient.create"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsclient.NetNSClient.create">[docs]</a>    <span class="k">def</span> <span class="nf">create</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">pass</span>
+</div>
+<div class="viewcode-block" id="NetNSClient.invoke"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsclient.NetNSClient.invoke">[docs]</a>    <span class="k">def</span> <span class="nf">invoke</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">pass</span>
+</div>
+<div class="viewcode-block" id="NetNSClient.set"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsclient.NetNSClient.set">[docs]</a>    <span class="k">def</span> <span class="nf">set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">pass</span>
+</div>
+<div class="viewcode-block" id="NetNSClient.get"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsclient.NetNSClient.get">[docs]</a>    <span class="k">def</span> <span class="nf">get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">pass</span>
+</div>
+<div class="viewcode-block" id="NetNSClient.flush"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsclient.NetNSClient.flush">[docs]</a>    <span class="k">def</span> <span class="nf">flush</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">pass</span>
+</div>
+<div class="viewcode-block" id="NetNSClient.shutdown"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsclient.NetNSClient.shutdown">[docs]</a>    <span class="k">def</span> <span class="nf">shutdown</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">pass</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/netns/netnsemulation.html b/doc/sphinx/_build/html/_modules/nepi/resources/netns/netnsemulation.html
new file mode 100644 (file)
index 0000000..6905f11
--- /dev/null
@@ -0,0 +1,132 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.netns.netnsemulation &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.netns.netnsemulation</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<div class="viewcode-block" id="NetNSEmulation"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsemulation.NetNSEmulation">[docs]</a><span class="k">class</span> <span class="nc">NetNSEmulation</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NetNSEmulation.client"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsemulation.NetNSEmulation.client">[docs]</a>    <span class="k">def</span> <span class="nf">client</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span>
+</div>
+<div class="viewcode-block" id="NetNSEmulation.create"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsemulation.NetNSEmulation.create">[docs]</a>    <span class="k">def</span> <span class="nf">create</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NetNSEmulation.invoke"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsemulation.NetNSEmulation.invoke">[docs]</a>    <span class="k">def</span> <span class="nf">invoke</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NetNSEmulation.emu_set"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsemulation.NetNSEmulation.emu_set">[docs]</a>    <span class="k">def</span> <span class="nf">emu_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NetNSEmulation.emu_get"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsemulation.NetNSEmulation.emu_get">[docs]</a>    <span class="k">def</span> <span class="nf">emu_get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NetNSEmulation.flush"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsemulation.NetNSEmulation.flush">[docs]</a>    <span class="k">def</span> <span class="nf">flush</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">flush</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NetNSEmulation.shutdown"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsemulation.NetNSEmulation.shutdown">[docs]</a>    <span class="k">def</span> <span class="nf">shutdown</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">shutdown</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/netns/netnsinterface.html b/doc/sphinx/_build/html/_modules/nepi/resources/netns/netnsinterface.html
new file mode 100644 (file)
index 0000000..5d06bce
--- /dev/null
@@ -0,0 +1,117 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.netns.netnsinterface &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.netns.netnsinterface</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.netns.netnsbase</span> <span class="kn">import</span> <span class="n">NetNSBase</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NetNSInterface"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsinterface.NetNSInterface">[docs]</a><span class="k">class</span> <span class="nc">NetNSInterface</span><span class="p">(</span><span class="n">NetNSBase</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;asbtract::netns::NodeInterface&quot;</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/netns/netnsipv4address.html b/doc/sphinx/_build/html/_modules/nepi/resources/netns/netnsipv4address.html
new file mode 100644 (file)
index 0000000..cf672df
--- /dev/null
@@ -0,0 +1,153 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.netns.netnsipv4address &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.netns.netnsipv4address</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.netns.netnsbase</span> <span class="kn">import</span> <span class="n">NetNSBase</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NetNSIPv4Address"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsipv4address.NetNSIPv4Address">[docs]</a><span class="k">class</span> <span class="nc">NetNSIPv4Address</span><span class="p">(</span><span class="n">NetNSBase</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;netns::IPv4Address&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">ip</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ip&quot;</span><span class="p">,</span> <span class="s">&quot;IPv4 address&quot;</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+        <span class="n">prefix</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;prefix&quot;</span><span class="p">,</span> <span class="s">&quot;IPv4 prefix&quot;</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ip</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">prefix</span><span class="p">)</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NetNSIPv4Address.emulation"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsipv4address.NetNSIPv4Address.emulation">[docs]</a>    <span class="k">def</span> <span class="nf">emulation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">emulation</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NetNSIPv4Address.node"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsipv4address.NetNSIPv4Address.node">[docs]</a>    <span class="k">def</span> <span class="nf">node</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">interface</span><span class="o">.</span><span class="n">node</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NetNSIPv4Address.interface"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsipv4address.NetNSIPv4Address.interface">[docs]</a>    <span class="k">def</span> <span class="nf">interface</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="kn">from</span> <span class="nn">nepi.resources.netns.netnsinterface</span> <span class="kn">import</span> <span class="n">NetNSInterface</span>
+        <span class="n">interface</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">NetNSInterface</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">interface</span><span class="p">:</span> 
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;IPv4Address not connected to Interface!!&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">return</span> <span class="n">interface</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_rms_to_wait</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">interface</span><span class="p">]</span>
+
+    <span class="k">def</span> <span class="nf">_instantiate_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_uuid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">emulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">interface</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;add_v4_address&quot;</span><span class="p">,</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ip&quot;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;prefix&quot;</span><span class="p">))</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/netns/netnsnode.html b/doc/sphinx/_build/html/_modules/nepi/resources/netns/netnsnode.html
new file mode 100644 (file)
index 0000000..6fd6773
--- /dev/null
@@ -0,0 +1,137 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.netns.netnsnode &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.netns.netnsnode</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.netns.netnsbase</span> <span class="kn">import</span> <span class="n">NetNSBase</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NetNSNode"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsnode.NetNSNode">[docs]</a><span class="k">class</span> <span class="nc">NetNSNode</span><span class="p">(</span><span class="n">NetNSBase</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;netns::Node&quot;</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NetNSNode.emulation"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsnode.NetNSNode.emulation">[docs]</a>    <span class="k">def</span> <span class="nf">emulation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="kn">from</span> <span class="nn">nepi.resources.netns.netnsemulation</span> <span class="kn">import</span> <span class="n">NetNSEmulation</span>
+
+        <span class="k">for</span> <span class="n">guid</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">connections</span><span class="p">:</span>
+            <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+            <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">rm</span><span class="p">,</span> <span class="n">NetNSEmulation</span><span class="p">):</span>
+                <span class="k">return</span> <span class="n">rm</span>
+
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Node not connected to Emulation&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+        <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+ </div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_rms_to_wait</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">emulation</span><span class="p">]</span>
+
+    <span class="k">def</span> <span class="nf">_instantiate_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_uuid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">emulation</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="s">&quot;Node&quot;</span><span class="p">)</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/netns/netnsnodeinterface.html b/doc/sphinx/_build/html/_modules/nepi/resources/netns/netnsnodeinterface.html
new file mode 100644 (file)
index 0000000..dc017fe
--- /dev/null
@@ -0,0 +1,157 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.netns.netnsnodeinterface &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.netns.netnsnodeinterface</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.netns.netnsinterface</span> <span class="kn">import</span> <span class="n">NetNSInterface</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NetNSNodeInterface"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsnodeinterface.NetNSNodeInterface">[docs]</a><span class="k">class</span> <span class="nc">NetNSNodeInterface</span><span class="p">(</span><span class="n">NetNSInterface</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;netns::NodeInterface&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">up</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;up&quot;</span><span class="p">,</span> <span class="s">&quot;Interface up&quot;</span><span class="p">,</span> 
+                <span class="n">default</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span>
+                <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">up</span><span class="p">)</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NetNSNodeInterface.emulation"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsnodeinterface.NetNSNodeInterface.emulation">[docs]</a>    <span class="k">def</span> <span class="nf">emulation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">emulation</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NetNSNodeInterface.node"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsnodeinterface.NetNSNodeInterface.node">[docs]</a>    <span class="k">def</span> <span class="nf">node</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="kn">from</span> <span class="nn">nepi.resources.netns.netnsnode</span> <span class="kn">import</span> <span class="n">NetNSNode</span>
+        <span class="n">node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">NetNSNode</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">node</span><span class="p">:</span> 
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Route not connected to Node!!&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">return</span> <span class="n">node</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NetNSNodeInterface.switch"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsnodeinterface.NetNSNodeInterface.switch">[docs]</a>    <span class="k">def</span> <span class="nf">switch</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="kn">from</span> <span class="nn">nepi.resources.netns.netnsswitch</span> <span class="kn">import</span> <span class="n">NetNSSwitch</span>
+        <span class="n">switch</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">NetNSSwitch</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+        <span class="k">if</span> <span class="n">switch</span><span class="p">:</span> <span class="k">return</span> <span class="n">switch</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+        <span class="k">return</span> <span class="bp">None</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_rms_to_wait</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">switch</span><span class="p">]</span>
+
+    <span class="k">def</span> <span class="nf">_instantiate_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_uuid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">emulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;add_if&quot;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">emulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">switch</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;connect&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">emulation</span><span class="o">.</span><span class="n">emu_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;up&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;up&quot;</span><span class="p">))</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/netns/netnsroute.html b/doc/sphinx/_build/html/_modules/nepi/resources/netns/netnsroute.html
new file mode 100644 (file)
index 0000000..4b4554c
--- /dev/null
@@ -0,0 +1,152 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.netns.netnsroute &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.netns.netnsroute</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.netns.netnsbase</span> <span class="kn">import</span> <span class="n">NetNSBase</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NetNSIPv4Route"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsroute.NetNSIPv4Route">[docs]</a><span class="k">class</span> <span class="nc">NetNSIPv4Route</span><span class="p">(</span><span class="n">NetNSBase</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;netns::IPv4Route&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">network</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;network&quot;</span><span class="p">,</span> <span class="s">&quot;Network address&quot;</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+        <span class="n">prefix</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;prefix&quot;</span><span class="p">,</span> <span class="s">&quot;IP prefix length&quot;</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+        <span class="n">nexthop</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;nexthop&quot;</span><span class="p">,</span> <span class="s">&quot;Nexthop IP&quot;</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">network</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">prefix</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">nexthop</span><span class="p">)</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NetNSIPv4Route.emulation"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsroute.NetNSIPv4Route.emulation">[docs]</a>    <span class="k">def</span> <span class="nf">emulation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">emulation</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NetNSIPv4Route.node"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsroute.NetNSIPv4Route.node">[docs]</a>    <span class="k">def</span> <span class="nf">node</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="kn">from</span> <span class="nn">nepi.resources.netns.netnsnode</span> <span class="kn">import</span> <span class="n">NetNSNode</span>
+        <span class="n">node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">NetNSNode</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">node</span><span class="p">:</span> 
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Route not connected to Node!!&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">return</span> <span class="n">node</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_rms_to_wait</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="p">]</span>
+
+    <span class="k">def</span> <span class="nf">_instantiate_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+         <span class="bp">self</span><span class="o">.</span><span class="n">_uuid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">emulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">device</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;add_route&quot;</span><span class="p">,</span>
+                <span class="n">prefix</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;network&quot;</span><span class="p">),</span> <span class="n">prefix_len</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;prefix&quot;</span><span class="p">),</span>
+                <span class="n">nexthop</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;nexthop&quot;</span><span class="p">))</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/netns/netnsserver.html b/doc/sphinx/_build/html/_modules/nepi/resources/netns/netnsserver.html
new file mode 100644 (file)
index 0000000..c09bfeb
--- /dev/null
@@ -0,0 +1,307 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.netns.netnsserver &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.netns.netnsserver</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">import</span> <span class="nn">base64</span>
+<span class="kn">import</span> <span class="nn">cPickle</span>
+<span class="kn">import</span> <span class="nn">errno</span>
+<span class="kn">import</span> <span class="nn">logging</span>
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">socket</span>
+<span class="kn">import</span> <span class="nn">sys</span>
+
+<span class="kn">from</span> <span class="nn">optparse</span> <span class="kn">import</span> <span class="n">OptionParser</span><span class="p">,</span> <span class="n">SUPPRESS_HELP</span>
+
+<span class="kn">from</span> <span class="nn">netnswrapper</span> <span class="kn">import</span> <span class="n">NetNSWrapper</span>
+
+<div class="viewcode-block" id="NetNSWrapperMessage"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsserver.NetNSWrapperMessage">[docs]</a><span class="k">class</span> <span class="nc">NetNSWrapperMessage</span><span class="p">:</span>
+    <span class="n">CREATE</span> <span class="o">=</span> <span class="s">&quot;CREATE&quot;</span>
+    <span class="n">INVOKE</span> <span class="o">=</span> <span class="s">&quot;INVOKE&quot;</span>
+    <span class="n">SET</span> <span class="o">=</span> <span class="s">&quot;SET&quot;</span>
+    <span class="n">GET</span> <span class="o">=</span> <span class="s">&quot;GET&quot;</span>
+    <span class="n">FLUSH</span> <span class="o">=</span> <span class="s">&quot;FLUSH&quot;</span>
+    <span class="n">SHUTDOWN</span> <span class="o">=</span> <span class="s">&quot;SHUTDOWN&quot;</span>
+</div>
+<div class="viewcode-block" id="handle_message"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsserver.handle_message">[docs]</a><span class="k">def</span> <span class="nf">handle_message</span><span class="p">(</span><span class="n">wrapper</span><span class="p">,</span> <span class="n">msg_type</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">):</span>
+    <span class="k">if</span> <span class="n">msg_type</span> <span class="o">==</span> <span class="n">NetNSWrapperMessage</span><span class="o">.</span><span class="n">SHUTDOWN</span><span class="p">:</span>
+        <span class="n">wrapper</span><span class="o">.</span><span class="n">shutdown</span><span class="p">()</span>
+
+        <span class="k">return</span> <span class="s">&quot;BYEBYE&quot;</span>
+    
+    <span class="k">if</span> <span class="n">msg_type</span> <span class="o">==</span> <span class="n">NetNSWrapperMessage</span><span class="o">.</span><span class="n">CREATE</span><span class="p">:</span>
+        <span class="n">clazzname</span> <span class="o">=</span> <span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+        
+        <span class="k">return</span> <span class="n">wrapper</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">clazzname</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
+        
+    <span class="k">if</span> <span class="n">msg_type</span> <span class="o">==</span> <span class="n">NetNSWrapperMessage</span><span class="o">.</span><span class="n">INVOKE</span><span class="p">:</span>
+        <span class="n">uuid</span> <span class="o">=</span> <span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+        <span class="n">operation</span> <span class="o">=</span> <span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+   
+        <span class="k">return</span> <span class="n">wrapper</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">uuid</span><span class="p">,</span> <span class="n">operation</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+
+    <span class="k">if</span> <span class="n">msg_type</span> <span class="o">==</span> <span class="n">NetNSWrapperMessage</span><span class="o">.</span><span class="n">GET</span><span class="p">:</span>
+        <span class="n">uuid</span> <span class="o">=</span> <span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+        <span class="n">name</span> <span class="o">=</span> <span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">wrapper</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">uuid</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
+        
+    <span class="k">if</span> <span class="n">msg_type</span> <span class="o">==</span> <span class="n">NetNSWrapperMessage</span><span class="o">.</span><span class="n">SET</span><span class="p">:</span>
+        <span class="n">uuid</span> <span class="o">=</span> <span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+        <span class="n">name</span> <span class="o">=</span> <span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+        <span class="n">value</span> <span class="o">=</span> <span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">wrapper</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">uuid</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
+
+    <span class="k">if</span> <span class="n">msg_type</span> <span class="o">==</span> <span class="n">NetNSWrapperMessage</span><span class="o">.</span><span class="n">FLUSH</span><span class="p">:</span>
+        <span class="c"># Forces flushing output and error streams.</span>
+        <span class="c"># NS-3 output will stay unflushed until the program exits or </span>
+        <span class="c"># explicit invocation flush is done</span>
+        <span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">flush</span><span class="p">()</span>
+        <span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">flush</span><span class="p">()</span>
+
+        <span class="n">wrapper</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;FLUSHED&quot;</span><span class="p">)</span> 
+        
+        <span class="k">return</span> <span class="s">&quot;FLUSHED&quot;</span>
+</div>
+<div class="viewcode-block" id="create_socket"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsserver.create_socket">[docs]</a><span class="k">def</span> <span class="nf">create_socket</span><span class="p">(</span><span class="n">socket_name</span><span class="p">):</span>
+    <span class="n">sock</span> <span class="o">=</span> <span class="n">socket</span><span class="o">.</span><span class="n">socket</span><span class="p">(</span><span class="n">socket</span><span class="o">.</span><span class="n">AF_UNIX</span><span class="p">,</span> <span class="n">socket</span><span class="o">.</span><span class="n">SOCK_STREAM</span><span class="p">)</span>
+    <span class="n">sock</span><span class="o">.</span><span class="n">bind</span><span class="p">(</span><span class="n">socket_name</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">sock</span>
+</div>
+<div class="viewcode-block" id="recv_msg"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsserver.recv_msg">[docs]</a><span class="k">def</span> <span class="nf">recv_msg</span><span class="p">(</span><span class="n">conn</span><span class="p">):</span>
+    <span class="n">msg</span> <span class="o">=</span> <span class="p">[]</span>
+    <span class="n">chunk</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
+
+    <span class="k">while</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">chunk</span><span class="p">:</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">chunk</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">recv</span><span class="p">(</span><span class="mi">1024</span><span class="p">)</span>
+        <span class="k">except</span> <span class="p">(</span><span class="ne">OSError</span><span class="p">,</span> <span class="n">socket</span><span class="o">.</span><span class="n">error</span><span class="p">),</span> <span class="n">e</span><span class="p">:</span>
+            <span class="k">if</span> <span class="n">e</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="n">errno</span><span class="o">.</span><span class="n">EINTR</span><span class="p">:</span>
+                <span class="k">raise</span>
+            <span class="c"># Ignore eintr errors</span>
+            <span class="k">continue</span>
+
+        <span class="k">if</span> <span class="n">chunk</span><span class="p">:</span>
+            <span class="n">msg</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">chunk</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="c"># empty chunk = EOF</span>
+            <span class="k">break</span>
+    <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
+
+    <span class="c"># The message is formatted as follows:</span>
+    <span class="c">#   MESSAGE_TYPE|args|kwargs</span>
+    <span class="c">#</span>
+    <span class="c">#   where MESSAGE_TYPE, args and kwargs are pickld and enoded in base64</span>
+
+    <span class="k">def</span> <span class="nf">decode</span><span class="p">(</span><span class="n">item</span><span class="p">):</span>
+        <span class="n">item</span> <span class="o">=</span> <span class="n">base64</span><span class="o">.</span><span class="n">b64decode</span><span class="p">(</span><span class="n">item</span><span class="p">)</span><span class="o">.</span><span class="n">rstrip</span><span class="p">()</span>
+        <span class="k">return</span> <span class="n">cPickle</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">item</span><span class="p">)</span>
+
+    <span class="n">decoded</span> <span class="o">=</span> <span class="nb">map</span><span class="p">(</span><span class="n">decode</span><span class="p">,</span> <span class="n">msg</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;|&quot;</span><span class="p">))</span>
+
+    <span class="c"># decoded message</span>
+    <span class="n">dmsg_type</span> <span class="o">=</span> <span class="n">decoded</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+    <span class="n">dargs</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">decoded</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">))</span> <span class="c"># transforming touple into list</span>
+    <span class="n">dkwargs</span> <span class="o">=</span> <span class="n">decoded</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+
+    <span class="k">return</span> <span class="p">(</span><span class="n">dmsg_type</span><span class="p">,</span> <span class="n">dargs</span><span class="p">,</span> <span class="n">dkwargs</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="send_reply"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsserver.send_reply">[docs]</a><span class="k">def</span> <span class="nf">send_reply</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="n">reply</span><span class="p">):</span>
+    <span class="n">encoded</span> <span class="o">=</span> <span class="n">base64</span><span class="o">.</span><span class="n">b64encode</span><span class="p">(</span><span class="n">cPickle</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">reply</span><span class="p">))</span>
+    <span class="n">conn</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="s">&quot;</span><span class="si">%s</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">encoded</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="get_options"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsserver.get_options">[docs]</a><span class="k">def</span> <span class="nf">get_options</span><span class="p">():</span>
+    <span class="n">usage</span> <span class="o">=</span> <span class="p">(</span><span class="s">&quot;usage: %prog -S &lt;socket-name&gt; -D &lt;enable-dump&gt; -v &quot;</span><span class="p">)</span>
+    
+    <span class="n">parser</span> <span class="o">=</span> <span class="n">OptionParser</span><span class="p">(</span><span class="n">usage</span> <span class="o">=</span> <span class="n">usage</span><span class="p">)</span>
+
+    <span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s">&quot;-S&quot;</span><span class="p">,</span> <span class="s">&quot;--socket-name&quot;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s">&quot;socket_name&quot;</span><span class="p">,</span>
+        <span class="n">help</span> <span class="o">=</span> <span class="s">&quot;Name for the unix socket used to interact with this process&quot;</span><span class="p">,</span> 
+        <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;tap.sock&quot;</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s">&quot;str&quot;</span><span class="p">)</span>
+
+    <span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s">&quot;-D&quot;</span><span class="p">,</span> <span class="s">&quot;--enable-dump&quot;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s">&quot;enable_dump&quot;</span><span class="p">,</span>
+        <span class="n">help</span> <span class="o">=</span> <span class="s">&quot;Enable dumping the remote executed commands to a script &quot;</span>
+            <span class="s">&quot;in order to later reproduce and debug the experiment&quot;</span><span class="p">,</span>
+        <span class="n">action</span> <span class="o">=</span> <span class="s">&quot;store_true&quot;</span><span class="p">,</span>
+        <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">)</span>
+
+    <span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s">&quot;-v&quot;</span><span class="p">,</span> <span class="s">&quot;--verbose&quot;</span><span class="p">,</span>
+        <span class="n">help</span><span class="o">=</span><span class="s">&quot;Print debug output&quot;</span><span class="p">,</span>
+        <span class="n">action</span><span class="o">=</span><span class="s">&quot;store_true&quot;</span><span class="p">,</span> 
+        <span class="n">dest</span><span class="o">=</span><span class="s">&quot;verbose&quot;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
+
+    <span class="p">(</span><span class="n">options</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span>
+    
+    <span class="k">return</span> <span class="p">(</span><span class="n">options</span><span class="o">.</span><span class="n">socket_name</span><span class="p">,</span> <span class="n">options</span><span class="o">.</span><span class="n">verbose</span><span class="p">,</span> <span class="n">options</span><span class="o">.</span><span class="n">enable_dump</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="run_server"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsserver.run_server">[docs]</a><span class="k">def</span> <span class="nf">run_server</span><span class="p">(</span><span class="n">socket_name</span><span class="p">,</span> <span class="n">level</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">INFO</span><span class="p">,</span> 
+        <span class="n">enable_dump</span> <span class="o">=</span> <span class="bp">False</span><span class="p">):</span>
+
+    <span class="c">###### wrapper instantiation</span>
+    <span class="k">if</span> <span class="n">level</span> <span class="o">==</span> <span class="n">logging</span><span class="o">.</span><span class="n">DEBUG</span><span class="p">:</span>
+        <span class="kn">from</span> <span class="nn">syslog</span> <span class="kn">import</span> <span class="n">LOG_DEBUG</span>
+        <span class="kn">import</span> <span class="nn">netns</span>
+        <span class="n">netns</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">set_log_level</span><span class="p">(</span><span class="n">LOG_DEBUG</span><span class="p">)</span>
+
+    <span class="n">wrapper</span> <span class="o">=</span> <span class="n">NetNSWrapper</span><span class="p">(</span><span class="n">loglevel</span><span class="o">=</span><span class="n">level</span><span class="p">,</span> <span class="n">enable_dump</span> <span class="o">=</span> <span class="n">enable_dump</span><span class="p">)</span>
+    
+    <span class="n">wrapper</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;STARTING...&quot;</span><span class="p">)</span>
+
+    <span class="c"># create unix socket to receive instructions</span>
+    <span class="n">sock</span> <span class="o">=</span> <span class="n">create_socket</span><span class="p">(</span><span class="n">socket_name</span><span class="p">)</span>
+    <span class="n">sock</span><span class="o">.</span><span class="n">listen</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+
+    <span class="c"># wait for messages to arrive and process them</span>
+    <span class="n">stop</span> <span class="o">=</span> <span class="bp">False</span>
+
+    <span class="k">while</span> <span class="ow">not</span> <span class="n">stop</span><span class="p">:</span>
+        <span class="n">conn</span><span class="p">,</span> <span class="n">addr</span> <span class="o">=</span> <span class="n">sock</span><span class="o">.</span><span class="n">accept</span><span class="p">()</span>
+        <span class="n">conn</span><span class="o">.</span><span class="n">settimeout</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span>
+
+        <span class="k">try</span><span class="p">:</span>
+            <span class="p">(</span><span class="n">msg_type</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">)</span> <span class="o">=</span> <span class="n">recv_msg</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
+        <span class="k">except</span> <span class="n">socket</span><span class="o">.</span><span class="n">timeout</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
+            <span class="c"># Ingore time-out</span>
+            <span class="k">continue</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">msg_type</span><span class="p">:</span>
+            <span class="c"># Ignore - connection lost</span>
+            <span class="k">break</span>
+
+        <span class="k">if</span> <span class="n">msg_type</span> <span class="o">==</span> <span class="n">NetNSWrapperMessage</span><span class="o">.</span><span class="n">SHUTDOWN</span><span class="p">:</span>
+           <span class="n">stop</span> <span class="o">=</span> <span class="bp">True</span>
+  
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">reply</span> <span class="o">=</span> <span class="n">handle_message</span><span class="p">(</span><span class="n">wrapper</span><span class="p">,</span> <span class="n">msg_type</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">)</span>  
+        <span class="k">except</span><span class="p">:</span>
+            <span class="kn">import</span> <span class="nn">traceback</span>
+            <span class="n">err</span> <span class="o">=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">()</span>
+            <span class="n">wrapper</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">err</span><span class="p">)</span> 
+            <span class="k">raise</span>
+
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">send_reply</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="n">reply</span><span class="p">)</span>
+        <span class="k">except</span> <span class="n">socket</span><span class="o">.</span><span class="n">error</span><span class="p">:</span>
+            <span class="k">break</span>
+        
+    <span class="n">wrapper</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;EXITING...&quot;</span><span class="p">)</span>
+</div>
+<span class="k">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s">&#39;__main__&#39;</span><span class="p">:</span>
+            
+    <span class="p">(</span><span class="n">socket_name</span><span class="p">,</span> <span class="n">verbose</span><span class="p">,</span> <span class="n">enable_dump</span><span class="p">)</span> <span class="o">=</span> <span class="n">get_options</span><span class="p">()</span>
+
+    <span class="c">## configure logging</span>
+    <span class="n">FORMAT</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%(asctime)s</span><span class="s"> </span><span class="si">%(name)s</span><span class="s"> </span><span class="si">%(levelname)-4s</span><span class="s"> </span><span class="si">%(message)s</span><span class="s">&quot;</span>
+    <span class="n">level</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">DEBUG</span> <span class="k">if</span> <span class="n">verbose</span> <span class="k">else</span> <span class="n">logging</span><span class="o">.</span><span class="n">INFO</span>
+    
+    <span class="n">logging</span><span class="o">.</span><span class="n">basicConfig</span><span class="p">(</span><span class="n">format</span> <span class="o">=</span> <span class="n">FORMAT</span><span class="p">,</span> <span class="n">level</span> <span class="o">=</span> <span class="n">level</span><span class="p">)</span>
+
+    <span class="c">## Run the server</span>
+    <span class="n">run_server</span><span class="p">(</span><span class="n">socket_name</span><span class="p">,</span> <span class="n">level</span><span class="p">,</span> <span class="n">enable_dump</span><span class="p">)</span>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/netns/netnsswitch.html b/doc/sphinx/_build/html/_modules/nepi/resources/netns/netnsswitch.html
new file mode 100644 (file)
index 0000000..eabd651
--- /dev/null
@@ -0,0 +1,153 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.netns.netnsswitch &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.netns.netnsswitch</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.netns.netnsbase</span> <span class="kn">import</span> <span class="n">NetNSBase</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NetNSSwitch"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsswitch.NetNSSwitch">[docs]</a><span class="k">class</span> <span class="nc">NetNSSwitch</span><span class="p">(</span><span class="n">NetNSBase</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;netns::Switch&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">up</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;up&quot;</span><span class="p">,</span> <span class="s">&quot;Switch up&quot;</span><span class="p">,</span> 
+                <span class="n">default</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span>
+                <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">up</span><span class="p">)</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NetNSSwitch.emulation"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsswitch.NetNSSwitch.emulation">[docs]</a>    <span class="k">def</span> <span class="nf">emulation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">emulation</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NetNSSwitch.node"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsswitch.NetNSSwitch.node">[docs]</a>    <span class="k">def</span> <span class="nf">node</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">interface</span><span class="o">.</span><span class="n">node</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NetNSSwitch.interface"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnsswitch.NetNSSwitch.interface">[docs]</a>    <span class="k">def</span> <span class="nf">interface</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="kn">from</span> <span class="nn">nepi.resources.netns.netnsinterface</span> <span class="kn">import</span> <span class="n">NetNSInterface</span>
+        <span class="n">interface</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">NetNSInterface</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">interface</span><span class="p">:</span> 
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Switch not connected to any Interface!!&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">return</span> <span class="n">interface</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_rms_to_wait</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">emulation</span><span class="p">]</span>
+
+    <span class="k">def</span> <span class="nf">_instantiate_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_uuid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">emulation</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="s">&quot;Switch&quot;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">emulation</span><span class="o">.</span><span class="n">emu_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;up&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;up&quot;</span><span class="p">))</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/netns/netnswrapper.html b/doc/sphinx/_build/html/_modules/nepi/resources/netns/netnswrapper.html
new file mode 100644 (file)
index 0000000..74dc317
--- /dev/null
@@ -0,0 +1,280 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.netns.netnswrapper &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.netns.netnswrapper</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">import</span> <span class="nn">logging</span>
+<span class="kn">import</span> <span class="nn">time</span>
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">sys</span>
+<span class="kn">import</span> <span class="nn">uuid</span>
+
+<div class="viewcode-block" id="NetNSWrapper"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper.NetNSWrapper">[docs]</a><span class="k">class</span> <span class="nc">NetNSWrapper</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">loglevel</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">INFO</span><span class="p">,</span> <span class="n">enable_dump</span> <span class="o">=</span> <span class="bp">False</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NetNSWrapper</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+        <span class="c"># holds reference to all C++ objects and variables in the simulation</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_objects</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
+
+        <span class="c"># Logging</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s">&quot;netnswrapper&quot;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_logger</span><span class="o">.</span><span class="n">setLevel</span><span class="p">(</span><span class="n">loglevel</span><span class="p">)</span>
+
+        <span class="c"># Object to dump instructions to reproduce and debug experiment</span>
+        <span class="kn">from</span> <span class="nn">netnswrapper_debug</span> <span class="kn">import</span> <span class="n">NetNSWrapperDebuger</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_debuger</span> <span class="o">=</span> <span class="n">NetNSWrapperDebuger</span><span class="p">(</span><span class="n">enabled</span> <span class="o">=</span> <span class="n">enable_dump</span><span class="p">)</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NetNSWrapper.debuger"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper.NetNSWrapper.debuger">[docs]</a>    <span class="k">def</span> <span class="nf">debuger</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_debuger</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NetNSWrapper.logger"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper.NetNSWrapper.logger">[docs]</a>    <span class="k">def</span> <span class="nf">logger</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_logger</span>
+</div>
+<div class="viewcode-block" id="NetNSWrapper.make_uuid"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper.NetNSWrapper.make_uuid">[docs]</a>    <span class="k">def</span> <span class="nf">make_uuid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s">&quot;uuid</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">uuid</span><span class="o">.</span><span class="n">uuid4</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="NetNSWrapper.get_object"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper.NetNSWrapper.get_object">[docs]</a>    <span class="k">def</span> <span class="nf">get_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">uuid</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_objects</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">uuid</span><span class="p">)</span>
+ </div>
+<div class="viewcode-block" id="NetNSWrapper.create"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper.NetNSWrapper.create">[docs]</a>    <span class="k">def</span> <span class="nf">create</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">clazzname</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; This method should be used to construct netns objects &quot;&quot;&quot;</span>
+        <span class="kn">import</span> <span class="nn">netns</span>
+
+        <span class="k">if</span> <span class="n">clazzname</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&#39;open&#39;</span><span class="p">]</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">netns</span><span class="p">,</span> <span class="n">clazzname</span><span class="p">):</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Type </span><span class="si">%s</span><span class="s"> not supported&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">clazzname</span><span class="p">)</span> 
+            <span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+
+        <span class="n">uuid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">make_uuid</span><span class="p">()</span>
+        
+        <span class="c">### DEBUG</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;CREATE </span><span class="si">%s</span><span class="s">( </span><span class="si">%s</span><span class="s"> )&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">clazzname</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">args</span><span class="p">)))</span>
+    
+        <span class="bp">self</span><span class="o">.</span><span class="n">debuger</span><span class="o">.</span><span class="n">dump_create</span><span class="p">(</span><span class="n">uuid</span><span class="p">,</span> <span class="n">clazzname</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
+        <span class="c">########</span>
+
+        <span class="k">if</span> <span class="n">clazzname</span> <span class="o">==</span> <span class="s">&quot;open&quot;</span><span class="p">:</span>
+            <span class="n">path</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> 
+            <span class="n">mode</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> 
+            <span class="n">obj</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">mode</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">clazz</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">netns</span><span class="p">,</span> <span class="n">clazzname</span><span class="p">)</span>
+     
+            <span class="c"># arguments starting with &#39;uuid&#39; identify ns-3 C++</span>
+            <span class="c"># objects and must be replaced by the actual object</span>
+            <span class="n">realargs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_args</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
+           
+            <span class="n">obj</span> <span class="o">=</span> <span class="n">clazz</span><span class="p">(</span><span class="o">*</span><span class="n">realargs</span><span class="p">)</span>
+            
+        <span class="bp">self</span><span class="o">.</span><span class="n">_objects</span><span class="p">[</span><span class="n">uuid</span><span class="p">]</span> <span class="o">=</span> <span class="n">obj</span>
+
+        <span class="c">### DEBUG</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;RET CREATE ( uuid </span><span class="si">%s</span><span class="s"> ) </span><span class="si">%s</span><span class="s"> = </span><span class="si">%s</span><span class="s">( </span><span class="si">%s</span><span class="s"> )&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">uuid</span><span class="p">),</span> 
+            <span class="nb">str</span><span class="p">(</span><span class="n">obj</span><span class="p">),</span> <span class="n">clazzname</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">args</span><span class="p">)))</span>
+        <span class="c">########</span>
+
+        <span class="k">return</span> <span class="n">uuid</span>
+</div>
+<div class="viewcode-block" id="NetNSWrapper.invoke"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper.NetNSWrapper.invoke">[docs]</a>    <span class="k">def</span> <span class="nf">invoke</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">uuid</span><span class="p">,</span> <span class="n">operation</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="n">newuuid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">make_uuid</span><span class="p">()</span>
+        
+        <span class="c">### DEBUG</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;INVOKE </span><span class="si">%s</span><span class="s"> -&gt; </span><span class="si">%s</span><span class="s">( </span><span class="si">%s</span><span class="s">, </span><span class="si">%s</span><span class="s"> ) &quot;</span> <span class="o">%</span> <span class="p">(</span>
+            <span class="n">uuid</span><span class="p">,</span> <span class="n">operation</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="nb">str</span><span class="p">(</span><span class="n">kwargs</span><span class="p">)))</span>
+            
+        <span class="bp">self</span><span class="o">.</span><span class="n">debuger</span><span class="o">.</span><span class="n">dump_invoke</span><span class="p">(</span><span class="n">newuuid</span><span class="p">,</span> <span class="n">uuid</span><span class="p">,</span> <span class="n">operation</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">)</span>
+        <span class="c">########</span>
+
+        <span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_object</span><span class="p">(</span><span class="n">uuid</span><span class="p">)</span>
+        
+        <span class="n">method</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">operation</span><span class="p">)</span>
+
+        <span class="c"># arguments starting with &#39;uuid&#39; identify netns</span>
+        <span class="c"># objects and must be replaced by the actual object</span>
+        <span class="n">realargs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_args</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
+        <span class="n">realkwargs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_kwargs</span><span class="p">(</span><span class="n">kwargs</span><span class="p">)</span>
+
+        <span class="n">result</span> <span class="o">=</span> <span class="n">method</span><span class="p">(</span><span class="o">*</span><span class="n">realargs</span><span class="p">,</span> <span class="o">**</span><span class="n">realkwargs</span><span class="p">)</span>
+
+        <span class="c"># If the result is an object (not a base value),</span>
+        <span class="c"># then keep track of the object a return the object</span>
+        <span class="c"># reference (newuuid)</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">result</span> <span class="ow">is</span> <span class="bp">None</span> <span class="ow">or</span> <span class="nb">type</span><span class="p">(</span><span class="n">result</span><span class="p">)</span> <span class="ow">in</span> <span class="p">[</span>
+                <span class="nb">bool</span><span class="p">,</span> <span class="nb">float</span><span class="p">,</span> <span class="nb">long</span><span class="p">,</span> <span class="nb">str</span><span class="p">,</span> <span class="nb">int</span><span class="p">]):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_objects</span><span class="p">[</span><span class="n">newuuid</span><span class="p">]</span> <span class="o">=</span> <span class="n">result</span>
+            <span class="n">result</span> <span class="o">=</span> <span class="n">newuuid</span>
+
+        <span class="c">### DEBUG</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;RET INVOKE </span><span class="si">%s%s</span><span class="s"> = </span><span class="si">%s</span><span class="s"> -&gt; </span><span class="si">%s</span><span class="s">(</span><span class="si">%s</span><span class="s">, </span><span class="si">%s</span><span class="s">) &quot;</span> <span class="o">%</span> <span class="p">(</span>
+            <span class="s">&quot;(uuid </span><span class="si">%s</span><span class="s">) &quot;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="n">newuuid</span><span class="p">)</span> <span class="k">if</span> <span class="n">newuuid</span> <span class="k">else</span> <span class="s">&quot;&quot;</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">result</span><span class="p">),</span> <span class="n">uuid</span><span class="p">,</span> 
+            <span class="n">operation</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="nb">str</span><span class="p">(</span><span class="n">kwargs</span><span class="p">)))</span>
+        <span class="c">########</span>
+
+        <span class="k">return</span> <span class="n">result</span>
+</div>
+<div class="viewcode-block" id="NetNSWrapper.set"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper.NetNSWrapper.set">[docs]</a>    <span class="k">def</span> <span class="nf">set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">uuid</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
+        <span class="c">### DEBUG</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;SET </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">uuid</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">value</span><span class="p">)))</span>
+    
+        <span class="bp">self</span><span class="o">.</span><span class="n">debuger</span><span class="o">.</span><span class="n">dump_set</span><span class="p">(</span><span class="n">uuid</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
+        <span class="c">########</span>
+
+        <span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_object</span><span class="p">(</span><span class="n">uuid</span><span class="p">)</span>
+        <span class="nb">setattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
+
+        <span class="c">### DEBUG</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;RET SET </span><span class="si">%s</span><span class="s"> = </span><span class="si">%s</span><span class="s"> -&gt; set(</span><span class="si">%s</span><span class="s">, </span><span class="si">%s</span><span class="s">)&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">value</span><span class="p">),</span> <span class="n">uuid</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> 
+            <span class="nb">str</span><span class="p">(</span><span class="n">value</span><span class="p">)))</span>
+        <span class="c">########</span>
+
+        <span class="k">return</span> <span class="n">value</span>
+</div>
+<div class="viewcode-block" id="NetNSWrapper.get"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper.NetNSWrapper.get">[docs]</a>    <span class="k">def</span> <span class="nf">get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">uuid</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
+        <span class="c">### DEBUG</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;GET </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">uuid</span><span class="p">,</span> <span class="n">name</span><span class="p">))</span>
+        
+        <span class="bp">self</span><span class="o">.</span><span class="n">debuger</span><span class="o">.</span><span class="n">dump_get</span><span class="p">(</span><span class="n">uuid</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
+        <span class="c">########</span>
+
+        <span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_object</span><span class="p">(</span><span class="n">uuid</span><span class="p">)</span>
+        <span class="n">result</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
+
+        <span class="c">### DEBUG</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;RET GET </span><span class="si">%s</span><span class="s"> = </span><span class="si">%s</span><span class="s"> -&gt; get(</span><span class="si">%s</span><span class="s">)&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">result</span><span class="p">),</span> <span class="n">uuid</span><span class="p">,</span> <span class="n">name</span><span class="p">))</span>
+        <span class="c">########</span>
+
+        <span class="k">return</span> <span class="n">result</span>
+</div>
+<div class="viewcode-block" id="NetNSWrapper.shutdown"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper.NetNSWrapper.shutdown">[docs]</a>    <span class="k">def</span> <span class="nf">shutdown</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="c">### DEBUG</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">debuger</span><span class="o">.</span><span class="n">dump_shutdown</span><span class="p">()</span>
+        <span class="c">########</span>
+
+        <span class="c">### FLUSH PIPES</span>
+        <span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">flush</span><span class="p">()</span>
+        <span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">flush</span><span class="p">()</span>
+
+        <span class="c">### RELEASE OBJECTS</span>
+        <span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">_objects</span> 
+
+        <span class="c">### DEBUG</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;SHUTDOWN&quot;</span><span class="p">)</span>
+        <span class="c">########</span>
+</div>
+<div class="viewcode-block" id="NetNSWrapper.replace_args"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper.NetNSWrapper.replace_args">[docs]</a>    <span class="k">def</span> <span class="nf">replace_args</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
+        <span class="n">realargs</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">get_object</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span> <span class="k">if</span> \
+                <span class="nb">str</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&quot;uuid&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="n">arg</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">args</span><span class="p">]</span>
+        <span class="k">return</span> <span class="n">realargs</span>
+</div>
+<div class="viewcode-block" id="NetNSWrapper.replace_kwargs"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper.NetNSWrapper.replace_kwargs">[docs]</a>    <span class="k">def</span> <span class="nf">replace_kwargs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">):</span>
+        <span class="n">realkwargs</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">([(</span><span class="n">k</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_object</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> \
+                <span class="k">if</span> <span class="nb">str</span><span class="p">(</span><span class="n">v</span><span class="p">)</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&quot;uuid&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="n">v</span><span class="p">)</span> \
+                <span class="k">for</span> <span class="n">k</span><span class="p">,</span><span class="n">v</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">iteritems</span><span class="p">()])</span>
+        <span class="k">return</span> <span class="n">realkwargs</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/netns/netnswrapper_debug.html b/doc/sphinx/_build/html/_modules/nepi/resources/netns/netnswrapper_debug.html
new file mode 100644 (file)
index 0000000..e6af9c7
--- /dev/null
@@ -0,0 +1,251 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.netns.netnswrapper_debug &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.netns.netnswrapper_debug</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+
+<span class="c">############ METHODS DEBUG NETNSWRAPPER EXECUTION</span>
+<span class="c">##</span>
+<span class="c">## The netnswrapper works in ditributed mode, receiving instructions from</span>
+<span class="c">## a remote client. This makes it very hard to debug scripting errors </span>
+<span class="c">## in the client side. To simplify error debugging, when set to debug mode,</span>
+<span class="c">## the ns3wrapper dumps every executed line to a script that can be then</span>
+<span class="c">## executed locally to reproduce and debug the experiment.</span>
+<span class="c">##</span>
+<span class="c">###########################################################################</span>
+
+<span class="kn">import</span> <span class="nn">logging</span>
+
+<div class="viewcode-block" id="NetNSWrapperDebuger"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger">[docs]</a><span class="k">class</span> <span class="nc">NetNSWrapperDebuger</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">enabled</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NetNSWrapperDebuger</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_enabled</span> <span class="o">=</span> <span class="n">enabled</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_script_path</span> <span class="o">=</span> <span class="s">&quot;debug.py&quot;</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">dump_header</span><span class="p">()</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NetNSWrapperDebuger.enabled"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.enabled">[docs]</a>    <span class="k">def</span> <span class="nf">enabled</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_enabled</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NetNSWrapperDebuger.script_path"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.script_path">[docs]</a>    <span class="k">def</span> <span class="nf">script_path</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_script_path</span>
+</div>
+<div class="viewcode-block" id="NetNSWrapperDebuger.dump_to_script"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.dump_to_script">[docs]</a>    <span class="k">def</span> <span class="nf">dump_to_script</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">command</span><span class="p">):</span>
+        <span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">script_path</span><span class="p">,</span> <span class="s">&quot;a&quot;</span><span class="p">)</span>
+        <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s">&quot;</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
+        <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="NetNSWrapperDebuger.dump_header"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.dump_header">[docs]</a>    <span class="k">def</span> <span class="nf">dump_header</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">enabled</span><span class="p">:</span>
+            <span class="k">return</span>
+
+        <span class="n">header</span> <span class="o">=</span> <span class="s">&quot;&quot;&quot;</span>
+<span class="s">from netnswrapper import NetNSWrapper</span>
+
+<span class="s">wrapper = NS3Wrapper()</span>
+
+<span class="s">&quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">dump_to_script</span><span class="p">(</span><span class="n">header</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NetNSWrapperDebuger.dump_factory"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.dump_factory">[docs]</a>    <span class="k">def</span> <span class="nf">dump_factory</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">uuid</span><span class="p">,</span> <span class="n">type_name</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">enabled</span><span class="p">:</span>
+            <span class="k">return</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="p">(</span><span class="s">&quot;kwargs = </span><span class="si">%(kwargs)s</span><span class="se">\n</span><span class="s">&quot;</span>
+                <span class="s">&quot;</span><span class="si">%(uuid)s</span><span class="s"> = wrapper.factory(</span><span class="si">%(type_name)s</span><span class="s">, **kwargs)</span><span class="se">\n\n</span><span class="s">&quot;</span> 
+                <span class="p">)</span> <span class="o">%</span> <span class="nb">dict</span><span class="p">({</span>
+                 <span class="s">&quot;uuid&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_value</span><span class="p">(</span><span class="n">uuid</span><span class="p">),</span>
+                 <span class="s">&quot;type_name&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_value</span><span class="p">(</span><span class="n">type_name</span><span class="p">),</span>
+                 <span class="s">&quot;kwargs&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_kwargs</span><span class="p">(</span><span class="n">kwargs</span><span class="p">)</span>
+                <span class="p">})</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">dump_to_script</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NetNSWrapperDebuger.dump_create"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.dump_create">[docs]</a>    <span class="k">def</span> <span class="nf">dump_create</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">uuid</span><span class="p">,</span> <span class="n">clazzname</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">enabled</span><span class="p">:</span>
+            <span class="k">return</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="p">(</span><span class="s">&quot;args = </span><span class="si">%(args)s</span><span class="se">\n</span><span class="s">&quot;</span>
+                <span class="s">&quot;</span><span class="si">%(uuid)s</span><span class="s"> = wrapper.create(</span><span class="si">%(clazzname)s</span><span class="s">, *args)</span><span class="se">\n\n</span><span class="s">&quot;</span> 
+                <span class="p">)</span> <span class="o">%</span> <span class="nb">dict</span><span class="p">({</span>
+                 <span class="s">&quot;uuid&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_value</span><span class="p">(</span><span class="n">uuid</span><span class="p">),</span>
+                 <span class="s">&quot;clazzname&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_value</span><span class="p">(</span><span class="n">clazzname</span><span class="p">),</span>
+                 <span class="s">&quot;args&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">args</span><span class="p">),</span>
+                <span class="p">})</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">dump_to_script</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NetNSWrapperDebuger.dump_invoke"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.dump_invoke">[docs]</a>    <span class="k">def</span> <span class="nf">dump_invoke</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">newuuid</span><span class="p">,</span> <span class="n">uuid</span><span class="p">,</span> <span class="n">operation</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">enabled</span><span class="p">:</span>
+            <span class="k">return</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="p">(</span><span class="s">&quot;args = </span><span class="si">%(args)s</span><span class="se">\n</span><span class="s">&quot;</span>
+                   <span class="s">&quot;kwargs = </span><span class="si">%(kwargs)s</span><span class="se">\n</span><span class="s">&quot;</span>
+                   <span class="s">&quot;</span><span class="si">%(newuuid)s</span><span class="s"> = wrapper.invoke(</span><span class="si">%(uuid)s</span><span class="s">, </span><span class="si">%(operation)s</span><span class="s">, *args, **kwargs)</span><span class="se">\n\n</span><span class="s">&quot;</span> 
+                <span class="p">)</span> <span class="o">%</span> <span class="nb">dict</span><span class="p">({</span>
+                 <span class="s">&quot;newuuid&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_value</span><span class="p">(</span><span class="n">newuuid</span><span class="p">)</span> <span class="k">if</span> <span class="n">newuuid</span> <span class="k">else</span> <span class="s">&quot;nothing&quot;</span><span class="p">,</span>
+                 <span class="s">&quot;uuid&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_value</span><span class="p">(</span><span class="n">uuid</span><span class="p">),</span>
+                 <span class="s">&quot;operation&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_value</span><span class="p">(</span><span class="n">operation</span><span class="p">),</span>
+                 <span class="s">&quot;args&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">args</span><span class="p">),</span>
+                 <span class="s">&quot;kwargs&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_kwargs</span><span class="p">(</span><span class="n">kwargs</span><span class="p">),</span>
+                <span class="p">})</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">dump_to_script</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NetNSWrapperDebuger.dump_set"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.dump_set">[docs]</a>    <span class="k">def</span> <span class="nf">dump_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">uuid</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">enabled</span><span class="p">:</span>
+            <span class="k">return</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="p">(</span><span class="s">&quot;wrapper.set(</span><span class="si">%(uuid)s</span><span class="s">, </span><span class="si">%(name)s</span><span class="s">, </span><span class="si">%(value)s</span><span class="s">)</span><span class="se">\n\n</span><span class="s">&quot;</span> 
+                <span class="p">)</span> <span class="o">%</span> <span class="nb">dict</span><span class="p">({</span>
+                 <span class="s">&quot;uuid&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_value</span><span class="p">(</span><span class="n">uuid</span><span class="p">),</span>
+                 <span class="s">&quot;name&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_value</span><span class="p">(</span><span class="n">name</span><span class="p">),</span>
+                 <span class="s">&quot;value&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_value</span><span class="p">(</span><span class="n">value</span><span class="p">),</span>
+                <span class="p">})</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">dump_to_script</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NetNSWrapperDebuger.dump_get"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.dump_get">[docs]</a>    <span class="k">def</span> <span class="nf">dump_get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">uuid</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">enabled</span><span class="p">:</span>
+            <span class="k">return</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="p">(</span><span class="s">&quot;wrapper.get(</span><span class="si">%(uuid)s</span><span class="s">, </span><span class="si">%(name)s</span><span class="s">)</span><span class="se">\n\n</span><span class="s">&quot;</span> 
+                <span class="p">)</span> <span class="o">%</span> <span class="nb">dict</span><span class="p">({</span>
+                 <span class="s">&quot;uuid&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_value</span><span class="p">(</span><span class="n">uuid</span><span class="p">),</span>
+                 <span class="s">&quot;name&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_value</span><span class="p">(</span><span class="n">name</span><span class="p">),</span>
+                <span class="p">})</span>
+        
+        <span class="bp">self</span><span class="o">.</span><span class="n">dump_to_script</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NetNSWrapperDebuger.dump_shutdown"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.dump_shutdown">[docs]</a>    <span class="k">def</span> <span class="nf">dump_shutdown</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">enabled</span><span class="p">:</span>
+            <span class="k">return</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot;wrapper.shutdown()</span><span class="se">\n\n</span><span class="s">&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">dump_to_script</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NetNSWrapperDebuger.format_value"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.format_value">[docs]</a>    <span class="k">def</span> <span class="nf">format_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
+        <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="ow">and</span> <span class="n">value</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&quot;uuid&quot;</span><span class="p">):</span>
+            <span class="k">return</span> <span class="n">value</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;-&quot;</span><span class="p">,</span> <span class="s">&quot;&quot;</span><span class="p">)</span>
+
+        <span class="kn">import</span> <span class="nn">pprint</span> 
+        <span class="k">return</span> <span class="n">pprint</span><span class="o">.</span><span class="n">pformat</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NetNSWrapperDebuger.format_args"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.format_args">[docs]</a>    <span class="k">def</span> <span class="nf">format_args</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
+        <span class="n">fargs</span> <span class="o">=</span> <span class="nb">map</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">format_value</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
+        <span class="k">return</span> <span class="s">&quot;[</span><span class="si">%s</span><span class="s">]&quot;</span> <span class="o">%</span> <span class="s">&quot;,&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">fargs</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NetNSWrapperDebuger.format_kwargs"><a class="viewcode-back" href="../../../../_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.format_kwargs">[docs]</a>    <span class="k">def</span> <span class="nf">format_kwargs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">):</span>
+        <span class="n">fkwargs</span> <span class="o">=</span> <span class="nb">map</span><span class="p">(</span><span class="k">lambda</span> <span class="p">(</span><span class="n">k</span><span class="p">,</span><span class="n">w</span><span class="p">):</span> 
+               <span class="s">&quot;</span><span class="si">%s</span><span class="s">: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">format_value</span><span class="p">(</span><span class="n">k</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_value</span><span class="p">(</span><span class="n">w</span><span class="p">)),</span> 
+            <span class="n">kwargs</span><span class="o">.</span><span class="n">iteritems</span><span class="p">())</span>
+        
+        <span class="k">return</span>  <span class="s">&quot;dict({</span><span class="si">%s</span><span class="s">})&quot;</span> <span class="o">%</span> <span class="s">&quot;,&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">fkwargs</span><span class="p">)</span>
+        </div></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/aarf_wifi_manager.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/aarf_wifi_manager.html
new file mode 100644 (file)
index 0000000..74f31e7
--- /dev/null
@@ -0,0 +1,268 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.aarf_wifi_manager &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.aarf_wifi_manager</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3wifiremotestationmanager</span> <span class="kn">import</span> <span class="n">NS3BaseWifiRemoteStationManager</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3AarfWifiManager"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.aarf_wifi_manager.NS3AarfWifiManager">[docs]</a><span class="k">class</span> <span class="nc">NS3AarfWifiManager</span><span class="p">(</span><span class="n">NS3BaseWifiRemoteStationManager</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::AarfWifiManager&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_successk</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;SuccessK&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Multiplication factor for the success threshold in the AARF algorithm.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;2&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_successk</span><span class="p">)</span>
+
+        <span class="n">attr_timerk</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;TimerK&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Multiplication factor for the timer threshold in the AARF algorithm.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;2&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_timerk</span><span class="p">)</span>
+
+        <span class="n">attr_maxsuccessthreshold</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxSuccessThreshold&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Maximum value of the success threshold in the AARF algorithm.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;60&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxsuccessthreshold</span><span class="p">)</span>
+
+        <span class="n">attr_mintimerthreshold</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MinTimerThreshold&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The minimum value for the </span><span class="se">\&#39;</span><span class="s">timer</span><span class="se">\&#39;</span><span class="s"> threshold in the AARF algorithm.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;15&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_mintimerthreshold</span><span class="p">)</span>
+
+        <span class="n">attr_minsuccessthreshold</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MinSuccessThreshold&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The minimum value for the success threshold in the AARF algorithm.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;10&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_minsuccessthreshold</span><span class="p">)</span>
+
+        <span class="n">attr_islowlatency</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;IsLowLatency&quot;</span><span class="p">,</span>
+            <span class="s">&quot;If true, we attempt to modelize a so-called low-latency device: a device where decisions about tx parameters can be made on a per-packet basis and feedback about the transmission of each packet is obtained before sending the next. Otherwise, we modelize a  high-latency device, that is a device where we cannot update our decision about tx parameters after every packet transmission.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;True&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_islowlatency</span><span class="p">)</span>
+
+        <span class="n">attr_maxssrc</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxSsrc&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The maximum number of retransmission attempts for an RTS. This value will not have any effect on some rate control algorithms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;7&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxssrc</span><span class="p">)</span>
+
+        <span class="n">attr_maxslrc</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxSlrc&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The maximum number of retransmission attempts for a DATA packet. This value will not have any effect on some rate control algorithms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;7&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxslrc</span><span class="p">)</span>
+
+        <span class="n">attr_rtsctsthreshold</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;RtsCtsThreshold&quot;</span><span class="p">,</span>
+            <span class="s">&quot;If  the size of the data packet + LLC header + MAC header + FCS trailer is bigger than this value, we use an RTS/CTS handshake before sending the data, as per IEEE Std. 802.11-2012, Section 9.3.5. This value will not have any effect on some rate control algorithms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;2346&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_rtsctsthreshold</span><span class="p">)</span>
+
+        <span class="n">attr_fragmentationthreshold</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;FragmentationThreshold&quot;</span><span class="p">,</span>
+            <span class="s">&quot;If the size of the data packet + LLC header + MAC header + FCS trailer is biggerthan this value, we fragment it such that the size of the fragments are equal or smaller than this value, as per IEEE Std. 802.11-2012, Section 9.5. This value will not have any effect on some rate control algorithms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;2346&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_fragmentationthreshold</span><span class="p">)</span>
+
+        <span class="n">attr_nonunicastmode</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;NonUnicastMode&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Wifi mode used for non-unicast transmissions.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;Invalid-WifiMode&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_nonunicastmode</span><span class="p">)</span>
+
+        <span class="n">attr_defaulttxpowerlevel</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;DefaultTxPowerLevel&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Default power level to be used for transmissions. This is the power level that is used by all those WifiManagers that do notimplement TX power control.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_defaulttxpowerlevel</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">mactxrtsfailed</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxRtsFailed&quot;</span><span class="p">,</span> <span class="s">&quot;The transmission of a RTS by the MAC layer has failed&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxrtsfailed</span><span class="p">)</span>
+
+        <span class="n">mactxdatafailed</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxDataFailed&quot;</span><span class="p">,</span> <span class="s">&quot;The transmission of a data packet by the MAC layer has failed&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxdatafailed</span><span class="p">)</span>
+
+        <span class="n">mactxfinalrtsfailed</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxFinalRtsFailed&quot;</span><span class="p">,</span> <span class="s">&quot;The transmission of a RTS has exceeded the maximum number of attempts&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxfinalrtsfailed</span><span class="p">)</span>
+
+        <span class="n">mactxfinaldatafailed</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxFinalDataFailed&quot;</span><span class="p">,</span> <span class="s">&quot;The transmission of a data packet has exceeded the maximum number of attempts&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxfinaldatafailed</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3AarfWifiManager</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-aarf-wifi-manager-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/aarfcd_wifi_manager.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/aarfcd_wifi_manager.html
new file mode 100644 (file)
index 0000000..171bd47
--- /dev/null
@@ -0,0 +1,308 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.aarfcd_wifi_manager &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.aarfcd_wifi_manager</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3wifiremotestationmanager</span> <span class="kn">import</span> <span class="n">NS3BaseWifiRemoteStationManager</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3AarfcdWifiManager"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.aarfcd_wifi_manager.NS3AarfcdWifiManager">[docs]</a><span class="k">class</span> <span class="nc">NS3AarfcdWifiManager</span><span class="p">(</span><span class="n">NS3BaseWifiRemoteStationManager</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::AarfcdWifiManager&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_successk</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;SuccessK&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Multiplication factor for the success threshold in the AARF algorithm.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;2&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_successk</span><span class="p">)</span>
+
+        <span class="n">attr_timerk</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;TimerK&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Multiplication factor for the timer threshold in the AARF algorithm.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;2&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_timerk</span><span class="p">)</span>
+
+        <span class="n">attr_maxsuccessthreshold</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxSuccessThreshold&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Maximum value of the success threshold in the AARF algorithm.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;60&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxsuccessthreshold</span><span class="p">)</span>
+
+        <span class="n">attr_mintimerthreshold</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MinTimerThreshold&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The minimum value for the </span><span class="se">\&#39;</span><span class="s">timer</span><span class="se">\&#39;</span><span class="s"> threshold in the AARF algorithm.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;15&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_mintimerthreshold</span><span class="p">)</span>
+
+        <span class="n">attr_minsuccessthreshold</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MinSuccessThreshold&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The minimum value for the success threshold in the AARF algorithm.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;10&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_minsuccessthreshold</span><span class="p">)</span>
+
+        <span class="n">attr_minrtswnd</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MinRtsWnd&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Minimum value for Rts window of Aarf-CD&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_minrtswnd</span><span class="p">)</span>
+
+        <span class="n">attr_maxrtswnd</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxRtsWnd&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Maximum value for Rts window of Aarf-CD&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;40&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxrtswnd</span><span class="p">)</span>
+
+        <span class="n">attr_turnoffrtsafterratedecrease</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;TurnOffRtsAfterRateDecrease&quot;</span><span class="p">,</span>
+            <span class="s">&quot;If true the RTS mechanism will be turned off when the rate will be decreased&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;True&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_turnoffrtsafterratedecrease</span><span class="p">)</span>
+
+        <span class="n">attr_turnonrtsafterrateincrease</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;TurnOnRtsAfterRateIncrease&quot;</span><span class="p">,</span>
+            <span class="s">&quot;If true the RTS mechanism will be turned on when the rate will be increased&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;True&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_turnonrtsafterrateincrease</span><span class="p">)</span>
+
+        <span class="n">attr_islowlatency</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;IsLowLatency&quot;</span><span class="p">,</span>
+            <span class="s">&quot;If true, we attempt to modelize a so-called low-latency device: a device where decisions about tx parameters can be made on a per-packet basis and feedback about the transmission of each packet is obtained before sending the next. Otherwise, we modelize a  high-latency device, that is a device where we cannot update our decision about tx parameters after every packet transmission.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;True&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_islowlatency</span><span class="p">)</span>
+
+        <span class="n">attr_maxssrc</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxSsrc&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The maximum number of retransmission attempts for an RTS. This value will not have any effect on some rate control algorithms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;7&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxssrc</span><span class="p">)</span>
+
+        <span class="n">attr_maxslrc</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxSlrc&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The maximum number of retransmission attempts for a DATA packet. This value will not have any effect on some rate control algorithms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;7&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxslrc</span><span class="p">)</span>
+
+        <span class="n">attr_rtsctsthreshold</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;RtsCtsThreshold&quot;</span><span class="p">,</span>
+            <span class="s">&quot;If  the size of the data packet + LLC header + MAC header + FCS trailer is bigger than this value, we use an RTS/CTS handshake before sending the data, as per IEEE Std. 802.11-2012, Section 9.3.5. This value will not have any effect on some rate control algorithms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;2346&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_rtsctsthreshold</span><span class="p">)</span>
+
+        <span class="n">attr_fragmentationthreshold</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;FragmentationThreshold&quot;</span><span class="p">,</span>
+            <span class="s">&quot;If the size of the data packet + LLC header + MAC header + FCS trailer is biggerthan this value, we fragment it such that the size of the fragments are equal or smaller than this value, as per IEEE Std. 802.11-2012, Section 9.5. This value will not have any effect on some rate control algorithms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;2346&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_fragmentationthreshold</span><span class="p">)</span>
+
+        <span class="n">attr_nonunicastmode</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;NonUnicastMode&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Wifi mode used for non-unicast transmissions.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;Invalid-WifiMode&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_nonunicastmode</span><span class="p">)</span>
+
+        <span class="n">attr_defaulttxpowerlevel</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;DefaultTxPowerLevel&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Default power level to be used for transmissions. This is the power level that is used by all those WifiManagers that do notimplement TX power control.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_defaulttxpowerlevel</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">mactxrtsfailed</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxRtsFailed&quot;</span><span class="p">,</span> <span class="s">&quot;The transmission of a RTS by the MAC layer has failed&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxrtsfailed</span><span class="p">)</span>
+
+        <span class="n">mactxdatafailed</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxDataFailed&quot;</span><span class="p">,</span> <span class="s">&quot;The transmission of a data packet by the MAC layer has failed&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxdatafailed</span><span class="p">)</span>
+
+        <span class="n">mactxfinalrtsfailed</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxFinalRtsFailed&quot;</span><span class="p">,</span> <span class="s">&quot;The transmission of a RTS has exceeded the maximum number of attempts&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxfinalrtsfailed</span><span class="p">)</span>
+
+        <span class="n">mactxfinaldatafailed</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxFinalDataFailed&quot;</span><span class="p">,</span> <span class="s">&quot;The transmission of a data packet has exceeded the maximum number of attempts&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxfinaldatafailed</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3AarfcdWifiManager</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-aarfcd-wifi-manager-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/adhoc_wifi_mac.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/adhoc_wifi_mac.html
new file mode 100644 (file)
index 0000000..87e71c7
--- /dev/null
@@ -0,0 +1,300 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.adhoc_wifi_mac &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.adhoc_wifi_mac</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3wifimac</span> <span class="kn">import</span> <span class="n">NS3BaseWifiMac</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3AdhocWifiMac"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.adhoc_wifi_mac.NS3AdhocWifiMac">[docs]</a><span class="k">class</span> <span class="nc">NS3AdhocWifiMac</span><span class="p">(</span><span class="n">NS3BaseWifiMac</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::AdhocWifiMac&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_qossupported</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;QosSupported&quot;</span><span class="p">,</span>
+            <span class="s">&quot;This Boolean attribute is set to enable 802.11e/WMM-style QoS support at this STA&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;False&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_qossupported</span><span class="p">)</span>
+
+        <span class="n">attr_htsupported</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;HtSupported&quot;</span><span class="p">,</span>
+            <span class="s">&quot;This Boolean attribute is set to enable 802.11n support at this STA&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;False&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_htsupported</span><span class="p">)</span>
+
+        <span class="n">attr_ctstoselfsupported</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;CtsToSelfSupported&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Use CTS to Self when using a rate that is not in the basic set rate&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;False&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_ctstoselfsupported</span><span class="p">)</span>
+
+        <span class="n">attr_ctstimeout</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;CtsTimeout&quot;</span><span class="p">,</span>
+            <span class="s">&quot;When this timeout expires, the RTS/CTS handshake has failed.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+75000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_ctstimeout</span><span class="p">)</span>
+
+        <span class="n">attr_acktimeout</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;AckTimeout&quot;</span><span class="p">,</span>
+            <span class="s">&quot;When this timeout expires, the DATA/ACK handshake has failed.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+75000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_acktimeout</span><span class="p">)</span>
+
+        <span class="n">attr_basicblockacktimeout</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;BasicBlockAckTimeout&quot;</span><span class="p">,</span>
+            <span class="s">&quot;When this timeout expires, the BASIC_BLOCK_ACK_REQ/BASIC_BLOCK_ACK handshake has failed.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+281000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_basicblockacktimeout</span><span class="p">)</span>
+
+        <span class="n">attr_compressedblockacktimeout</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;CompressedBlockAckTimeout&quot;</span><span class="p">,</span>
+            <span class="s">&quot;When this timeout expires, the COMPRESSED_BLOCK_ACK_REQ/COMPRESSED_BLOCK_ACK handshake has failed.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+107000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_compressedblockacktimeout</span><span class="p">)</span>
+
+        <span class="n">attr_sifs</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Sifs&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The value of the SIFS constant.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+16000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_sifs</span><span class="p">)</span>
+
+        <span class="n">attr_eifsnodifs</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;EifsNoDifs&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The value of EIFS-DIFS&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+60000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_eifsnodifs</span><span class="p">)</span>
+
+        <span class="n">attr_slot</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Slot&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The duration of a Slot.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+9000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_slot</span><span class="p">)</span>
+
+        <span class="n">attr_pifs</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Pifs&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The value of the PIFS constant.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+25000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_pifs</span><span class="p">)</span>
+
+        <span class="n">attr_rifs</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Rifs&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The value of the RIFS constant.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+2000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_rifs</span><span class="p">)</span>
+
+        <span class="n">attr_maxpropagationdelay</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxPropagationDelay&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The maximum propagation delay. Unused for now.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+3333.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxpropagationdelay</span><span class="p">)</span>
+
+        <span class="n">attr_ssid</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Ssid&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The ssid we want to belong to.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;default&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_ssid</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">txokheader</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;TxOkHeader&quot;</span><span class="p">,</span> <span class="s">&quot;The header of successfully transmitted packet&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">txokheader</span><span class="p">)</span>
+
+        <span class="n">txerrheader</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;TxErrHeader&quot;</span><span class="p">,</span> <span class="s">&quot;The header of unsuccessfully transmitted packet&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">txerrheader</span><span class="p">)</span>
+
+        <span class="n">mactx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTx&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been received from higher layers and is being processed in preparation for queueing for transmission.&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactx</span><span class="p">)</span>
+
+        <span class="n">mactxdrop</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxDrop&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been dropped in the MAC layer before being queued for transmission.&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxdrop</span><span class="p">)</span>
+
+        <span class="n">macpromiscrx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacPromiscRx&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been received by this device, has been passed up from the physical layer and is being forwarded up the local protocol stack.  This is a promiscuous trace,&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">macpromiscrx</span><span class="p">)</span>
+
+        <span class="n">macrx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacRx&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been received by this device, has been passed up from the physical layer and is being forwarded up the local protocol stack.  This is a non-promiscuous trace,&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">macrx</span><span class="p">)</span>
+
+        <span class="n">macrxdrop</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacRxDrop&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been dropped in the MAC layer after it has been passed up from the physical layer.&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">macrxdrop</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3AdhocWifiMac</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-adhoc-wifi-mac-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/aloha_noack_net_device.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/aloha_noack_net_device.html
new file mode 100644 (file)
index 0000000..92e63c0
--- /dev/null
@@ -0,0 +1,168 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.aloha_noack_net_device &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.aloha_noack_net_device</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3netdevice</span> <span class="kn">import</span> <span class="n">NS3BaseNetDevice</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3AlohaNoackNetDevice"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.aloha_noack_net_device.NS3AlohaNoackNetDevice">[docs]</a><span class="k">class</span> <span class="nc">NS3AlohaNoackNetDevice</span><span class="p">(</span><span class="n">NS3BaseNetDevice</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::AlohaNoackNetDevice&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_address</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Address&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The MAC address of this device.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;12:34:56:78:90:12&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_address</span><span class="p">)</span>
+
+        <span class="n">attr_mtu</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Mtu&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The Maximum Transmission Unit&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1500&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_mtu</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">mactx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTx&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source indicating a packet has arrived for transmission by this device&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactx</span><span class="p">)</span>
+
+        <span class="n">mactxdrop</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxDrop&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source indicating a packet has been dropped by the device before transmission&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxdrop</span><span class="p">)</span>
+
+        <span class="n">macpromiscrx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacPromiscRx&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been received by this device, has been passed up from the physical layer and is being forwarded up the local protocol stack.  This is a promiscuous trace,&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">macpromiscrx</span><span class="p">)</span>
+
+        <span class="n">macrx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacRx&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been received by this device, has been passed up from the physical layer and is being forwarded up the local protocol stack.  This is a non-promiscuous trace,&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">macrx</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3AlohaNoackNetDevice</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-aloha-noack-net-device-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/amrr_wifi_manager.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/amrr_wifi_manager.html
new file mode 100644 (file)
index 0000000..24d667c
--- /dev/null
@@ -0,0 +1,268 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.amrr_wifi_manager &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.amrr_wifi_manager</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3wifiremotestationmanager</span> <span class="kn">import</span> <span class="n">NS3BaseWifiRemoteStationManager</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3AmrrWifiManager"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.amrr_wifi_manager.NS3AmrrWifiManager">[docs]</a><span class="k">class</span> <span class="nc">NS3AmrrWifiManager</span><span class="p">(</span><span class="n">NS3BaseWifiRemoteStationManager</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::AmrrWifiManager&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_updateperiod</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;UpdatePeriod&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The interval between decisions about rate control changes&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+1000000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_updateperiod</span><span class="p">)</span>
+
+        <span class="n">attr_failureratio</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;FailureRatio&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Ratio of minimum erroneous transmissions needed to switch to a lower rate&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0.333333&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_failureratio</span><span class="p">)</span>
+
+        <span class="n">attr_successratio</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;SuccessRatio&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Ratio of maximum erroneous transmissions needed to switch to a higher rate&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0.1&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_successratio</span><span class="p">)</span>
+
+        <span class="n">attr_maxsuccessthreshold</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxSuccessThreshold&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Maximum number of consecutive success periods needed to switch to a higher rate&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;10&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxsuccessthreshold</span><span class="p">)</span>
+
+        <span class="n">attr_minsuccessthreshold</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MinSuccessThreshold&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Minimum number of consecutive success periods needed to switch to a higher rate&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_minsuccessthreshold</span><span class="p">)</span>
+
+        <span class="n">attr_islowlatency</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;IsLowLatency&quot;</span><span class="p">,</span>
+            <span class="s">&quot;If true, we attempt to modelize a so-called low-latency device: a device where decisions about tx parameters can be made on a per-packet basis and feedback about the transmission of each packet is obtained before sending the next. Otherwise, we modelize a  high-latency device, that is a device where we cannot update our decision about tx parameters after every packet transmission.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;True&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_islowlatency</span><span class="p">)</span>
+
+        <span class="n">attr_maxssrc</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxSsrc&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The maximum number of retransmission attempts for an RTS. This value will not have any effect on some rate control algorithms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;7&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxssrc</span><span class="p">)</span>
+
+        <span class="n">attr_maxslrc</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxSlrc&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The maximum number of retransmission attempts for a DATA packet. This value will not have any effect on some rate control algorithms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;7&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxslrc</span><span class="p">)</span>
+
+        <span class="n">attr_rtsctsthreshold</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;RtsCtsThreshold&quot;</span><span class="p">,</span>
+            <span class="s">&quot;If  the size of the data packet + LLC header + MAC header + FCS trailer is bigger than this value, we use an RTS/CTS handshake before sending the data, as per IEEE Std. 802.11-2012, Section 9.3.5. This value will not have any effect on some rate control algorithms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;2346&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_rtsctsthreshold</span><span class="p">)</span>
+
+        <span class="n">attr_fragmentationthreshold</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;FragmentationThreshold&quot;</span><span class="p">,</span>
+            <span class="s">&quot;If the size of the data packet + LLC header + MAC header + FCS trailer is biggerthan this value, we fragment it such that the size of the fragments are equal or smaller than this value, as per IEEE Std. 802.11-2012, Section 9.5. This value will not have any effect on some rate control algorithms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;2346&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_fragmentationthreshold</span><span class="p">)</span>
+
+        <span class="n">attr_nonunicastmode</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;NonUnicastMode&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Wifi mode used for non-unicast transmissions.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;Invalid-WifiMode&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_nonunicastmode</span><span class="p">)</span>
+
+        <span class="n">attr_defaulttxpowerlevel</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;DefaultTxPowerLevel&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Default power level to be used for transmissions. This is the power level that is used by all those WifiManagers that do notimplement TX power control.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_defaulttxpowerlevel</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">mactxrtsfailed</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxRtsFailed&quot;</span><span class="p">,</span> <span class="s">&quot;The transmission of a RTS by the MAC layer has failed&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxrtsfailed</span><span class="p">)</span>
+
+        <span class="n">mactxdatafailed</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxDataFailed&quot;</span><span class="p">,</span> <span class="s">&quot;The transmission of a data packet by the MAC layer has failed&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxdatafailed</span><span class="p">)</span>
+
+        <span class="n">mactxfinalrtsfailed</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxFinalRtsFailed&quot;</span><span class="p">,</span> <span class="s">&quot;The transmission of a RTS has exceeded the maximum number of attempts&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxfinalrtsfailed</span><span class="p">)</span>
+
+        <span class="n">mactxfinaldatafailed</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxFinalDataFailed&quot;</span><span class="p">,</span> <span class="s">&quot;The transmission of a data packet has exceeded the maximum number of attempts&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxfinaldatafailed</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3AmrrWifiManager</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-amrr-wifi-manager-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/ap_wifi_mac.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/ap_wifi_mac.html
new file mode 100644 (file)
index 0000000..745cddc
--- /dev/null
@@ -0,0 +1,340 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.ap_wifi_mac &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.ap_wifi_mac</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3wifimac</span> <span class="kn">import</span> <span class="n">NS3BaseWifiMac</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3ApWifiMac"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.ap_wifi_mac.NS3ApWifiMac">[docs]</a><span class="k">class</span> <span class="nc">NS3ApWifiMac</span><span class="p">(</span><span class="n">NS3BaseWifiMac</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::ApWifiMac&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_beaconinterval</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;BeaconInterval&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Delay between two beacons&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+102400000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_beaconinterval</span><span class="p">)</span>
+
+        <span class="n">attr_beaconjitter</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;BeaconJitter&quot;</span><span class="p">,</span>
+            <span class="s">&quot;A uniform random variable to cause the initial beacon starting time (after simulation time 0) to be distributed between 0 and the BeaconInterval.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ns3::UniformRandomVariable&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_beaconjitter</span><span class="p">)</span>
+
+        <span class="n">attr_enablebeaconjitter</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;EnableBeaconJitter&quot;</span><span class="p">,</span>
+            <span class="s">&quot;If beacons are enabled, whether to jitter the initial send event.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;False&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_enablebeaconjitter</span><span class="p">)</span>
+
+        <span class="n">attr_beacongeneration</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;BeaconGeneration&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Whether or not beacons are generated.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;True&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_beacongeneration</span><span class="p">)</span>
+
+        <span class="n">attr_qossupported</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;QosSupported&quot;</span><span class="p">,</span>
+            <span class="s">&quot;This Boolean attribute is set to enable 802.11e/WMM-style QoS support at this STA&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;False&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_qossupported</span><span class="p">)</span>
+
+        <span class="n">attr_htsupported</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;HtSupported&quot;</span><span class="p">,</span>
+            <span class="s">&quot;This Boolean attribute is set to enable 802.11n support at this STA&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;False&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_htsupported</span><span class="p">)</span>
+
+        <span class="n">attr_ctstoselfsupported</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;CtsToSelfSupported&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Use CTS to Self when using a rate that is not in the basic set rate&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;False&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_ctstoselfsupported</span><span class="p">)</span>
+
+        <span class="n">attr_ctstimeout</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;CtsTimeout&quot;</span><span class="p">,</span>
+            <span class="s">&quot;When this timeout expires, the RTS/CTS handshake has failed.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+75000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_ctstimeout</span><span class="p">)</span>
+
+        <span class="n">attr_acktimeout</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;AckTimeout&quot;</span><span class="p">,</span>
+            <span class="s">&quot;When this timeout expires, the DATA/ACK handshake has failed.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+75000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_acktimeout</span><span class="p">)</span>
+
+        <span class="n">attr_basicblockacktimeout</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;BasicBlockAckTimeout&quot;</span><span class="p">,</span>
+            <span class="s">&quot;When this timeout expires, the BASIC_BLOCK_ACK_REQ/BASIC_BLOCK_ACK handshake has failed.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+281000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_basicblockacktimeout</span><span class="p">)</span>
+
+        <span class="n">attr_compressedblockacktimeout</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;CompressedBlockAckTimeout&quot;</span><span class="p">,</span>
+            <span class="s">&quot;When this timeout expires, the COMPRESSED_BLOCK_ACK_REQ/COMPRESSED_BLOCK_ACK handshake has failed.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+107000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_compressedblockacktimeout</span><span class="p">)</span>
+
+        <span class="n">attr_sifs</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Sifs&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The value of the SIFS constant.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+16000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_sifs</span><span class="p">)</span>
+
+        <span class="n">attr_eifsnodifs</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;EifsNoDifs&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The value of EIFS-DIFS&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+60000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_eifsnodifs</span><span class="p">)</span>
+
+        <span class="n">attr_slot</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Slot&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The duration of a Slot.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+9000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_slot</span><span class="p">)</span>
+
+        <span class="n">attr_pifs</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Pifs&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The value of the PIFS constant.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+25000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_pifs</span><span class="p">)</span>
+
+        <span class="n">attr_rifs</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Rifs&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The value of the RIFS constant.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+2000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_rifs</span><span class="p">)</span>
+
+        <span class="n">attr_maxpropagationdelay</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxPropagationDelay&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The maximum propagation delay. Unused for now.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+3333.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxpropagationdelay</span><span class="p">)</span>
+
+        <span class="n">attr_ssid</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Ssid&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The ssid we want to belong to.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;default&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_ssid</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">txokheader</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;TxOkHeader&quot;</span><span class="p">,</span> <span class="s">&quot;The header of successfully transmitted packet&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">txokheader</span><span class="p">)</span>
+
+        <span class="n">txerrheader</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;TxErrHeader&quot;</span><span class="p">,</span> <span class="s">&quot;The header of unsuccessfully transmitted packet&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">txerrheader</span><span class="p">)</span>
+
+        <span class="n">mactx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTx&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been received from higher layers and is being processed in preparation for queueing for transmission.&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactx</span><span class="p">)</span>
+
+        <span class="n">mactxdrop</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxDrop&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been dropped in the MAC layer before being queued for transmission.&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxdrop</span><span class="p">)</span>
+
+        <span class="n">macpromiscrx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacPromiscRx&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been received by this device, has been passed up from the physical layer and is being forwarded up the local protocol stack.  This is a promiscuous trace,&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">macpromiscrx</span><span class="p">)</span>
+
+        <span class="n">macrx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacRx&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been received by this device, has been passed up from the physical layer and is being forwarded up the local protocol stack.  This is a non-promiscuous trace,&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">macrx</span><span class="p">)</span>
+
+        <span class="n">macrxdrop</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacRxDrop&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been dropped in the MAC layer after it has been passed up from the physical layer.&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">macrxdrop</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3ApWifiMac</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-ap-wifi-mac-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/arf_wifi_manager.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/arf_wifi_manager.html
new file mode 100644 (file)
index 0000000..7985d56
--- /dev/null
@@ -0,0 +1,238 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.arf_wifi_manager &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.arf_wifi_manager</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3wifiremotestationmanager</span> <span class="kn">import</span> <span class="n">NS3BaseWifiRemoteStationManager</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3ArfWifiManager"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.arf_wifi_manager.NS3ArfWifiManager">[docs]</a><span class="k">class</span> <span class="nc">NS3ArfWifiManager</span><span class="p">(</span><span class="n">NS3BaseWifiRemoteStationManager</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::ArfWifiManager&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_timerthreshold</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;TimerThreshold&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The </span><span class="se">\&#39;</span><span class="s">timer</span><span class="se">\&#39;</span><span class="s"> threshold in the ARF algorithm.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;15&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_timerthreshold</span><span class="p">)</span>
+
+        <span class="n">attr_successthreshold</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;SuccessThreshold&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The minimum number of sucessfull transmissions to try a new rate.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;10&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_successthreshold</span><span class="p">)</span>
+
+        <span class="n">attr_islowlatency</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;IsLowLatency&quot;</span><span class="p">,</span>
+            <span class="s">&quot;If true, we attempt to modelize a so-called low-latency device: a device where decisions about tx parameters can be made on a per-packet basis and feedback about the transmission of each packet is obtained before sending the next. Otherwise, we modelize a  high-latency device, that is a device where we cannot update our decision about tx parameters after every packet transmission.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;True&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_islowlatency</span><span class="p">)</span>
+
+        <span class="n">attr_maxssrc</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxSsrc&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The maximum number of retransmission attempts for an RTS. This value will not have any effect on some rate control algorithms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;7&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxssrc</span><span class="p">)</span>
+
+        <span class="n">attr_maxslrc</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxSlrc&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The maximum number of retransmission attempts for a DATA packet. This value will not have any effect on some rate control algorithms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;7&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxslrc</span><span class="p">)</span>
+
+        <span class="n">attr_rtsctsthreshold</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;RtsCtsThreshold&quot;</span><span class="p">,</span>
+            <span class="s">&quot;If  the size of the data packet + LLC header + MAC header + FCS trailer is bigger than this value, we use an RTS/CTS handshake before sending the data, as per IEEE Std. 802.11-2012, Section 9.3.5. This value will not have any effect on some rate control algorithms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;2346&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_rtsctsthreshold</span><span class="p">)</span>
+
+        <span class="n">attr_fragmentationthreshold</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;FragmentationThreshold&quot;</span><span class="p">,</span>
+            <span class="s">&quot;If the size of the data packet + LLC header + MAC header + FCS trailer is biggerthan this value, we fragment it such that the size of the fragments are equal or smaller than this value, as per IEEE Std. 802.11-2012, Section 9.5. This value will not have any effect on some rate control algorithms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;2346&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_fragmentationthreshold</span><span class="p">)</span>
+
+        <span class="n">attr_nonunicastmode</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;NonUnicastMode&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Wifi mode used for non-unicast transmissions.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;Invalid-WifiMode&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_nonunicastmode</span><span class="p">)</span>
+
+        <span class="n">attr_defaulttxpowerlevel</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;DefaultTxPowerLevel&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Default power level to be used for transmissions. This is the power level that is used by all those WifiManagers that do notimplement TX power control.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_defaulttxpowerlevel</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">mactxrtsfailed</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxRtsFailed&quot;</span><span class="p">,</span> <span class="s">&quot;The transmission of a RTS by the MAC layer has failed&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxrtsfailed</span><span class="p">)</span>
+
+        <span class="n">mactxdatafailed</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxDataFailed&quot;</span><span class="p">,</span> <span class="s">&quot;The transmission of a data packet by the MAC layer has failed&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxdatafailed</span><span class="p">)</span>
+
+        <span class="n">mactxfinalrtsfailed</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxFinalRtsFailed&quot;</span><span class="p">,</span> <span class="s">&quot;The transmission of a RTS has exceeded the maximum number of attempts&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxfinalrtsfailed</span><span class="p">)</span>
+
+        <span class="n">mactxfinaldatafailed</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxFinalDataFailed&quot;</span><span class="p">,</span> <span class="s">&quot;The transmission of a data packet has exceeded the maximum number of attempts&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxfinaldatafailed</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3ArfWifiManager</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-arf-wifi-manager-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/arp_l3protocol.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/arp_l3protocol.html
new file mode 100644 (file)
index 0000000..7eb70fe
--- /dev/null
@@ -0,0 +1,146 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.arp_l3protocol &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.arp_l3protocol</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3arpl3protocol</span> <span class="kn">import</span> <span class="n">NS3BaseArpL3Protocol</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3ArpL3Protocol"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.arp_l3protocol.NS3ArpL3Protocol">[docs]</a><span class="k">class</span> <span class="nc">NS3ArpL3Protocol</span><span class="p">(</span><span class="n">NS3BaseArpL3Protocol</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::ArpL3Protocol&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_requestjitter</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;RequestJitter&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The jitter in ms a node is allowed to wait before sending an ARP request. Some jitter aims to prevent collisions. By default, the model will wait for a duration in ms defined by a uniform random-variable between 0 and RequestJitter&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ns3::UniformRandomVariable[Min=0.0|Max=10.0]&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_requestjitter</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">drop</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;Drop&quot;</span><span class="p">,</span> <span class="s">&quot;Packet dropped because not enough room in pending queue for a specific cache entry.&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">drop</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3ArpL3Protocol</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-arp-l3protocol-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/base_station_net_device.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/base_station_net_device.html
new file mode 100644 (file)
index 0000000..72e712c
--- /dev/null
@@ -0,0 +1,260 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.base_station_net_device &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.base_station_net_device</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3netdevice</span> <span class="kn">import</span> <span class="n">NS3BaseNetDevice</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3BaseStationNetDevice"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.base_station_net_device.NS3BaseStationNetDevice">[docs]</a><span class="k">class</span> <span class="nc">NS3BaseStationNetDevice</span><span class="p">(</span><span class="n">NS3BaseNetDevice</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::BaseStationNetDevice&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_initialranginterval</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;InitialRangInterval&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Time between Initial Ranging regions assigned by the BS. Maximum is 2s&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+50000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_initialranginterval</span><span class="p">)</span>
+
+        <span class="n">attr_dcdinterval</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;DcdInterval&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Time between transmission of DCD messages. Maximum value is 10s.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+3000000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_dcdinterval</span><span class="p">)</span>
+
+        <span class="n">attr_ucdinterval</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;UcdInterval&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Time between transmission of UCD messages. Maximum value is 10s.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+3000000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_ucdinterval</span><span class="p">)</span>
+
+        <span class="n">attr_intervalt8</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;IntervalT8&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Wait for DSA/DSC Acknowledge timeout. Maximum 300ms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+50000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_intervalt8</span><span class="p">)</span>
+
+        <span class="n">attr_rangreqoppsize</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;RangReqOppSize&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The ranging opportunity size in symbols&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;8&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_rangreqoppsize</span><span class="p">)</span>
+
+        <span class="n">attr_bwreqoppsize</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;BwReqOppSize&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The bandwidth request opportunity size in symbols&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;2&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_bwreqoppsize</span><span class="p">)</span>
+
+        <span class="n">attr_maxrangcorrectionretries</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxRangCorrectionRetries&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Number of retries on contention Ranging Requests&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;16&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxrangcorrectionretries</span><span class="p">)</span>
+
+        <span class="n">attr_mtu</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Mtu&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The MAC-level Maximum Transmission Unit&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1400&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_mtu</span><span class="p">)</span>
+
+        <span class="n">attr_rtg</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;RTG&quot;</span><span class="p">,</span>
+            <span class="s">&quot;receive/transmit transition gap.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_rtg</span><span class="p">)</span>
+
+        <span class="n">attr_ttg</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;TTG&quot;</span><span class="p">,</span>
+            <span class="s">&quot;transmit/receive transition gap.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_ttg</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">bstx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;BSTx&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been received from higher layers and is being processed in preparation for queueing for transmission.&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">bstx</span><span class="p">)</span>
+
+        <span class="n">bstxdrop</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;BSTxDrop&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been dropped in the MAC layer before being queued for transmission.&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">bstxdrop</span><span class="p">)</span>
+
+        <span class="n">bspromiscrx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;BSPromiscRx&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been received by this device, has been passed up from the physical layer and is being forwarded up the local protocol stack.  This is a promiscuous trace,&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">bspromiscrx</span><span class="p">)</span>
+
+        <span class="n">bsrx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;BSRx&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been received by this device, has been passed up from the physical layer and is being forwarded up the local protocol stack.  This is a non-promiscuous trace,&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">bsrx</span><span class="p">)</span>
+
+        <span class="n">bsrxdrop</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;BSRxDrop&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been dropped in the MAC layer after it has been passed up from the physical layer.&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">bsrxdrop</span><span class="p">)</span>
+
+        <span class="n">rx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;Rx&quot;</span><span class="p">,</span> <span class="s">&quot;Receive trace&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">rx</span><span class="p">)</span>
+
+        <span class="n">tx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;Tx&quot;</span><span class="p">,</span> <span class="s">&quot;Transmit trace&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">tx</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3BaseStationNetDevice</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-base-station-net-device-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/binary_error_model.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/binary_error_model.html
new file mode 100644 (file)
index 0000000..3c6de28
--- /dev/null
@@ -0,0 +1,141 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.binary_error_model &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.binary_error_model</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3errormodel</span> <span class="kn">import</span> <span class="n">NS3BaseErrorModel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3BinaryErrorModel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.binary_error_model.NS3BinaryErrorModel">[docs]</a><span class="k">class</span> <span class="nc">NS3BinaryErrorModel</span><span class="p">(</span><span class="n">NS3BaseErrorModel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::BinaryErrorModel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_isenabled</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;IsEnabled&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Whether this ErrorModel is enabled or not.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;True&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_isenabled</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3BinaryErrorModel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-binary-error-model-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/binary_error_sixlow_model.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/binary_error_sixlow_model.html
new file mode 100644 (file)
index 0000000..c31a7e7
--- /dev/null
@@ -0,0 +1,141 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.binary_error_sixlow_model &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.binary_error_sixlow_model</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3errormodel</span> <span class="kn">import</span> <span class="n">NS3BaseErrorModel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3BinaryErrorSixlowModel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.binary_error_sixlow_model.NS3BinaryErrorSixlowModel">[docs]</a><span class="k">class</span> <span class="nc">NS3BinaryErrorSixlowModel</span><span class="p">(</span><span class="n">NS3BaseErrorModel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::BinaryErrorSixlowModel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_isenabled</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;IsEnabled&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Whether this ErrorModel is enabled or not.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;True&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_isenabled</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3BinaryErrorSixlowModel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-binary-error-sixlow-model-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/bridge_channel.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/bridge_channel.html
new file mode 100644 (file)
index 0000000..0477b2f
--- /dev/null
@@ -0,0 +1,141 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.bridge_channel &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.bridge_channel</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3channel</span> <span class="kn">import</span> <span class="n">NS3BaseChannel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3BridgeChannel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.bridge_channel.NS3BridgeChannel">[docs]</a><span class="k">class</span> <span class="nc">NS3BridgeChannel</span><span class="p">(</span><span class="n">NS3BaseChannel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::BridgeChannel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_id</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Id&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The id (unique integer) of this Channel.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">NoWrite</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_id</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3BridgeChannel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-bridge-channel-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/bridge_net_device.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/bridge_net_device.html
new file mode 100644 (file)
index 0000000..ad5f76f
--- /dev/null
@@ -0,0 +1,161 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.bridge_net_device &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.bridge_net_device</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3netdevice</span> <span class="kn">import</span> <span class="n">NS3BaseNetDevice</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3BridgeNetDevice"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.bridge_net_device.NS3BridgeNetDevice">[docs]</a><span class="k">class</span> <span class="nc">NS3BridgeNetDevice</span><span class="p">(</span><span class="n">NS3BaseNetDevice</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::BridgeNetDevice&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_mtu</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Mtu&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The MAC-level Maximum Transmission Unit&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1500&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_mtu</span><span class="p">)</span>
+
+        <span class="n">attr_enablelearning</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;EnableLearning&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Enable the learning mode of the Learning Bridge&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;True&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_enablelearning</span><span class="p">)</span>
+
+        <span class="n">attr_expirationtime</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ExpirationTime&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Time it takes for learned MAC state entry to expire.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+300000000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_expirationtime</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3BridgeNetDevice</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-bridge-net-device-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/bulk_send_application.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/bulk_send_application.html
new file mode 100644 (file)
index 0000000..ecefa44
--- /dev/null
@@ -0,0 +1,196 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.bulk_send_application &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.bulk_send_application</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3application</span> <span class="kn">import</span> <span class="n">NS3BaseApplication</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3BulkSendApplication"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.bulk_send_application.NS3BulkSendApplication">[docs]</a><span class="k">class</span> <span class="nc">NS3BulkSendApplication</span><span class="p">(</span><span class="n">NS3BaseApplication</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::BulkSendApplication&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_sendsize</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;SendSize&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The amount of data to send each time.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;512&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_sendsize</span><span class="p">)</span>
+
+        <span class="n">attr_remote</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Remote&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The address of the destination&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;00-00-00&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_remote</span><span class="p">)</span>
+
+        <span class="n">attr_maxbytes</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxBytes&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The total number of bytes to send. Once these bytes are sent, no data  is sent again. The value zero means that there is no limit.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxbytes</span><span class="p">)</span>
+
+        <span class="n">attr_protocol</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Protocol&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The type of protocol to use.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ns3::TcpSocketFactory&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_protocol</span><span class="p">)</span>
+
+        <span class="n">attr_starttime</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;StartTime&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Time at which the application will start&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+0.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_starttime</span><span class="p">)</span>
+
+        <span class="n">attr_stoptime</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;StopTime&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Time at which the application will stop&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+0.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_stoptime</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">tx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;Tx&quot;</span><span class="p">,</span> <span class="s">&quot;A new packet is created and is sent&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">tx</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3BulkSendApplication</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-bulk-send-application-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/burst_error_model.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/burst_error_model.html
new file mode 100644 (file)
index 0000000..a26a704
--- /dev/null
@@ -0,0 +1,171 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.burst_error_model &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.burst_error_model</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3errormodel</span> <span class="kn">import</span> <span class="n">NS3BaseErrorModel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3BurstErrorModel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.burst_error_model.NS3BurstErrorModel">[docs]</a><span class="k">class</span> <span class="nc">NS3BurstErrorModel</span><span class="p">(</span><span class="n">NS3BaseErrorModel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::BurstErrorModel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_errorrate</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ErrorRate&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The burst error event.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_errorrate</span><span class="p">)</span>
+
+        <span class="n">attr_burststart</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;BurstStart&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The decision variable attached to this error model.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ns3::UniformRandomVariable[Min=0.0|Max=1.0]&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_burststart</span><span class="p">)</span>
+
+        <span class="n">attr_burstsize</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;BurstSize&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The number of packets being corrupted at one drop.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ns3::UniformRandomVariable[Min=1|Max=4]&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_burstsize</span><span class="p">)</span>
+
+        <span class="n">attr_isenabled</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;IsEnabled&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Whether this ErrorModel is enabled or not.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;True&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_isenabled</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3BurstErrorModel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-burst-error-model-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/cara_wifi_manager.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/cara_wifi_manager.html
new file mode 100644 (file)
index 0000000..36191fd
--- /dev/null
@@ -0,0 +1,258 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.cara_wifi_manager &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.cara_wifi_manager</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3wifiremotestationmanager</span> <span class="kn">import</span> <span class="n">NS3BaseWifiRemoteStationManager</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3CaraWifiManager"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.cara_wifi_manager.NS3CaraWifiManager">[docs]</a><span class="k">class</span> <span class="nc">NS3CaraWifiManager</span><span class="p">(</span><span class="n">NS3BaseWifiRemoteStationManager</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::CaraWifiManager&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_probethreshold</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ProbeThreshold&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The number of consecutive transmissions failure to activate the RTS probe.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_probethreshold</span><span class="p">)</span>
+
+        <span class="n">attr_failurethreshold</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;FailureThreshold&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The number of consecutive transmissions failure to decrease the rate.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;2&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_failurethreshold</span><span class="p">)</span>
+
+        <span class="n">attr_successthreshold</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;SuccessThreshold&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The minimum number of sucessfull transmissions to try a new rate.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;10&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_successthreshold</span><span class="p">)</span>
+
+        <span class="n">attr_timeout</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Timeout&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The </span><span class="se">\&#39;</span><span class="s">timer</span><span class="se">\&#39;</span><span class="s"> in the CARA algorithm&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;15&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_timeout</span><span class="p">)</span>
+
+        <span class="n">attr_islowlatency</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;IsLowLatency&quot;</span><span class="p">,</span>
+            <span class="s">&quot;If true, we attempt to modelize a so-called low-latency device: a device where decisions about tx parameters can be made on a per-packet basis and feedback about the transmission of each packet is obtained before sending the next. Otherwise, we modelize a  high-latency device, that is a device where we cannot update our decision about tx parameters after every packet transmission.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;True&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_islowlatency</span><span class="p">)</span>
+
+        <span class="n">attr_maxssrc</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxSsrc&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The maximum number of retransmission attempts for an RTS. This value will not have any effect on some rate control algorithms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;7&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxssrc</span><span class="p">)</span>
+
+        <span class="n">attr_maxslrc</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxSlrc&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The maximum number of retransmission attempts for a DATA packet. This value will not have any effect on some rate control algorithms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;7&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxslrc</span><span class="p">)</span>
+
+        <span class="n">attr_rtsctsthreshold</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;RtsCtsThreshold&quot;</span><span class="p">,</span>
+            <span class="s">&quot;If  the size of the data packet + LLC header + MAC header + FCS trailer is bigger than this value, we use an RTS/CTS handshake before sending the data, as per IEEE Std. 802.11-2012, Section 9.3.5. This value will not have any effect on some rate control algorithms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;2346&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_rtsctsthreshold</span><span class="p">)</span>
+
+        <span class="n">attr_fragmentationthreshold</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;FragmentationThreshold&quot;</span><span class="p">,</span>
+            <span class="s">&quot;If the size of the data packet + LLC header + MAC header + FCS trailer is biggerthan this value, we fragment it such that the size of the fragments are equal or smaller than this value, as per IEEE Std. 802.11-2012, Section 9.5. This value will not have any effect on some rate control algorithms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;2346&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_fragmentationthreshold</span><span class="p">)</span>
+
+        <span class="n">attr_nonunicastmode</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;NonUnicastMode&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Wifi mode used for non-unicast transmissions.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;Invalid-WifiMode&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_nonunicastmode</span><span class="p">)</span>
+
+        <span class="n">attr_defaulttxpowerlevel</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;DefaultTxPowerLevel&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Default power level to be used for transmissions. This is the power level that is used by all those WifiManagers that do notimplement TX power control.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_defaulttxpowerlevel</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">mactxrtsfailed</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxRtsFailed&quot;</span><span class="p">,</span> <span class="s">&quot;The transmission of a RTS by the MAC layer has failed&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxrtsfailed</span><span class="p">)</span>
+
+        <span class="n">mactxdatafailed</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxDataFailed&quot;</span><span class="p">,</span> <span class="s">&quot;The transmission of a data packet by the MAC layer has failed&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxdatafailed</span><span class="p">)</span>
+
+        <span class="n">mactxfinalrtsfailed</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxFinalRtsFailed&quot;</span><span class="p">,</span> <span class="s">&quot;The transmission of a RTS has exceeded the maximum number of attempts&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxfinalrtsfailed</span><span class="p">)</span>
+
+        <span class="n">mactxfinaldatafailed</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxFinalDataFailed&quot;</span><span class="p">,</span> <span class="s">&quot;The transmission of a data packet has exceeded the maximum number of attempts&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxfinaldatafailed</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3CaraWifiManager</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-cara-wifi-manager-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/constant_acceleration_mobility_model.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/constant_acceleration_mobility_model.html
new file mode 100644 (file)
index 0000000..409cdba
--- /dev/null
@@ -0,0 +1,156 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.constant_acceleration_mobility_model &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.constant_acceleration_mobility_model</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3mobilitymodel</span> <span class="kn">import</span> <span class="n">NS3BaseMobilityModel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3ConstantAccelerationMobilityModel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.constant_acceleration_mobility_model.NS3ConstantAccelerationMobilityModel">[docs]</a><span class="k">class</span> <span class="nc">NS3ConstantAccelerationMobilityModel</span><span class="p">(</span><span class="n">NS3BaseMobilityModel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::ConstantAccelerationMobilityModel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_position</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Position&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The current position of the mobility model.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0:0:0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_position</span><span class="p">)</span>
+
+        <span class="n">attr_velocity</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Velocity&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The current velocity of the mobility model.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0:0:0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">NoWrite</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_velocity</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">coursechange</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;CourseChange&quot;</span><span class="p">,</span> <span class="s">&quot;The value of the position and/or velocity vector changed&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">coursechange</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3ConstantAccelerationMobilityModel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-constant-acceleration-mobility-model-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/constant_position_mobility_model.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/constant_position_mobility_model.html
new file mode 100644 (file)
index 0000000..b45b8b9
--- /dev/null
@@ -0,0 +1,156 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.constant_position_mobility_model &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.constant_position_mobility_model</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3mobilitymodel</span> <span class="kn">import</span> <span class="n">NS3BaseMobilityModel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3ConstantPositionMobilityModel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.constant_position_mobility_model.NS3ConstantPositionMobilityModel">[docs]</a><span class="k">class</span> <span class="nc">NS3ConstantPositionMobilityModel</span><span class="p">(</span><span class="n">NS3BaseMobilityModel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::ConstantPositionMobilityModel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_position</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Position&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The current position of the mobility model.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0:0:0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_position</span><span class="p">)</span>
+
+        <span class="n">attr_velocity</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Velocity&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The current velocity of the mobility model.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0:0:0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">NoWrite</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_velocity</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">coursechange</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;CourseChange&quot;</span><span class="p">,</span> <span class="s">&quot;The value of the position and/or velocity vector changed&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">coursechange</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3ConstantPositionMobilityModel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-constant-position-mobility-model-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/constant_rate_wifi_manager.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/constant_rate_wifi_manager.html
new file mode 100644 (file)
index 0000000..5fd3978
--- /dev/null
@@ -0,0 +1,238 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.constant_rate_wifi_manager &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.constant_rate_wifi_manager</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3wifiremotestationmanager</span> <span class="kn">import</span> <span class="n">NS3BaseWifiRemoteStationManager</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3ConstantRateWifiManager"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.constant_rate_wifi_manager.NS3ConstantRateWifiManager">[docs]</a><span class="k">class</span> <span class="nc">NS3ConstantRateWifiManager</span><span class="p">(</span><span class="n">NS3BaseWifiRemoteStationManager</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::ConstantRateWifiManager&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_datamode</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;DataMode&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The transmission mode to use for every data packet transmission&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;OfdmRate6Mbps&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_datamode</span><span class="p">)</span>
+
+        <span class="n">attr_controlmode</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ControlMode&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The transmission mode to use for every control packet transmission.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;OfdmRate6Mbps&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_controlmode</span><span class="p">)</span>
+
+        <span class="n">attr_islowlatency</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;IsLowLatency&quot;</span><span class="p">,</span>
+            <span class="s">&quot;If true, we attempt to modelize a so-called low-latency device: a device where decisions about tx parameters can be made on a per-packet basis and feedback about the transmission of each packet is obtained before sending the next. Otherwise, we modelize a  high-latency device, that is a device where we cannot update our decision about tx parameters after every packet transmission.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;True&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_islowlatency</span><span class="p">)</span>
+
+        <span class="n">attr_maxssrc</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxSsrc&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The maximum number of retransmission attempts for an RTS. This value will not have any effect on some rate control algorithms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;7&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxssrc</span><span class="p">)</span>
+
+        <span class="n">attr_maxslrc</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxSlrc&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The maximum number of retransmission attempts for a DATA packet. This value will not have any effect on some rate control algorithms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;7&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxslrc</span><span class="p">)</span>
+
+        <span class="n">attr_rtsctsthreshold</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;RtsCtsThreshold&quot;</span><span class="p">,</span>
+            <span class="s">&quot;If  the size of the data packet + LLC header + MAC header + FCS trailer is bigger than this value, we use an RTS/CTS handshake before sending the data, as per IEEE Std. 802.11-2012, Section 9.3.5. This value will not have any effect on some rate control algorithms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;2346&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_rtsctsthreshold</span><span class="p">)</span>
+
+        <span class="n">attr_fragmentationthreshold</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;FragmentationThreshold&quot;</span><span class="p">,</span>
+            <span class="s">&quot;If the size of the data packet + LLC header + MAC header + FCS trailer is biggerthan this value, we fragment it such that the size of the fragments are equal or smaller than this value, as per IEEE Std. 802.11-2012, Section 9.5. This value will not have any effect on some rate control algorithms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;2346&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_fragmentationthreshold</span><span class="p">)</span>
+
+        <span class="n">attr_nonunicastmode</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;NonUnicastMode&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Wifi mode used for non-unicast transmissions.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;Invalid-WifiMode&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_nonunicastmode</span><span class="p">)</span>
+
+        <span class="n">attr_defaulttxpowerlevel</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;DefaultTxPowerLevel&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Default power level to be used for transmissions. This is the power level that is used by all those WifiManagers that do notimplement TX power control.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_defaulttxpowerlevel</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">mactxrtsfailed</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxRtsFailed&quot;</span><span class="p">,</span> <span class="s">&quot;The transmission of a RTS by the MAC layer has failed&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxrtsfailed</span><span class="p">)</span>
+
+        <span class="n">mactxdatafailed</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxDataFailed&quot;</span><span class="p">,</span> <span class="s">&quot;The transmission of a data packet by the MAC layer has failed&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxdatafailed</span><span class="p">)</span>
+
+        <span class="n">mactxfinalrtsfailed</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxFinalRtsFailed&quot;</span><span class="p">,</span> <span class="s">&quot;The transmission of a RTS has exceeded the maximum number of attempts&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxfinalrtsfailed</span><span class="p">)</span>
+
+        <span class="n">mactxfinaldatafailed</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxFinalDataFailed&quot;</span><span class="p">,</span> <span class="s">&quot;The transmission of a data packet has exceeded the maximum number of attempts&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxfinaldatafailed</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3ConstantRateWifiManager</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-constant-rate-wifi-manager-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/constant_speed_propagation_delay_model.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/constant_speed_propagation_delay_model.html
new file mode 100644 (file)
index 0000000..a2c6d18
--- /dev/null
@@ -0,0 +1,141 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.constant_speed_propagation_delay_model &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.constant_speed_propagation_delay_model</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3propagationdelaymodel</span> <span class="kn">import</span> <span class="n">NS3BasePropagationDelayModel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3ConstantSpeedPropagationDelayModel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.constant_speed_propagation_delay_model.NS3ConstantSpeedPropagationDelayModel">[docs]</a><span class="k">class</span> <span class="nc">NS3ConstantSpeedPropagationDelayModel</span><span class="p">(</span><span class="n">NS3BasePropagationDelayModel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::ConstantSpeedPropagationDelayModel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_speed</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Speed&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The speed (m/s)&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;3e+08&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_speed</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3ConstantSpeedPropagationDelayModel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-constant-speed-propagation-delay-model-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/constant_velocity_mobility_model.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/constant_velocity_mobility_model.html
new file mode 100644 (file)
index 0000000..45650da
--- /dev/null
@@ -0,0 +1,156 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.constant_velocity_mobility_model &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.constant_velocity_mobility_model</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3mobilitymodel</span> <span class="kn">import</span> <span class="n">NS3BaseMobilityModel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3ConstantVelocityMobilityModel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.constant_velocity_mobility_model.NS3ConstantVelocityMobilityModel">[docs]</a><span class="k">class</span> <span class="nc">NS3ConstantVelocityMobilityModel</span><span class="p">(</span><span class="n">NS3BaseMobilityModel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::ConstantVelocityMobilityModel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_position</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Position&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The current position of the mobility model.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0:0:0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_position</span><span class="p">)</span>
+
+        <span class="n">attr_velocity</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Velocity&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The current velocity of the mobility model.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0:0:0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">NoWrite</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_velocity</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">coursechange</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;CourseChange&quot;</span><span class="p">,</span> <span class="s">&quot;The value of the position and/or velocity vector changed&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">coursechange</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3ConstantVelocityMobilityModel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-constant-velocity-mobility-model-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/cost231propagation_loss_model.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/cost231propagation_loss_model.html
new file mode 100644 (file)
index 0000000..c4c78c5
--- /dev/null
@@ -0,0 +1,181 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.cost231propagation_loss_model &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.cost231propagation_loss_model</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3propagationlossmodel</span> <span class="kn">import</span> <span class="n">NS3BasePropagationLossModel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3Cost231PropagationLossModel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.cost231propagation_loss_model.NS3Cost231PropagationLossModel">[docs]</a><span class="k">class</span> <span class="nc">NS3Cost231PropagationLossModel</span><span class="p">(</span><span class="n">NS3BasePropagationLossModel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::Cost231PropagationLossModel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_lambda</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Lambda&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The wavelength  (default is 2.3 GHz at 300 000 km/s).&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0.130435&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_lambda</span><span class="p">)</span>
+
+        <span class="n">attr_frequency</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Frequency&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The Frequency  (default is 2.3 GHz).&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;2.3e+09&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_frequency</span><span class="p">)</span>
+
+        <span class="n">attr_bsantennaheight</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;BSAntennaHeight&quot;</span><span class="p">,</span>
+            <span class="s">&quot; BS Antenna Height (default is 50m).&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;50&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_bsantennaheight</span><span class="p">)</span>
+
+        <span class="n">attr_ssantennaheight</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;SSAntennaHeight&quot;</span><span class="p">,</span>
+            <span class="s">&quot; SS Antenna Height (default is 3m).&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;3&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_ssantennaheight</span><span class="p">)</span>
+
+        <span class="n">attr_mindistance</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MinDistance&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The distance under which the propagation model refuses to give results (m) &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0.5&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_mindistance</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3Cost231PropagationLossModel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-cost231propagation-loss-model-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/csma_channel.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/csma_channel.html
new file mode 100644 (file)
index 0000000..9f64900
--- /dev/null
@@ -0,0 +1,161 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.csma_channel &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.csma_channel</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3channel</span> <span class="kn">import</span> <span class="n">NS3BaseChannel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3CsmaChannel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.csma_channel.NS3CsmaChannel">[docs]</a><span class="k">class</span> <span class="nc">NS3CsmaChannel</span><span class="p">(</span><span class="n">NS3BaseChannel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::CsmaChannel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_datarate</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;DataRate&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The transmission data rate to be provided to devices connected to the channel&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;4294967295bps&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_datarate</span><span class="p">)</span>
+
+        <span class="n">attr_delay</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Delay&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Transmission delay through the channel&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+0.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_delay</span><span class="p">)</span>
+
+        <span class="n">attr_id</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Id&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The id (unique integer) of this Channel.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">NoWrite</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_id</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3CsmaChannel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-csma-channel-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/csma_net_device.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/csma_net_device.html
new file mode 100644 (file)
index 0000000..5670af2
--- /dev/null
@@ -0,0 +1,220 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.csma_net_device &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.csma_net_device</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3netdevice</span> <span class="kn">import</span> <span class="n">NS3BaseNetDevice</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3CsmaNetDevice"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.csma_net_device.NS3CsmaNetDevice">[docs]</a><span class="k">class</span> <span class="nc">NS3CsmaNetDevice</span><span class="p">(</span><span class="n">NS3BaseNetDevice</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::CsmaNetDevice&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_address</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Address&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The MAC address of this device.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ff:ff:ff:ff:ff:ff&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_address</span><span class="p">)</span>
+
+        <span class="n">attr_mtu</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Mtu&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The MAC-level Maximum Transmission Unit&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1500&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_mtu</span><span class="p">)</span>
+
+        <span class="n">attr_sendenable</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;SendEnable&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Enable or disable the transmitter section of the device.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;True&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_sendenable</span><span class="p">)</span>
+
+        <span class="n">attr_receiveenable</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ReceiveEnable&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Enable or disable the receiver section of the device.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;True&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_receiveenable</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">mactx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTx&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source indicating a packet has arrived for transmission by this device&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactx</span><span class="p">)</span>
+
+        <span class="n">mactxdrop</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxDrop&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source indicating a packet has been dropped by the device before transmission&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxdrop</span><span class="p">)</span>
+
+        <span class="n">macpromiscrx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacPromiscRx&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been received by this device, has been passed up from the physical layer and is being forwarded up the local protocol stack.  This is a promiscuous trace,&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">macpromiscrx</span><span class="p">)</span>
+
+        <span class="n">macrx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacRx&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been received by this device, has been passed up from the physical layer and is being forwarded up the local protocol stack.  This is a non-promiscuous trace,&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">macrx</span><span class="p">)</span>
+
+        <span class="n">mactxbackoff</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxBackoff&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source indicating a packet has been delayed by the CSMA backoff process&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxbackoff</span><span class="p">)</span>
+
+        <span class="n">phytxbegin</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;PhyTxBegin&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source indicating a packet has begun transmitting over the channel&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">phytxbegin</span><span class="p">)</span>
+
+        <span class="n">phytxend</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;PhyTxEnd&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source indicating a packet has been completely transmitted over the channel&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">phytxend</span><span class="p">)</span>
+
+        <span class="n">phytxdrop</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;PhyTxDrop&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source indicating a packet has been dropped by the device during transmission&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">phytxdrop</span><span class="p">)</span>
+
+        <span class="n">phyrxend</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;PhyRxEnd&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source indicating a packet has been completely received by the device&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">phyrxend</span><span class="p">)</span>
+
+        <span class="n">phyrxdrop</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;PhyRxDrop&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source indicating a packet has been dropped by the device during reception&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">phyrxdrop</span><span class="p">)</span>
+
+        <span class="n">sniffer</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;Sniffer&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source simulating a non-promiscuous packet sniffer attached to the device&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">sniffer</span><span class="p">)</span>
+
+        <span class="n">promiscsniffer</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;PromiscSniffer&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source simulating a promiscuous packet sniffer attached to the device&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">promiscsniffer</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3CsmaNetDevice</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-csma-net-device-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/drop_tail_queue.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/drop_tail_queue.html
new file mode 100644 (file)
index 0000000..bad4da1
--- /dev/null
@@ -0,0 +1,164 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.drop_tail_queue &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.drop_tail_queue</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3queue</span> <span class="kn">import</span> <span class="n">NS3BaseQueue</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3DropTailQueue"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.drop_tail_queue.NS3DropTailQueue">[docs]</a><span class="k">class</span> <span class="nc">NS3DropTailQueue</span><span class="p">(</span><span class="n">NS3BaseQueue</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::DropTailQueue&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_maxpackets</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxPackets&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The maximum number of packets accepted by this DropTailQueue.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;100&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxpackets</span><span class="p">)</span>
+
+        <span class="n">attr_maxbytes</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxBytes&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The maximum number of bytes accepted by this DropTailQueue.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;6553500&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxbytes</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">enqueue</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;Enqueue&quot;</span><span class="p">,</span> <span class="s">&quot;Enqueue a packet in the queue.&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">enqueue</span><span class="p">)</span>
+
+        <span class="n">dequeue</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;Dequeue&quot;</span><span class="p">,</span> <span class="s">&quot;Dequeue a packet from the queue.&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">dequeue</span><span class="p">)</span>
+
+        <span class="n">drop</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;Drop&quot;</span><span class="p">,</span> <span class="s">&quot;Drop a packet stored in the queue.&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">drop</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3DropTailQueue</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-drop-tail-queue-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/dsrdsr_routing.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/dsrdsr_routing.html
new file mode 100644 (file)
index 0000000..624d037
--- /dev/null
@@ -0,0 +1,540 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.dsrdsr_routing &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.dsrdsr_routing</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3base</span> <span class="kn">import</span> <span class="n">NS3Base</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3dsrDsrRouting"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.dsrdsr_routing.NS3dsrDsrRouting">[docs]</a><span class="k">class</span> <span class="nc">NS3dsrDsrRouting</span><span class="p">(</span><span class="n">NS3Base</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::dsr::DsrRouting&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_maxsendbufflen</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxSendBuffLen&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Maximum number of packets that can be stored in send buffer.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;64&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxsendbufflen</span><span class="p">)</span>
+
+        <span class="n">attr_maxsendbufftime</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxSendBuffTime&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Maximum time packets can be queued in the send buffer .&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+30000000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxsendbufftime</span><span class="p">)</span>
+
+        <span class="n">attr_maxmaintlen</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxMaintLen&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Maximum number of packets that can be stored in maintenance buffer.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;50&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxmaintlen</span><span class="p">)</span>
+
+        <span class="n">attr_maxmainttime</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxMaintTime&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Maximum time packets can be queued in maintenance buffer.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+30000000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxmainttime</span><span class="p">)</span>
+
+        <span class="n">attr_maxcachelen</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxCacheLen&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Maximum number of route entries that can be stored in route cache.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;64&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxcachelen</span><span class="p">)</span>
+
+        <span class="n">attr_routecachetimeout</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;RouteCacheTimeout&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Maximum time the route cache can be queued in route cache.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+300000000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_routecachetimeout</span><span class="p">)</span>
+
+        <span class="n">attr_maxentrieseachdst</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxEntriesEachDst&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Maximum number of route entries for a single destination to respond.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;20&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxentrieseachdst</span><span class="p">)</span>
+
+        <span class="n">attr_sendbuffinterval</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;SendBuffInterval&quot;</span><span class="p">,</span>
+            <span class="s">&quot;How often to check send buffer for packet with route.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+500000000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_sendbuffinterval</span><span class="p">)</span>
+
+        <span class="n">attr_nodetraversaltime</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;NodeTraversalTime&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The time it takes to traverse two neighboring nodes.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+40000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_nodetraversaltime</span><span class="p">)</span>
+
+        <span class="n">attr_rreqretries</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;RreqRetries&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Maximum number of retransmissions for request discovery of a route.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;16&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_rreqretries</span><span class="p">)</span>
+
+        <span class="n">attr_maintenanceretries</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaintenanceRetries&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Maximum number of retransmissions for data packets from maintenance buffer.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;2&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maintenanceretries</span><span class="p">)</span>
+
+        <span class="n">attr_requesttablesize</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;RequestTableSize&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Maximum number of request entries in the request table, set this as the number of nodes in the simulation.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;64&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_requesttablesize</span><span class="p">)</span>
+
+        <span class="n">attr_requestidsize</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;RequestIdSize&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Maximum number of request source Ids in the request table.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;16&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_requestidsize</span><span class="p">)</span>
+
+        <span class="n">attr_uniquerequestidsize</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;UniqueRequestIdSize&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Maximum number of request Ids in the request table for a single destination.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;256&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_uniquerequestidsize</span><span class="p">)</span>
+
+        <span class="n">attr_nonproprequesttimeout</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;NonPropRequestTimeout&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The timeout value for non-propagation request.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+30000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_nonproprequesttimeout</span><span class="p">)</span>
+
+        <span class="n">attr_discoveryhoplimit</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;DiscoveryHopLimit&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The max discovery hop limit for route requests.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;255&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_discoveryhoplimit</span><span class="p">)</span>
+
+        <span class="n">attr_maxsalvagecount</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxSalvageCount&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The max salvage count for a single data packet.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;15&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxsalvagecount</span><span class="p">)</span>
+
+        <span class="n">attr_blacklisttimeout</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;BlacklistTimeout&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The time for a neighbor to stay in blacklist.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+3000000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_blacklisttimeout</span><span class="p">)</span>
+
+        <span class="n">attr_gratreplyholdoff</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;GratReplyHoldoff&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The time for gratuitous reply entry to expire.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+1000000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_gratreplyholdoff</span><span class="p">)</span>
+
+        <span class="n">attr_broadcastjitter</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;BroadcastJitter&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The jitter time to avoid collision for broadcast packets.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;10&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_broadcastjitter</span><span class="p">)</span>
+
+        <span class="n">attr_linkacktimeout</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;LinkAckTimeout&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The time a packet in maintenance buffer wait for link acknowledgment.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+100000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_linkacktimeout</span><span class="p">)</span>
+
+        <span class="n">attr_trylinkacks</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;TryLinkAcks&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The number of link acknowledgment to use.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_trylinkacks</span><span class="p">)</span>
+
+        <span class="n">attr_passiveacktimeout</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;PassiveAckTimeout&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The time a packet in maintenance buffer wait for passive acknowledgment.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+100000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_passiveacktimeout</span><span class="p">)</span>
+
+        <span class="n">attr_trypassiveacks</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;TryPassiveAcks&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The number of passive acknowledgment to use.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_trypassiveacks</span><span class="p">)</span>
+
+        <span class="n">attr_requestperiod</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;RequestPeriod&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The base time interval between route requests.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+500000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_requestperiod</span><span class="p">)</span>
+
+        <span class="n">attr_maxrequestperiod</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxRequestPeriod&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The max time interval between route requests.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+10000000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxrequestperiod</span><span class="p">)</span>
+
+        <span class="n">attr_grareplytablesize</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;GraReplyTableSize&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The gratuitous reply table size.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;64&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_grareplytablesize</span><span class="p">)</span>
+
+        <span class="n">attr_cachetype</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;CacheType&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Use Link Cache or use Path Cache&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;LinkCache&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_cachetype</span><span class="p">)</span>
+
+        <span class="n">attr_stabilitydecrfactor</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;StabilityDecrFactor&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The stability decrease factor for link cache&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;2&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_stabilitydecrfactor</span><span class="p">)</span>
+
+        <span class="n">attr_stabilityincrfactor</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;StabilityIncrFactor&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The stability increase factor for link cache&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;4&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_stabilityincrfactor</span><span class="p">)</span>
+
+        <span class="n">attr_initstability</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;InitStability&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The initial stability factor for link cache&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+25000000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_initstability</span><span class="p">)</span>
+
+        <span class="n">attr_minlifetime</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MinLifeTime&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The minimal life time for link cache&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+1000000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_minlifetime</span><span class="p">)</span>
+
+        <span class="n">attr_useextends</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;UseExtends&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The extension time for link cache&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+120000000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_useextends</span><span class="p">)</span>
+
+        <span class="n">attr_enablesubroute</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;EnableSubRoute&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Enables saving of sub route when receiving route error messages, only available when using path route cache&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;True&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_enablesubroute</span><span class="p">)</span>
+
+        <span class="n">attr_retransincr</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;RetransIncr&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The increase time for retransmission timer when facing network congestion&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+20000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_retransincr</span><span class="p">)</span>
+
+        <span class="n">attr_maxnetworkqueuesize</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxNetworkQueueSize&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The max number of packet to save in the network queue.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;400&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxnetworkqueuesize</span><span class="p">)</span>
+
+        <span class="n">attr_maxnetworkqueuedelay</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxNetworkQueueDelay&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The max time for a packet to stay in the network queue.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+30000000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxnetworkqueuedelay</span><span class="p">)</span>
+
+        <span class="n">attr_numpriorityqueues</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;NumPriorityQueues&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The max number of packet to save in the network queue.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;2&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_numpriorityqueues</span><span class="p">)</span>
+
+        <span class="n">attr_linkacknowledgment</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;LinkAcknowledgment&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Enable Link layer acknowledgment mechanism&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;True&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_linkacknowledgment</span><span class="p">)</span>
+
+        <span class="n">attr_protocolnumber</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ProtocolNumber&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The Ip protocol number.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_protocolnumber</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">tx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;Tx&quot;</span><span class="p">,</span> <span class="s">&quot;Send DSR packet.&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">tx</span><span class="p">)</span>
+
+        <span class="n">drop</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;Drop&quot;</span><span class="p">,</span> <span class="s">&quot;Drop DSR packet&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">drop</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3dsrDsrRouting</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-dsr-dsr-routing-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/emu_net_device.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/emu_net_device.html
new file mode 100644 (file)
index 0000000..e205dcc
--- /dev/null
@@ -0,0 +1,216 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.emu_net_device &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.emu_net_device</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3netdevice</span> <span class="kn">import</span> <span class="n">NS3BaseNetDevice</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3EmuNetDevice"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.emu_net_device.NS3EmuNetDevice">[docs]</a><span class="k">class</span> <span class="nc">NS3EmuNetDevice</span><span class="p">(</span><span class="n">NS3BaseNetDevice</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::EmuNetDevice&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_mtu</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Mtu&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The MAC-level Maximum Transmission Unit&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_mtu</span><span class="p">)</span>
+
+        <span class="n">attr_address</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Address&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The ns-3 MAC address of this (virtual) device.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ff:ff:ff:ff:ff:ff&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_address</span><span class="p">)</span>
+
+        <span class="n">attr_devicename</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;DeviceName&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The name of the underlying real device (e.g. eth1).&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;eth1&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_devicename</span><span class="p">)</span>
+
+        <span class="n">attr_start</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Start&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The simulation time at which to spin up the device thread.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+0.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_start</span><span class="p">)</span>
+
+        <span class="n">attr_stop</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Stop&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The simulation time at which to tear down the device thread.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+0.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_stop</span><span class="p">)</span>
+
+        <span class="n">attr_rxqueuesize</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;RxQueueSize&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Maximum size of the read queue.  This value limits number of packets that have been read from the network into a memory buffer but have not yet been processed by the simulator.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1000&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_rxqueuesize</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">mactx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTx&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source indicating a packet has arrived for transmission by this device&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactx</span><span class="p">)</span>
+
+        <span class="n">mactxdrop</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxDrop&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source indicating a packet has been dropped by the device before transmission&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxdrop</span><span class="p">)</span>
+
+        <span class="n">macpromiscrx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacPromiscRx&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been received by this device, has been passed up from the physical layer and is being forwarded up the local protocol stack.  This is a promiscuous trace,&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">macpromiscrx</span><span class="p">)</span>
+
+        <span class="n">macrx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacRx&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been received by this device, has been passed up from the physical layer and is being forwarded up the local protocol stack.  This is a non-promiscuous trace,&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">macrx</span><span class="p">)</span>
+
+        <span class="n">sniffer</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;Sniffer&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source simulating a non-promiscuous packet sniffer attached to the device&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">sniffer</span><span class="p">)</span>
+
+        <span class="n">promiscsniffer</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;PromiscSniffer&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source simulating a promiscuous packet sniffer attached to the device&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">promiscsniffer</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3EmuNetDevice</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-emu-net-device-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/error_channel.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/error_channel.html
new file mode 100644 (file)
index 0000000..ad32598
--- /dev/null
@@ -0,0 +1,141 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.error_channel &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.error_channel</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3channel</span> <span class="kn">import</span> <span class="n">NS3BaseChannel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3ErrorChannel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.error_channel.NS3ErrorChannel">[docs]</a><span class="k">class</span> <span class="nc">NS3ErrorChannel</span><span class="p">(</span><span class="n">NS3BaseChannel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::ErrorChannel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_id</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Id&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The id (unique integer) of this Channel.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">NoWrite</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_id</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3ErrorChannel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-error-channel-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/error_channel_sixlow.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/error_channel_sixlow.html
new file mode 100644 (file)
index 0000000..bb9ca4f
--- /dev/null
@@ -0,0 +1,141 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.error_channel_sixlow &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.error_channel_sixlow</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3channel</span> <span class="kn">import</span> <span class="n">NS3BaseChannel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3ErrorChannelSixlow"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.error_channel_sixlow.NS3ErrorChannelSixlow">[docs]</a><span class="k">class</span> <span class="nc">NS3ErrorChannelSixlow</span><span class="p">(</span><span class="n">NS3BaseChannel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::ErrorChannelSixlow&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_id</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Id&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The id (unique integer) of this Channel.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">NoWrite</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_id</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3ErrorChannelSixlow</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-error-channel-sixlow-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/error_net_device.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/error_net_device.html
new file mode 100644 (file)
index 0000000..8a3f20c
--- /dev/null
@@ -0,0 +1,135 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.error_net_device &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.error_net_device</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3netdevice</span> <span class="kn">import</span> <span class="n">NS3BaseNetDevice</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3ErrorNetDevice"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.error_net_device.NS3ErrorNetDevice">[docs]</a><span class="k">class</span> <span class="nc">NS3ErrorNetDevice</span><span class="p">(</span><span class="n">NS3BaseNetDevice</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::ErrorNetDevice&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">phyrxdrop</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;PhyRxDrop&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source indicating a packet has been dropped by the device during reception&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">phyrxdrop</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3ErrorNetDevice</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-error-net-device-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/fd_net_device.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/fd_net_device.html
new file mode 100644 (file)
index 0000000..53f0736
--- /dev/null
@@ -0,0 +1,206 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.fd_net_device &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.fd_net_device</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3fdnetdevice</span> <span class="kn">import</span> <span class="n">NS3BaseFdNetDevice</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3FdNetDevice"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.fd_net_device.NS3FdNetDevice">[docs]</a><span class="k">class</span> <span class="nc">NS3FdNetDevice</span><span class="p">(</span><span class="n">NS3BaseFdNetDevice</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::FdNetDevice&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_address</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Address&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The MAC address of this device.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ff:ff:ff:ff:ff:ff&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_address</span><span class="p">)</span>
+
+        <span class="n">attr_start</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Start&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The simulation time at which to spin up the device thread.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+0.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_start</span><span class="p">)</span>
+
+        <span class="n">attr_stop</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Stop&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The simulation time at which to tear down the device thread.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+0.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_stop</span><span class="p">)</span>
+
+        <span class="n">attr_encapsulationmode</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;EncapsulationMode&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The link-layer encapsulation type to use.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Enumerate</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;Dix&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;Dix&quot;</span><span class="p">,</span><span class="s">&quot;Llc&quot;</span><span class="p">,</span><span class="s">&quot;DixPi&quot;</span><span class="p">],</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_encapsulationmode</span><span class="p">)</span>
+
+        <span class="n">attr_rxqueuesize</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;RxQueueSize&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Maximum size of the read queue.  This value limits number of packets that have been read from the network into a memory buffer but have not yet been processed by the simulator.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1000&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_rxqueuesize</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">mactx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTx&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source indicating a packet has arrived for transmission by this device&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactx</span><span class="p">)</span>
+
+        <span class="n">mactxdrop</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxDrop&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source indicating a packet has been dropped by the device before transmission&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxdrop</span><span class="p">)</span>
+
+        <span class="n">macpromiscrx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacPromiscRx&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been received by this device, has been passed up from the physical layer and is being forwarded up the local protocol stack.  This is a promiscuous trace,&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">macpromiscrx</span><span class="p">)</span>
+
+        <span class="n">macrx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacRx&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been received by this device, has been passed up from the physical layer and is being forwarded up the local protocol stack.  This is a non-promiscuous trace,&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">macrx</span><span class="p">)</span>
+
+        <span class="n">sniffer</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;Sniffer&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source simulating a non-promiscuous packet sniffer attached to the device&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">sniffer</span><span class="p">)</span>
+
+        <span class="n">promiscsniffer</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;PromiscSniffer&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source simulating a promiscuous packet sniffer attached to the device&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">promiscsniffer</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3FdNetDevice</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-fd-net-device-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/fixed_rss_loss_model.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/fixed_rss_loss_model.html
new file mode 100644 (file)
index 0000000..4fb94ab
--- /dev/null
@@ -0,0 +1,141 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.fixed_rss_loss_model &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.fixed_rss_loss_model</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3propagationlossmodel</span> <span class="kn">import</span> <span class="n">NS3BasePropagationLossModel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3FixedRssLossModel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.fixed_rss_loss_model.NS3FixedRssLossModel">[docs]</a><span class="k">class</span> <span class="nc">NS3FixedRssLossModel</span><span class="p">(</span><span class="n">NS3BasePropagationLossModel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::FixedRssLossModel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_rss</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Rss&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The fixed receiver Rss.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;-150&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_rss</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3FixedRssLossModel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-fixed-rss-loss-model-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/friis_propagation_loss_model.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/friis_propagation_loss_model.html
new file mode 100644 (file)
index 0000000..abf162d
--- /dev/null
@@ -0,0 +1,161 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.friis_propagation_loss_model &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.friis_propagation_loss_model</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3propagationlossmodel</span> <span class="kn">import</span> <span class="n">NS3BasePropagationLossModel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3FriisPropagationLossModel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.friis_propagation_loss_model.NS3FriisPropagationLossModel">[docs]</a><span class="k">class</span> <span class="nc">NS3FriisPropagationLossModel</span><span class="p">(</span><span class="n">NS3BasePropagationLossModel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::FriisPropagationLossModel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_frequency</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Frequency&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The carrier frequency (in Hz) at which propagation occurs  (default is 5.15 GHz).&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;5.15e+09&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_frequency</span><span class="p">)</span>
+
+        <span class="n">attr_systemloss</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;SystemLoss&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The system loss&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_systemloss</span><span class="p">)</span>
+
+        <span class="n">attr_minloss</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MinLoss&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The minimum value (dB) of the total loss, used at short ranges. Note: &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_minloss</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3FriisPropagationLossModel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-friis-propagation-loss-model-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/gauss_markov_mobility_model.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/gauss_markov_mobility_model.html
new file mode 100644 (file)
index 0000000..ed9bcb2
--- /dev/null
@@ -0,0 +1,246 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.gauss_markov_mobility_model &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.gauss_markov_mobility_model</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3mobilitymodel</span> <span class="kn">import</span> <span class="n">NS3BaseMobilityModel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3GaussMarkovMobilityModel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.gauss_markov_mobility_model.NS3GaussMarkovMobilityModel">[docs]</a><span class="k">class</span> <span class="nc">NS3GaussMarkovMobilityModel</span><span class="p">(</span><span class="n">NS3BaseMobilityModel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::GaussMarkovMobilityModel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_bounds</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Bounds&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Bounds of the area to cruise.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;-100|100|-100|100|0|100&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_bounds</span><span class="p">)</span>
+
+        <span class="n">attr_timestep</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;TimeStep&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Change current direction and speed after moving for this time.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+1000000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_timestep</span><span class="p">)</span>
+
+        <span class="n">attr_alpha</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Alpha&quot;</span><span class="p">,</span>
+            <span class="s">&quot;A constant representing the tunable parameter in the Gauss-Markov model.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_alpha</span><span class="p">)</span>
+
+        <span class="n">attr_meanvelocity</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MeanVelocity&quot;</span><span class="p">,</span>
+            <span class="s">&quot;A random variable used to assign the average velocity.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ns3::UniformRandomVariable[Min=0.0|Max=1.0]&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_meanvelocity</span><span class="p">)</span>
+
+        <span class="n">attr_meandirection</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MeanDirection&quot;</span><span class="p">,</span>
+            <span class="s">&quot;A random variable used to assign the average direction.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ns3::UniformRandomVariable[Min=0.0|Max=6.283185307]&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_meandirection</span><span class="p">)</span>
+
+        <span class="n">attr_meanpitch</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MeanPitch&quot;</span><span class="p">,</span>
+            <span class="s">&quot;A random variable used to assign the average pitch.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ns3::ConstantRandomVariable[Constant=0.0]&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_meanpitch</span><span class="p">)</span>
+
+        <span class="n">attr_normalvelocity</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;NormalVelocity&quot;</span><span class="p">,</span>
+            <span class="s">&quot;A gaussian random variable used to calculate the next velocity value.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ns3::NormalRandomVariable[Mean=0.0|Variance=1.0|Bound=10.0]&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_normalvelocity</span><span class="p">)</span>
+
+        <span class="n">attr_normaldirection</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;NormalDirection&quot;</span><span class="p">,</span>
+            <span class="s">&quot;A gaussian random variable used to calculate the next direction value.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ns3::NormalRandomVariable[Mean=0.0|Variance=1.0|Bound=10.0]&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_normaldirection</span><span class="p">)</span>
+
+        <span class="n">attr_normalpitch</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;NormalPitch&quot;</span><span class="p">,</span>
+            <span class="s">&quot;A gaussian random variable used to calculate the next pitch value.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ns3::NormalRandomVariable[Mean=0.0|Variance=1.0|Bound=10.0]&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_normalpitch</span><span class="p">)</span>
+
+        <span class="n">attr_position</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Position&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The current position of the mobility model.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0:0:0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_position</span><span class="p">)</span>
+
+        <span class="n">attr_velocity</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Velocity&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The current velocity of the mobility model.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0:0:0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">NoWrite</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_velocity</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">coursechange</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;CourseChange&quot;</span><span class="p">,</span> <span class="s">&quot;The value of the position and/or velocity vector changed&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">coursechange</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3GaussMarkovMobilityModel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-gauss-markov-mobility-model-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/hierarchical_mobility_model.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/hierarchical_mobility_model.html
new file mode 100644 (file)
index 0000000..a6c94ca
--- /dev/null
@@ -0,0 +1,156 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.hierarchical_mobility_model &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.hierarchical_mobility_model</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3mobilitymodel</span> <span class="kn">import</span> <span class="n">NS3BaseMobilityModel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3HierarchicalMobilityModel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.hierarchical_mobility_model.NS3HierarchicalMobilityModel">[docs]</a><span class="k">class</span> <span class="nc">NS3HierarchicalMobilityModel</span><span class="p">(</span><span class="n">NS3BaseMobilityModel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::HierarchicalMobilityModel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_position</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Position&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The current position of the mobility model.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0:0:0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_position</span><span class="p">)</span>
+
+        <span class="n">attr_velocity</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Velocity&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The current velocity of the mobility model.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0:0:0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">NoWrite</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_velocity</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">coursechange</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;CourseChange&quot;</span><span class="p">,</span> <span class="s">&quot;The value of the position and/or velocity vector changed&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">coursechange</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3HierarchicalMobilityModel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-hierarchical-mobility-model-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/hybrid_buildings_propagation_loss_model.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/hybrid_buildings_propagation_loss_model.html
new file mode 100644 (file)
index 0000000..df1a68c
--- /dev/null
@@ -0,0 +1,181 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.hybrid_buildings_propagation_loss_model &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.hybrid_buildings_propagation_loss_model</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3propagationlossmodel</span> <span class="kn">import</span> <span class="n">NS3BasePropagationLossModel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3HybridBuildingsPropagationLossModel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.hybrid_buildings_propagation_loss_model.NS3HybridBuildingsPropagationLossModel">[docs]</a><span class="k">class</span> <span class="nc">NS3HybridBuildingsPropagationLossModel</span><span class="p">(</span><span class="n">NS3BasePropagationLossModel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::HybridBuildingsPropagationLossModel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_los2nlosthr</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Los2NlosThr&quot;</span><span class="p">,</span>
+            <span class="s">&quot; Threshold from LoS to NLoS in ITU 1411 [m].&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;200&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_los2nlosthr</span><span class="p">)</span>
+
+        <span class="n">attr_shadowsigmaoutdoor</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ShadowSigmaOutdoor&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Standard deviation of the normal distribution used for calculate the shadowing for outdoor nodes&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;7&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_shadowsigmaoutdoor</span><span class="p">)</span>
+
+        <span class="n">attr_shadowsigmaindoor</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ShadowSigmaIndoor&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Standard deviation of the normal distribution used for calculate the shadowing for indoor nodes &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;8&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_shadowsigmaindoor</span><span class="p">)</span>
+
+        <span class="n">attr_shadowsigmaextwalls</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ShadowSigmaExtWalls&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Standard deviation of the normal distribution used for calculate the shadowing due to ext walls &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;5&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_shadowsigmaextwalls</span><span class="p">)</span>
+
+        <span class="n">attr_internalwallloss</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;InternalWallLoss&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Additional loss for each internal wall [dB]&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;5&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_internalwallloss</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3HybridBuildingsPropagationLossModel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-hybrid-buildings-propagation-loss-model-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/icmpv4l4protocol.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/icmpv4l4protocol.html
new file mode 100644 (file)
index 0000000..8bf1f9e
--- /dev/null
@@ -0,0 +1,141 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.icmpv4l4protocol &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.icmpv4l4protocol</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3icmpv4l4protocol</span> <span class="kn">import</span> <span class="n">NS3BaseIcmpv4L4Protocol</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3Icmpv4L4Protocol"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.icmpv4l4protocol.NS3Icmpv4L4Protocol">[docs]</a><span class="k">class</span> <span class="nc">NS3Icmpv4L4Protocol</span><span class="p">(</span><span class="n">NS3BaseIcmpv4L4Protocol</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::Icmpv4L4Protocol&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_protocolnumber</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ProtocolNumber&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The Ip protocol number.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_protocolnumber</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3Icmpv4L4Protocol</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-icmpv4l4protocol-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/icmpv6l4protocol.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/icmpv6l4protocol.html
new file mode 100644 (file)
index 0000000..951fec4
--- /dev/null
@@ -0,0 +1,161 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.icmpv6l4protocol &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.icmpv6l4protocol</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3base</span> <span class="kn">import</span> <span class="n">NS3Base</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3Icmpv6L4Protocol"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.icmpv6l4protocol.NS3Icmpv6L4Protocol">[docs]</a><span class="k">class</span> <span class="nc">NS3Icmpv6L4Protocol</span><span class="p">(</span><span class="n">NS3Base</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::Icmpv6L4Protocol&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_dad</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;DAD&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Always do DAD check.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;True&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_dad</span><span class="p">)</span>
+
+        <span class="n">attr_solicitationjitter</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;SolicitationJitter&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The jitter in ms a node is allowed to wait before sending any solicitation . Some jitter aims to prevent collisions. By default, the model will wait for a duration in ms defined by a uniform random-variable between 0 and SolicitationJitter&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ns3::UniformRandomVariable[Min=0.0|Max=10.0]&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_solicitationjitter</span><span class="p">)</span>
+
+        <span class="n">attr_protocolnumber</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ProtocolNumber&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The Ip protocol number.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_protocolnumber</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3Icmpv6L4Protocol</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-icmpv6l4protocol-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/ideal_wifi_manager.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/ideal_wifi_manager.html
new file mode 100644 (file)
index 0000000..f23b5f7
--- /dev/null
@@ -0,0 +1,228 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.ideal_wifi_manager &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.ideal_wifi_manager</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3wifiremotestationmanager</span> <span class="kn">import</span> <span class="n">NS3BaseWifiRemoteStationManager</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3IdealWifiManager"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.ideal_wifi_manager.NS3IdealWifiManager">[docs]</a><span class="k">class</span> <span class="nc">NS3IdealWifiManager</span><span class="p">(</span><span class="n">NS3BaseWifiRemoteStationManager</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::IdealWifiManager&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_berthreshold</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;BerThreshold&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The maximum Bit Error Rate acceptable at any transmission mode&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1e-05&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_berthreshold</span><span class="p">)</span>
+
+        <span class="n">attr_islowlatency</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;IsLowLatency&quot;</span><span class="p">,</span>
+            <span class="s">&quot;If true, we attempt to modelize a so-called low-latency device: a device where decisions about tx parameters can be made on a per-packet basis and feedback about the transmission of each packet is obtained before sending the next. Otherwise, we modelize a  high-latency device, that is a device where we cannot update our decision about tx parameters after every packet transmission.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;True&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_islowlatency</span><span class="p">)</span>
+
+        <span class="n">attr_maxssrc</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxSsrc&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The maximum number of retransmission attempts for an RTS. This value will not have any effect on some rate control algorithms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;7&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxssrc</span><span class="p">)</span>
+
+        <span class="n">attr_maxslrc</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxSlrc&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The maximum number of retransmission attempts for a DATA packet. This value will not have any effect on some rate control algorithms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;7&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxslrc</span><span class="p">)</span>
+
+        <span class="n">attr_rtsctsthreshold</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;RtsCtsThreshold&quot;</span><span class="p">,</span>
+            <span class="s">&quot;If  the size of the data packet + LLC header + MAC header + FCS trailer is bigger than this value, we use an RTS/CTS handshake before sending the data, as per IEEE Std. 802.11-2012, Section 9.3.5. This value will not have any effect on some rate control algorithms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;2346&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_rtsctsthreshold</span><span class="p">)</span>
+
+        <span class="n">attr_fragmentationthreshold</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;FragmentationThreshold&quot;</span><span class="p">,</span>
+            <span class="s">&quot;If the size of the data packet + LLC header + MAC header + FCS trailer is biggerthan this value, we fragment it such that the size of the fragments are equal or smaller than this value, as per IEEE Std. 802.11-2012, Section 9.5. This value will not have any effect on some rate control algorithms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;2346&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_fragmentationthreshold</span><span class="p">)</span>
+
+        <span class="n">attr_nonunicastmode</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;NonUnicastMode&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Wifi mode used for non-unicast transmissions.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;Invalid-WifiMode&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_nonunicastmode</span><span class="p">)</span>
+
+        <span class="n">attr_defaulttxpowerlevel</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;DefaultTxPowerLevel&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Default power level to be used for transmissions. This is the power level that is used by all those WifiManagers that do notimplement TX power control.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_defaulttxpowerlevel</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">mactxrtsfailed</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxRtsFailed&quot;</span><span class="p">,</span> <span class="s">&quot;The transmission of a RTS by the MAC layer has failed&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxrtsfailed</span><span class="p">)</span>
+
+        <span class="n">mactxdatafailed</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxDataFailed&quot;</span><span class="p">,</span> <span class="s">&quot;The transmission of a data packet by the MAC layer has failed&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxdatafailed</span><span class="p">)</span>
+
+        <span class="n">mactxfinalrtsfailed</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxFinalRtsFailed&quot;</span><span class="p">,</span> <span class="s">&quot;The transmission of a RTS has exceeded the maximum number of attempts&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxfinalrtsfailed</span><span class="p">)</span>
+
+        <span class="n">mactxfinaldatafailed</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxFinalDataFailed&quot;</span><span class="p">,</span> <span class="s">&quot;The transmission of a data packet has exceeded the maximum number of attempts&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxfinaldatafailed</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3IdealWifiManager</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-ideal-wifi-manager-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/ipv4l3protocol.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/ipv4l3protocol.html
new file mode 100644 (file)
index 0000000..1b4d484
--- /dev/null
@@ -0,0 +1,206 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.ipv4l3protocol &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.ipv4l3protocol</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3ipv4l3protocol</span> <span class="kn">import</span> <span class="n">NS3BaseIpv4L3Protocol</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3Ipv4L3Protocol"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.ipv4l3protocol.NS3Ipv4L3Protocol">[docs]</a><span class="k">class</span> <span class="nc">NS3Ipv4L3Protocol</span><span class="p">(</span><span class="n">NS3BaseIpv4L3Protocol</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::Ipv4L3Protocol&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_defaulttos</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;DefaultTos&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The TOS value set by default on all outgoing packets generated on this node.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_defaulttos</span><span class="p">)</span>
+
+        <span class="n">attr_defaultttl</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;DefaultTtl&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The TTL value set by default on all outgoing packets generated on this node.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;64&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_defaultttl</span><span class="p">)</span>
+
+        <span class="n">attr_fragmentexpirationtimeout</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;FragmentExpirationTimeout&quot;</span><span class="p">,</span>
+            <span class="s">&quot;When this timeout expires, the fragments will be cleared from the buffer.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+30000000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_fragmentexpirationtimeout</span><span class="p">)</span>
+
+        <span class="n">attr_ipforward</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;IpForward&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Globally enable or disable IP forwarding for all current and future Ipv4 devices.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;True&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_ipforward</span><span class="p">)</span>
+
+        <span class="n">attr_weakesmodel</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;WeakEsModel&quot;</span><span class="p">,</span>
+            <span class="s">&quot;RFC1122 term for whether host accepts datagram with a dest. address on another interface&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;True&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_weakesmodel</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">tx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;Tx&quot;</span><span class="p">,</span> <span class="s">&quot;Send ipv4 packet to outgoing interface.&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">tx</span><span class="p">)</span>
+
+        <span class="n">rx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;Rx&quot;</span><span class="p">,</span> <span class="s">&quot;Receive ipv4 packet from incoming interface.&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">rx</span><span class="p">)</span>
+
+        <span class="n">drop</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;Drop&quot;</span><span class="p">,</span> <span class="s">&quot;Drop ipv4 packet&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">drop</span><span class="p">)</span>
+
+        <span class="n">sendoutgoing</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;SendOutgoing&quot;</span><span class="p">,</span> <span class="s">&quot;A newly-generated packet by this node is about to be queued for transmission&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">sendoutgoing</span><span class="p">)</span>
+
+        <span class="n">unicastforward</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;UnicastForward&quot;</span><span class="p">,</span> <span class="s">&quot;A unicast IPv4 packet was received by this node and is being forwarded to another node&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">unicastforward</span><span class="p">)</span>
+
+        <span class="n">localdeliver</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;LocalDeliver&quot;</span><span class="p">,</span> <span class="s">&quot;An IPv4 packet was received by/for this node, and it is being forward up the stack&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">localdeliver</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3Ipv4L3Protocol</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-ipv4l3protocol-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/itu_r1411los_propagation_loss_model.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/itu_r1411los_propagation_loss_model.html
new file mode 100644 (file)
index 0000000..dff139d
--- /dev/null
@@ -0,0 +1,130 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.itu_r1411los_propagation_loss_model &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.itu_r1411los_propagation_loss_model</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3propagationlossmodel</span> <span class="kn">import</span> <span class="n">NS3BasePropagationLossModel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3ItuR1411LosPropagationLossModel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.itu_r1411los_propagation_loss_model.NS3ItuR1411LosPropagationLossModel">[docs]</a><span class="k">class</span> <span class="nc">NS3ItuR1411LosPropagationLossModel</span><span class="p">(</span><span class="n">NS3BasePropagationLossModel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::ItuR1411LosPropagationLossModel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3ItuR1411LosPropagationLossModel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-itu-r1411los-propagation-loss-model-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/itu_r1411nlos_over_rooftop_propagation_loss_model.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/itu_r1411nlos_over_rooftop_propagation_loss_model.html
new file mode 100644 (file)
index 0000000..afc6ba3
--- /dev/null
@@ -0,0 +1,201 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.itu_r1411nlos_over_rooftop_propagation_loss_model &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.itu_r1411nlos_over_rooftop_propagation_loss_model</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3propagationlossmodel</span> <span class="kn">import</span> <span class="n">NS3BasePropagationLossModel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3ItuR1411NlosOverRooftopPropagationLossModel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.itu_r1411nlos_over_rooftop_propagation_loss_model.NS3ItuR1411NlosOverRooftopPropagationLossModel">[docs]</a><span class="k">class</span> <span class="nc">NS3ItuR1411NlosOverRooftopPropagationLossModel</span><span class="p">(</span><span class="n">NS3BasePropagationLossModel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::ItuR1411NlosOverRooftopPropagationLossModel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_environment</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Environment&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Environment Scenario&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Enumerate</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;Urban&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;Urban&quot;</span><span class="p">,</span><span class="s">&quot;SubUrban&quot;</span><span class="p">,</span><span class="s">&quot;OpenAreas&quot;</span><span class="p">],</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_environment</span><span class="p">)</span>
+
+        <span class="n">attr_citysize</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;CitySize&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Dimension of the city&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Enumerate</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;Large&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;Small&quot;</span><span class="p">,</span><span class="s">&quot;Medium&quot;</span><span class="p">,</span><span class="s">&quot;Large&quot;</span><span class="p">],</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_citysize</span><span class="p">)</span>
+
+        <span class="n">attr_rooftoplevel</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;RooftopLevel&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The height of the rooftop level in meters&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;20&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_rooftoplevel</span><span class="p">)</span>
+
+        <span class="n">attr_streetsorientation</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;StreetsOrientation&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The orientation of streets in degrees [0,90] with respect to the direction of propagation&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;45&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_streetsorientation</span><span class="p">)</span>
+
+        <span class="n">attr_streetswidth</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;StreetsWidth&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The width of streets&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;20&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_streetswidth</span><span class="p">)</span>
+
+        <span class="n">attr_buildingsextend</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;BuildingsExtend&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The distance over which the buildings extend&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;80&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_buildingsextend</span><span class="p">)</span>
+
+        <span class="n">attr_buildingseparation</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;BuildingSeparation&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The separation between buildings&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;50&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_buildingseparation</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3ItuR1411NlosOverRooftopPropagationLossModel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-itu-r1411nlos-over-rooftop-propagation-loss-model-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/jakes_propagation_loss_model.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/jakes_propagation_loss_model.html
new file mode 100644 (file)
index 0000000..7848615
--- /dev/null
@@ -0,0 +1,130 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.jakes_propagation_loss_model &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.jakes_propagation_loss_model</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3propagationlossmodel</span> <span class="kn">import</span> <span class="n">NS3BasePropagationLossModel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3JakesPropagationLossModel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.jakes_propagation_loss_model.NS3JakesPropagationLossModel">[docs]</a><span class="k">class</span> <span class="nc">NS3JakesPropagationLossModel</span><span class="p">(</span><span class="n">NS3BasePropagationLossModel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::JakesPropagationLossModel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3JakesPropagationLossModel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-jakes-propagation-loss-model-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/kun2600mhz_propagation_loss_model.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/kun2600mhz_propagation_loss_model.html
new file mode 100644 (file)
index 0000000..8d1f117
--- /dev/null
@@ -0,0 +1,130 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.kun2600mhz_propagation_loss_model &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.kun2600mhz_propagation_loss_model</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3propagationlossmodel</span> <span class="kn">import</span> <span class="n">NS3BasePropagationLossModel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3Kun2600MhzPropagationLossModel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.kun2600mhz_propagation_loss_model.NS3Kun2600MhzPropagationLossModel">[docs]</a><span class="k">class</span> <span class="nc">NS3Kun2600MhzPropagationLossModel</span><span class="p">(</span><span class="n">NS3BasePropagationLossModel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::Kun2600MhzPropagationLossModel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3Kun2600MhzPropagationLossModel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-kun2600mhz-propagation-loss-model-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/list_error_model.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/list_error_model.html
new file mode 100644 (file)
index 0000000..eaa1c9e
--- /dev/null
@@ -0,0 +1,141 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.list_error_model &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.list_error_model</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3errormodel</span> <span class="kn">import</span> <span class="n">NS3BaseErrorModel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3ListErrorModel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.list_error_model.NS3ListErrorModel">[docs]</a><span class="k">class</span> <span class="nc">NS3ListErrorModel</span><span class="p">(</span><span class="n">NS3BaseErrorModel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::ListErrorModel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_isenabled</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;IsEnabled&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Whether this ErrorModel is enabled or not.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;True&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_isenabled</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3ListErrorModel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-list-error-model-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/log_distance_propagation_loss_model.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/log_distance_propagation_loss_model.html
new file mode 100644 (file)
index 0000000..aa34c04
--- /dev/null
@@ -0,0 +1,161 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.log_distance_propagation_loss_model &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.log_distance_propagation_loss_model</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3propagationlossmodel</span> <span class="kn">import</span> <span class="n">NS3BasePropagationLossModel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3LogDistancePropagationLossModel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.log_distance_propagation_loss_model.NS3LogDistancePropagationLossModel">[docs]</a><span class="k">class</span> <span class="nc">NS3LogDistancePropagationLossModel</span><span class="p">(</span><span class="n">NS3BasePropagationLossModel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::LogDistancePropagationLossModel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_exponent</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Exponent&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The exponent of the Path Loss propagation model&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;3&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_exponent</span><span class="p">)</span>
+
+        <span class="n">attr_referencedistance</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ReferenceDistance&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The distance at which the reference loss is calculated (m)&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_referencedistance</span><span class="p">)</span>
+
+        <span class="n">attr_referenceloss</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ReferenceLoss&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The reference loss at reference distance (dB). (Default is Friis at 1m with 5.15 GHz)&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;46.6777&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_referenceloss</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3LogDistancePropagationLossModel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-log-distance-propagation-loss-model-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/loopback_net_device.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/loopback_net_device.html
new file mode 100644 (file)
index 0000000..fb9b40c
--- /dev/null
@@ -0,0 +1,130 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.loopback_net_device &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.loopback_net_device</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3netdevice</span> <span class="kn">import</span> <span class="n">NS3BaseNetDevice</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3LoopbackNetDevice"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.loopback_net_device.NS3LoopbackNetDevice">[docs]</a><span class="k">class</span> <span class="nc">NS3LoopbackNetDevice</span><span class="p">(</span><span class="n">NS3BaseNetDevice</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::LoopbackNetDevice&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3LoopbackNetDevice</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-loopback-net-device-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/lr_wpan_net_device.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/lr_wpan_net_device.html
new file mode 100644 (file)
index 0000000..f85e8a8
--- /dev/null
@@ -0,0 +1,141 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.lr_wpan_net_device &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.lr_wpan_net_device</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3netdevice</span> <span class="kn">import</span> <span class="n">NS3BaseNetDevice</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3LrWpanNetDevice"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.lr_wpan_net_device.NS3LrWpanNetDevice">[docs]</a><span class="k">class</span> <span class="nc">NS3LrWpanNetDevice</span><span class="p">(</span><span class="n">NS3BaseNetDevice</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::LrWpanNetDevice&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_useacks</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;UseAcks&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Request acknowledgments for data frames.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;True&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_useacks</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3LrWpanNetDevice</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-lr-wpan-net-device-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/lte_enb_net_device.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/lte_enb_net_device.html
new file mode 100644 (file)
index 0000000..61bab79
--- /dev/null
@@ -0,0 +1,211 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.lte_enb_net_device &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.lte_enb_net_device</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3netdevice</span> <span class="kn">import</span> <span class="n">NS3BaseNetDevice</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3LteEnbNetDevice"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.lte_enb_net_device.NS3LteEnbNetDevice">[docs]</a><span class="k">class</span> <span class="nc">NS3LteEnbNetDevice</span><span class="p">(</span><span class="n">NS3BaseNetDevice</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::LteEnbNetDevice&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_ulbandwidth</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;UlBandwidth&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Uplink Transmission Bandwidth Configuration in number of Resource Blocks&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;25&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_ulbandwidth</span><span class="p">)</span>
+
+        <span class="n">attr_dlbandwidth</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;DlBandwidth&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Downlink Transmission Bandwidth Configuration in number of Resource Blocks&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;25&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_dlbandwidth</span><span class="p">)</span>
+
+        <span class="n">attr_cellid</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;CellId&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Cell Identifier&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_cellid</span><span class="p">)</span>
+
+        <span class="n">attr_dlearfcn</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;DlEarfcn&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Downlink E-UTRA Absolute Radio Frequency Channel Number (EARFCN) as per 3GPP 36.101 Section 5.7.3. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;100&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_dlearfcn</span><span class="p">)</span>
+
+        <span class="n">attr_ulearfcn</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;UlEarfcn&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Uplink E-UTRA Absolute Radio Frequency Channel Number (EARFCN) as per 3GPP 36.101 Section 5.7.3. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;18100&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_ulearfcn</span><span class="p">)</span>
+
+        <span class="n">attr_csgid</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;CsgId&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The Closed Subscriber Group (CSG) identity that this eNodeB belongs to&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_csgid</span><span class="p">)</span>
+
+        <span class="n">attr_csgindication</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;CsgIndication&quot;</span><span class="p">,</span>
+            <span class="s">&quot;If true, only UEs which are members of the CSG (i.e. same CSG ID) can gain access to the eNodeB, therefore enforcing closed access mode. Otherwise, the eNodeB operates as a non-CSG cell and implements open access mode.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;False&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_csgindication</span><span class="p">)</span>
+
+        <span class="n">attr_mtu</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Mtu&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The MAC-level Maximum Transmission Unit&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;30000&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_mtu</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3LteEnbNetDevice</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-lte-enb-net-device-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/lte_simple_net_device.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/lte_simple_net_device.html
new file mode 100644 (file)
index 0000000..69e6484
--- /dev/null
@@ -0,0 +1,135 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.lte_simple_net_device &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.lte_simple_net_device</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3netdevice</span> <span class="kn">import</span> <span class="n">NS3BaseNetDevice</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3LteSimpleNetDevice"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.lte_simple_net_device.NS3LteSimpleNetDevice">[docs]</a><span class="k">class</span> <span class="nc">NS3LteSimpleNetDevice</span><span class="p">(</span><span class="n">NS3BaseNetDevice</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::LteSimpleNetDevice&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">phyrxdrop</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;PhyRxDrop&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source indicating a packet has been dropped by the device during reception&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">phyrxdrop</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3LteSimpleNetDevice</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-lte-simple-net-device-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/lte_ue_net_device.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/lte_ue_net_device.html
new file mode 100644 (file)
index 0000000..2ed03a6
--- /dev/null
@@ -0,0 +1,171 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.lte_ue_net_device &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.lte_ue_net_device</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3netdevice</span> <span class="kn">import</span> <span class="n">NS3BaseNetDevice</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3LteUeNetDevice"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.lte_ue_net_device.NS3LteUeNetDevice">[docs]</a><span class="k">class</span> <span class="nc">NS3LteUeNetDevice</span><span class="p">(</span><span class="n">NS3BaseNetDevice</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::LteUeNetDevice&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_imsi</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Imsi&quot;</span><span class="p">,</span>
+            <span class="s">&quot;International Mobile Subscriber Identity assigned to this UE&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_imsi</span><span class="p">)</span>
+
+        <span class="n">attr_dlearfcn</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;DlEarfcn&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Downlink E-UTRA Absolute Radio Frequency Channel Number (EARFCN) as per 3GPP 36.101 Section 5.7.3. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;100&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_dlearfcn</span><span class="p">)</span>
+
+        <span class="n">attr_csgid</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;CsgId&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The Closed Subscriber Group (CSG) identity that this UE is associated with, i.e., giving the UE access to cells which belong to this particular CSG. This restriction only applies to initial cell selection and EPC-enabled simulation. This does not revoke the UE</span><span class="se">\&#39;</span><span class="s">s access to non-CSG cells. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_csgid</span><span class="p">)</span>
+
+        <span class="n">attr_mtu</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Mtu&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The MAC-level Maximum Transmission Unit&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;30000&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_mtu</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3LteUeNetDevice</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-lte-ue-net-device-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/matrix_propagation_loss_model.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/matrix_propagation_loss_model.html
new file mode 100644 (file)
index 0000000..91e9fbe
--- /dev/null
@@ -0,0 +1,141 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.matrix_propagation_loss_model &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.matrix_propagation_loss_model</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3propagationlossmodel</span> <span class="kn">import</span> <span class="n">NS3BasePropagationLossModel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3MatrixPropagationLossModel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.matrix_propagation_loss_model.NS3MatrixPropagationLossModel">[docs]</a><span class="k">class</span> <span class="nc">NS3MatrixPropagationLossModel</span><span class="p">(</span><span class="n">NS3BasePropagationLossModel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::MatrixPropagationLossModel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_defaultloss</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;DefaultLoss&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The default value for propagation loss, dB.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1.79769e+308&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_defaultloss</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3MatrixPropagationLossModel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-matrix-propagation-loss-model-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/mesh_point_device.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/mesh_point_device.html
new file mode 100644 (file)
index 0000000..aae79d5
--- /dev/null
@@ -0,0 +1,141 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.mesh_point_device &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.mesh_point_device</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3netdevice</span> <span class="kn">import</span> <span class="n">NS3BaseNetDevice</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3MeshPointDevice"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.mesh_point_device.NS3MeshPointDevice">[docs]</a><span class="k">class</span> <span class="nc">NS3MeshPointDevice</span><span class="p">(</span><span class="n">NS3BaseNetDevice</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::MeshPointDevice&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_mtu</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Mtu&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The MAC-level Maximum Transmission Unit&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;65535&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_mtu</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3MeshPointDevice</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-mesh-point-device-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/mesh_wifi_interface_mac.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/mesh_wifi_interface_mac.html
new file mode 100644 (file)
index 0000000..87af1d6
--- /dev/null
@@ -0,0 +1,330 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.mesh_wifi_interface_mac &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.mesh_wifi_interface_mac</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3wifimac</span> <span class="kn">import</span> <span class="n">NS3BaseWifiMac</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3MeshWifiInterfaceMac"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.mesh_wifi_interface_mac.NS3MeshWifiInterfaceMac">[docs]</a><span class="k">class</span> <span class="nc">NS3MeshWifiInterfaceMac</span><span class="p">(</span><span class="n">NS3BaseWifiMac</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::MeshWifiInterfaceMac&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_beaconinterval</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;BeaconInterval&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Beacon Interval&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+500000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_beaconinterval</span><span class="p">)</span>
+
+        <span class="n">attr_randomstart</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;RandomStart&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Window when beacon generating starts (uniform random) in seconds&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+500000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_randomstart</span><span class="p">)</span>
+
+        <span class="n">attr_beacongeneration</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;BeaconGeneration&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Enable/Disable Beaconing.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;True&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_beacongeneration</span><span class="p">)</span>
+
+        <span class="n">attr_qossupported</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;QosSupported&quot;</span><span class="p">,</span>
+            <span class="s">&quot;This Boolean attribute is set to enable 802.11e/WMM-style QoS support at this STA&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;False&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_qossupported</span><span class="p">)</span>
+
+        <span class="n">attr_htsupported</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;HtSupported&quot;</span><span class="p">,</span>
+            <span class="s">&quot;This Boolean attribute is set to enable 802.11n support at this STA&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;False&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_htsupported</span><span class="p">)</span>
+
+        <span class="n">attr_ctstoselfsupported</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;CtsToSelfSupported&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Use CTS to Self when using a rate that is not in the basic set rate&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;False&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_ctstoselfsupported</span><span class="p">)</span>
+
+        <span class="n">attr_ctstimeout</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;CtsTimeout&quot;</span><span class="p">,</span>
+            <span class="s">&quot;When this timeout expires, the RTS/CTS handshake has failed.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+75000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_ctstimeout</span><span class="p">)</span>
+
+        <span class="n">attr_acktimeout</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;AckTimeout&quot;</span><span class="p">,</span>
+            <span class="s">&quot;When this timeout expires, the DATA/ACK handshake has failed.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+75000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_acktimeout</span><span class="p">)</span>
+
+        <span class="n">attr_basicblockacktimeout</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;BasicBlockAckTimeout&quot;</span><span class="p">,</span>
+            <span class="s">&quot;When this timeout expires, the BASIC_BLOCK_ACK_REQ/BASIC_BLOCK_ACK handshake has failed.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+281000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_basicblockacktimeout</span><span class="p">)</span>
+
+        <span class="n">attr_compressedblockacktimeout</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;CompressedBlockAckTimeout&quot;</span><span class="p">,</span>
+            <span class="s">&quot;When this timeout expires, the COMPRESSED_BLOCK_ACK_REQ/COMPRESSED_BLOCK_ACK handshake has failed.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+107000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_compressedblockacktimeout</span><span class="p">)</span>
+
+        <span class="n">attr_sifs</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Sifs&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The value of the SIFS constant.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+16000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_sifs</span><span class="p">)</span>
+
+        <span class="n">attr_eifsnodifs</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;EifsNoDifs&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The value of EIFS-DIFS&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+60000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_eifsnodifs</span><span class="p">)</span>
+
+        <span class="n">attr_slot</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Slot&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The duration of a Slot.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+9000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_slot</span><span class="p">)</span>
+
+        <span class="n">attr_pifs</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Pifs&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The value of the PIFS constant.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+25000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_pifs</span><span class="p">)</span>
+
+        <span class="n">attr_rifs</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Rifs&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The value of the RIFS constant.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+2000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_rifs</span><span class="p">)</span>
+
+        <span class="n">attr_maxpropagationdelay</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxPropagationDelay&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The maximum propagation delay. Unused for now.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+3333.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxpropagationdelay</span><span class="p">)</span>
+
+        <span class="n">attr_ssid</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Ssid&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The ssid we want to belong to.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;default&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_ssid</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">txokheader</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;TxOkHeader&quot;</span><span class="p">,</span> <span class="s">&quot;The header of successfully transmitted packet&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">txokheader</span><span class="p">)</span>
+
+        <span class="n">txerrheader</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;TxErrHeader&quot;</span><span class="p">,</span> <span class="s">&quot;The header of unsuccessfully transmitted packet&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">txerrheader</span><span class="p">)</span>
+
+        <span class="n">mactx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTx&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been received from higher layers and is being processed in preparation for queueing for transmission.&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactx</span><span class="p">)</span>
+
+        <span class="n">mactxdrop</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxDrop&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been dropped in the MAC layer before being queued for transmission.&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxdrop</span><span class="p">)</span>
+
+        <span class="n">macpromiscrx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacPromiscRx&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been received by this device, has been passed up from the physical layer and is being forwarded up the local protocol stack.  This is a promiscuous trace,&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">macpromiscrx</span><span class="p">)</span>
+
+        <span class="n">macrx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacRx&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been received by this device, has been passed up from the physical layer and is being forwarded up the local protocol stack.  This is a non-promiscuous trace,&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">macrx</span><span class="p">)</span>
+
+        <span class="n">macrxdrop</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacRxDrop&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been dropped in the MAC layer after it has been passed up from the physical layer.&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">macrxdrop</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3MeshWifiInterfaceMac</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-mesh-wifi-interface-mac-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/minstrel_wifi_manager.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/minstrel_wifi_manager.html
new file mode 100644 (file)
index 0000000..2c01269
--- /dev/null
@@ -0,0 +1,268 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.minstrel_wifi_manager &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.minstrel_wifi_manager</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3wifiremotestationmanager</span> <span class="kn">import</span> <span class="n">NS3BaseWifiRemoteStationManager</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3MinstrelWifiManager"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.minstrel_wifi_manager.NS3MinstrelWifiManager">[docs]</a><span class="k">class</span> <span class="nc">NS3MinstrelWifiManager</span><span class="p">(</span><span class="n">NS3BaseWifiRemoteStationManager</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::MinstrelWifiManager&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_updatestatistics</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;UpdateStatistics&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The interval between updating statistics table &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+100000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_updatestatistics</span><span class="p">)</span>
+
+        <span class="n">attr_lookaroundrate</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;LookAroundRate&quot;</span><span class="p">,</span>
+            <span class="s">&quot;the percentage to try other rates&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;10&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_lookaroundrate</span><span class="p">)</span>
+
+        <span class="n">attr_ewma</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;EWMA&quot;</span><span class="p">,</span>
+            <span class="s">&quot;EWMA level&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;75&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_ewma</span><span class="p">)</span>
+
+        <span class="n">attr_samplecolumn</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;SampleColumn&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The number of columns used for sampling&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;10&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_samplecolumn</span><span class="p">)</span>
+
+        <span class="n">attr_packetlength</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;PacketLength&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The packet length used for calculating mode TxTime&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1200&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_packetlength</span><span class="p">)</span>
+
+        <span class="n">attr_islowlatency</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;IsLowLatency&quot;</span><span class="p">,</span>
+            <span class="s">&quot;If true, we attempt to modelize a so-called low-latency device: a device where decisions about tx parameters can be made on a per-packet basis and feedback about the transmission of each packet is obtained before sending the next. Otherwise, we modelize a  high-latency device, that is a device where we cannot update our decision about tx parameters after every packet transmission.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;True&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_islowlatency</span><span class="p">)</span>
+
+        <span class="n">attr_maxssrc</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxSsrc&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The maximum number of retransmission attempts for an RTS. This value will not have any effect on some rate control algorithms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;7&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxssrc</span><span class="p">)</span>
+
+        <span class="n">attr_maxslrc</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxSlrc&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The maximum number of retransmission attempts for a DATA packet. This value will not have any effect on some rate control algorithms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;7&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxslrc</span><span class="p">)</span>
+
+        <span class="n">attr_rtsctsthreshold</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;RtsCtsThreshold&quot;</span><span class="p">,</span>
+            <span class="s">&quot;If  the size of the data packet + LLC header + MAC header + FCS trailer is bigger than this value, we use an RTS/CTS handshake before sending the data, as per IEEE Std. 802.11-2012, Section 9.3.5. This value will not have any effect on some rate control algorithms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;2346&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_rtsctsthreshold</span><span class="p">)</span>
+
+        <span class="n">attr_fragmentationthreshold</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;FragmentationThreshold&quot;</span><span class="p">,</span>
+            <span class="s">&quot;If the size of the data packet + LLC header + MAC header + FCS trailer is biggerthan this value, we fragment it such that the size of the fragments are equal or smaller than this value, as per IEEE Std. 802.11-2012, Section 9.5. This value will not have any effect on some rate control algorithms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;2346&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_fragmentationthreshold</span><span class="p">)</span>
+
+        <span class="n">attr_nonunicastmode</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;NonUnicastMode&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Wifi mode used for non-unicast transmissions.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;Invalid-WifiMode&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_nonunicastmode</span><span class="p">)</span>
+
+        <span class="n">attr_defaulttxpowerlevel</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;DefaultTxPowerLevel&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Default power level to be used for transmissions. This is the power level that is used by all those WifiManagers that do notimplement TX power control.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_defaulttxpowerlevel</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">mactxrtsfailed</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxRtsFailed&quot;</span><span class="p">,</span> <span class="s">&quot;The transmission of a RTS by the MAC layer has failed&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxrtsfailed</span><span class="p">)</span>
+
+        <span class="n">mactxdatafailed</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxDataFailed&quot;</span><span class="p">,</span> <span class="s">&quot;The transmission of a data packet by the MAC layer has failed&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxdatafailed</span><span class="p">)</span>
+
+        <span class="n">mactxfinalrtsfailed</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxFinalRtsFailed&quot;</span><span class="p">,</span> <span class="s">&quot;The transmission of a RTS has exceeded the maximum number of attempts&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxfinalrtsfailed</span><span class="p">)</span>
+
+        <span class="n">mactxfinaldatafailed</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxFinalDataFailed&quot;</span><span class="p">,</span> <span class="s">&quot;The transmission of a data packet has exceeded the maximum number of attempts&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxfinaldatafailed</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3MinstrelWifiManager</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-minstrel-wifi-manager-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/multi_model_spectrum_channel.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/multi_model_spectrum_channel.html
new file mode 100644 (file)
index 0000000..c80bd72
--- /dev/null
@@ -0,0 +1,156 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.multi_model_spectrum_channel &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.multi_model_spectrum_channel</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3channel</span> <span class="kn">import</span> <span class="n">NS3BaseChannel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3MultiModelSpectrumChannel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.multi_model_spectrum_channel.NS3MultiModelSpectrumChannel">[docs]</a><span class="k">class</span> <span class="nc">NS3MultiModelSpectrumChannel</span><span class="p">(</span><span class="n">NS3BaseChannel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::MultiModelSpectrumChannel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_maxlossdb</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxLossDb&quot;</span><span class="p">,</span>
+            <span class="s">&quot;If a single-frequency PropagationLossModel is used, this value represents the maximum loss in dB for which transmissions will be passed to the receiving PHY. Signals for which the PropagationLossModel returns a loss bigger than this value will not be propagated to the receiver. This parameter is to be used to reduce the computational load by not propagating signals that are far beyond the interference range. Note that the default value corresponds to considering all signals for reception. Tune this value with care. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1e+09&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxlossdb</span><span class="p">)</span>
+
+        <span class="n">attr_id</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Id&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The id (unique integer) of this Channel.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">NoWrite</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_id</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">pathloss</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;PathLoss&quot;</span><span class="p">,</span> <span class="s">&quot;This trace is fired whenever a new path loss value is calculated. The first and second parameters to the trace are pointers respectively to the TX and RX SpectrumPhy instances, whereas the third parameters is the loss value in dB. Note that the loss value reported by this trace is the single-frequency loss value obtained by evaluating only the TX and RX AntennaModels and the PropagationLossModel. In particular, note that SpectrumPropagationLossModel (even if present) is never used to evaluate the loss value reported in this trace. &quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">pathloss</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3MultiModelSpectrumChannel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-multi-model-spectrum-channel-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/nakagami_propagation_loss_model.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/nakagami_propagation_loss_model.html
new file mode 100644 (file)
index 0000000..17d6e92
--- /dev/null
@@ -0,0 +1,201 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.nakagami_propagation_loss_model &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.nakagami_propagation_loss_model</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3propagationlossmodel</span> <span class="kn">import</span> <span class="n">NS3BasePropagationLossModel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3NakagamiPropagationLossModel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.nakagami_propagation_loss_model.NS3NakagamiPropagationLossModel">[docs]</a><span class="k">class</span> <span class="nc">NS3NakagamiPropagationLossModel</span><span class="p">(</span><span class="n">NS3BasePropagationLossModel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::NakagamiPropagationLossModel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_distance1</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Distance1&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Beginning of the second distance field. Default is 80m.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;80&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_distance1</span><span class="p">)</span>
+
+        <span class="n">attr_distance2</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Distance2&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Beginning of the third distance field. Default is 200m.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;200&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_distance2</span><span class="p">)</span>
+
+        <span class="n">attr_m0</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;m0&quot;</span><span class="p">,</span>
+            <span class="s">&quot;m0 for distances smaller than Distance1. Default is 1.5.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1.5&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_m0</span><span class="p">)</span>
+
+        <span class="n">attr_m1</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;m1&quot;</span><span class="p">,</span>
+            <span class="s">&quot;m1 for distances smaller than Distance2. Default is 0.75.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0.75&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_m1</span><span class="p">)</span>
+
+        <span class="n">attr_m2</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;m2&quot;</span><span class="p">,</span>
+            <span class="s">&quot;m2 for distances greater than Distance2. Default is 0.75.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0.75&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_m2</span><span class="p">)</span>
+
+        <span class="n">attr_erlangrv</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ErlangRv&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Access to the underlying ErlangRandomVariable&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ns3::ErlangRandomVariable&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_erlangrv</span><span class="p">)</span>
+
+        <span class="n">attr_gammarv</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;GammaRv&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Access to the underlying GammaRandomVariable&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ns3::GammaRandomVariable&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_gammarv</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3NakagamiPropagationLossModel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-nakagami-propagation-loss-model-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/nist_error_rate_model.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/nist_error_rate_model.html
new file mode 100644 (file)
index 0000000..d692400
--- /dev/null
@@ -0,0 +1,130 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.nist_error_rate_model &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.nist_error_rate_model</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3errorratemodel</span> <span class="kn">import</span> <span class="n">NS3BaseErrorRateModel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3NistErrorRateModel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.nist_error_rate_model.NS3NistErrorRateModel">[docs]</a><span class="k">class</span> <span class="nc">NS3NistErrorRateModel</span><span class="p">(</span><span class="n">NS3BaseErrorRateModel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::NistErrorRateModel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3NistErrorRateModel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-nist-error-rate-model-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/node.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/node.html
new file mode 100644 (file)
index 0000000..dfc75d3
--- /dev/null
@@ -0,0 +1,151 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.node &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.node</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3node</span> <span class="kn">import</span> <span class="n">NS3BaseNode</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3Node"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.node.NS3Node">[docs]</a><span class="k">class</span> <span class="nc">NS3Node</span><span class="p">(</span><span class="n">NS3BaseNode</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::Node&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_id</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Id&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The id (unique integer) of this Node.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">NoWrite</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_id</span><span class="p">)</span>
+
+        <span class="n">attr_systemid</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;SystemId&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The systemId of this node: a unique integer used for parallel simulations.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_systemid</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3Node</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-node-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/non_communicating_net_device.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/non_communicating_net_device.html
new file mode 100644 (file)
index 0000000..40302c4
--- /dev/null
@@ -0,0 +1,130 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.non_communicating_net_device &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.non_communicating_net_device</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3netdevice</span> <span class="kn">import</span> <span class="n">NS3BaseNetDevice</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3NonCommunicatingNetDevice"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.non_communicating_net_device.NS3NonCommunicatingNetDevice">[docs]</a><span class="k">class</span> <span class="nc">NS3NonCommunicatingNetDevice</span><span class="p">(</span><span class="n">NS3BaseNetDevice</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::NonCommunicatingNetDevice&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3NonCommunicatingNetDevice</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-non-communicating-net-device-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/ocb_wifi_mac.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/ocb_wifi_mac.html
new file mode 100644 (file)
index 0000000..fe0ad5f
--- /dev/null
@@ -0,0 +1,300 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.ocb_wifi_mac &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.ocb_wifi_mac</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3wifimac</span> <span class="kn">import</span> <span class="n">NS3BaseWifiMac</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3OcbWifiMac"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.ocb_wifi_mac.NS3OcbWifiMac">[docs]</a><span class="k">class</span> <span class="nc">NS3OcbWifiMac</span><span class="p">(</span><span class="n">NS3BaseWifiMac</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::OcbWifiMac&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_qossupported</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;QosSupported&quot;</span><span class="p">,</span>
+            <span class="s">&quot;This Boolean attribute is set to enable 802.11e/WMM-style QoS support at this STA&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;False&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_qossupported</span><span class="p">)</span>
+
+        <span class="n">attr_htsupported</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;HtSupported&quot;</span><span class="p">,</span>
+            <span class="s">&quot;This Boolean attribute is set to enable 802.11n support at this STA&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;False&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_htsupported</span><span class="p">)</span>
+
+        <span class="n">attr_ctstoselfsupported</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;CtsToSelfSupported&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Use CTS to Self when using a rate that is not in the basic set rate&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;False&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_ctstoselfsupported</span><span class="p">)</span>
+
+        <span class="n">attr_ctstimeout</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;CtsTimeout&quot;</span><span class="p">,</span>
+            <span class="s">&quot;When this timeout expires, the RTS/CTS handshake has failed.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+75000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_ctstimeout</span><span class="p">)</span>
+
+        <span class="n">attr_acktimeout</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;AckTimeout&quot;</span><span class="p">,</span>
+            <span class="s">&quot;When this timeout expires, the DATA/ACK handshake has failed.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+75000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_acktimeout</span><span class="p">)</span>
+
+        <span class="n">attr_basicblockacktimeout</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;BasicBlockAckTimeout&quot;</span><span class="p">,</span>
+            <span class="s">&quot;When this timeout expires, the BASIC_BLOCK_ACK_REQ/BASIC_BLOCK_ACK handshake has failed.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+281000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_basicblockacktimeout</span><span class="p">)</span>
+
+        <span class="n">attr_compressedblockacktimeout</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;CompressedBlockAckTimeout&quot;</span><span class="p">,</span>
+            <span class="s">&quot;When this timeout expires, the COMPRESSED_BLOCK_ACK_REQ/COMPRESSED_BLOCK_ACK handshake has failed.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+107000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_compressedblockacktimeout</span><span class="p">)</span>
+
+        <span class="n">attr_sifs</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Sifs&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The value of the SIFS constant.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+16000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_sifs</span><span class="p">)</span>
+
+        <span class="n">attr_eifsnodifs</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;EifsNoDifs&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The value of EIFS-DIFS&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+60000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_eifsnodifs</span><span class="p">)</span>
+
+        <span class="n">attr_slot</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Slot&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The duration of a Slot.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+9000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_slot</span><span class="p">)</span>
+
+        <span class="n">attr_pifs</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Pifs&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The value of the PIFS constant.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+25000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_pifs</span><span class="p">)</span>
+
+        <span class="n">attr_rifs</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Rifs&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The value of the RIFS constant.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+2000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_rifs</span><span class="p">)</span>
+
+        <span class="n">attr_maxpropagationdelay</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxPropagationDelay&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The maximum propagation delay. Unused for now.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+3333.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxpropagationdelay</span><span class="p">)</span>
+
+        <span class="n">attr_ssid</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Ssid&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The ssid we want to belong to.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;default&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_ssid</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">txokheader</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;TxOkHeader&quot;</span><span class="p">,</span> <span class="s">&quot;The header of successfully transmitted packet&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">txokheader</span><span class="p">)</span>
+
+        <span class="n">txerrheader</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;TxErrHeader&quot;</span><span class="p">,</span> <span class="s">&quot;The header of unsuccessfully transmitted packet&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">txerrheader</span><span class="p">)</span>
+
+        <span class="n">mactx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTx&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been received from higher layers and is being processed in preparation for queueing for transmission.&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactx</span><span class="p">)</span>
+
+        <span class="n">mactxdrop</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxDrop&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been dropped in the MAC layer before being queued for transmission.&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxdrop</span><span class="p">)</span>
+
+        <span class="n">macpromiscrx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacPromiscRx&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been received by this device, has been passed up from the physical layer and is being forwarded up the local protocol stack.  This is a promiscuous trace,&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">macpromiscrx</span><span class="p">)</span>
+
+        <span class="n">macrx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacRx&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been received by this device, has been passed up from the physical layer and is being forwarded up the local protocol stack.  This is a non-promiscuous trace,&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">macrx</span><span class="p">)</span>
+
+        <span class="n">macrxdrop</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacRxDrop&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been dropped in the MAC layer after it has been passed up from the physical layer.&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">macrxdrop</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3OcbWifiMac</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-ocb-wifi-mac-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/oh_buildings_propagation_loss_model.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/oh_buildings_propagation_loss_model.html
new file mode 100644 (file)
index 0000000..ceaa4ab
--- /dev/null
@@ -0,0 +1,171 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.oh_buildings_propagation_loss_model &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.oh_buildings_propagation_loss_model</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3propagationlossmodel</span> <span class="kn">import</span> <span class="n">NS3BasePropagationLossModel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3OhBuildingsPropagationLossModel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.oh_buildings_propagation_loss_model.NS3OhBuildingsPropagationLossModel">[docs]</a><span class="k">class</span> <span class="nc">NS3OhBuildingsPropagationLossModel</span><span class="p">(</span><span class="n">NS3BasePropagationLossModel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::OhBuildingsPropagationLossModel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_shadowsigmaoutdoor</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ShadowSigmaOutdoor&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Standard deviation of the normal distribution used for calculate the shadowing for outdoor nodes&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;7&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_shadowsigmaoutdoor</span><span class="p">)</span>
+
+        <span class="n">attr_shadowsigmaindoor</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ShadowSigmaIndoor&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Standard deviation of the normal distribution used for calculate the shadowing for indoor nodes &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;8&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_shadowsigmaindoor</span><span class="p">)</span>
+
+        <span class="n">attr_shadowsigmaextwalls</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ShadowSigmaExtWalls&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Standard deviation of the normal distribution used for calculate the shadowing due to ext walls &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;5&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_shadowsigmaextwalls</span><span class="p">)</span>
+
+        <span class="n">attr_internalwallloss</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;InternalWallLoss&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Additional loss for each internal wall [dB]&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;5&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_internalwallloss</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3OhBuildingsPropagationLossModel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-oh-buildings-propagation-loss-model-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/okumura_hata_propagation_loss_model.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/okumura_hata_propagation_loss_model.html
new file mode 100644 (file)
index 0000000..6426f91
--- /dev/null
@@ -0,0 +1,161 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.okumura_hata_propagation_loss_model &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.okumura_hata_propagation_loss_model</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3propagationlossmodel</span> <span class="kn">import</span> <span class="n">NS3BasePropagationLossModel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3OkumuraHataPropagationLossModel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.okumura_hata_propagation_loss_model.NS3OkumuraHataPropagationLossModel">[docs]</a><span class="k">class</span> <span class="nc">NS3OkumuraHataPropagationLossModel</span><span class="p">(</span><span class="n">NS3BasePropagationLossModel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::OkumuraHataPropagationLossModel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_frequency</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Frequency&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The propagation frequency in Hz&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;2.16e+09&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_frequency</span><span class="p">)</span>
+
+        <span class="n">attr_environment</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Environment&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Environment Scenario&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Enumerate</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;Urban&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;Urban&quot;</span><span class="p">,</span><span class="s">&quot;SubUrban&quot;</span><span class="p">,</span><span class="s">&quot;OpenAreas&quot;</span><span class="p">],</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_environment</span><span class="p">)</span>
+
+        <span class="n">attr_citysize</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;CitySize&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Dimension of the city&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Enumerate</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;Large&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;Small&quot;</span><span class="p">,</span><span class="s">&quot;Medium&quot;</span><span class="p">,</span><span class="s">&quot;Large&quot;</span><span class="p">],</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_citysize</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3OkumuraHataPropagationLossModel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-okumura-hata-propagation-loss-model-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/on_off_application.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/on_off_application.html
new file mode 100644 (file)
index 0000000..d077a61
--- /dev/null
@@ -0,0 +1,226 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.on_off_application &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.on_off_application</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3application</span> <span class="kn">import</span> <span class="n">NS3BaseApplication</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3OnOffApplication"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.on_off_application.NS3OnOffApplication">[docs]</a><span class="k">class</span> <span class="nc">NS3OnOffApplication</span><span class="p">(</span><span class="n">NS3BaseApplication</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::OnOffApplication&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_datarate</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;DataRate&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The data rate in on state.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;500000bps&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_datarate</span><span class="p">)</span>
+
+        <span class="n">attr_packetsize</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;PacketSize&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The size of packets sent in on state&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;512&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_packetsize</span><span class="p">)</span>
+
+        <span class="n">attr_remote</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Remote&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The address of the destination&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;00-00-00&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_remote</span><span class="p">)</span>
+
+        <span class="n">attr_ontime</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;OnTime&quot;</span><span class="p">,</span>
+            <span class="s">&quot;A RandomVariableStream used to pick the duration of the </span><span class="se">\&#39;</span><span class="s">On</span><span class="se">\&#39;</span><span class="s"> state.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ns3::ConstantRandomVariable[Constant=1.0]&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_ontime</span><span class="p">)</span>
+
+        <span class="n">attr_offtime</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;OffTime&quot;</span><span class="p">,</span>
+            <span class="s">&quot;A RandomVariableStream used to pick the duration of the </span><span class="se">\&#39;</span><span class="s">Off</span><span class="se">\&#39;</span><span class="s"> state.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ns3::ConstantRandomVariable[Constant=1.0]&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_offtime</span><span class="p">)</span>
+
+        <span class="n">attr_maxbytes</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxBytes&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The total number of bytes to send. Once these bytes are sent, no packet is sent again, even in on state. The value zero means that there is no limit.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxbytes</span><span class="p">)</span>
+
+        <span class="n">attr_protocol</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Protocol&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The type of protocol to use.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ns3::UdpSocketFactory&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_protocol</span><span class="p">)</span>
+
+        <span class="n">attr_starttime</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;StartTime&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Time at which the application will start&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+0.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_starttime</span><span class="p">)</span>
+
+        <span class="n">attr_stoptime</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;StopTime&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Time at which the application will stop&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+0.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_stoptime</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">tx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;Tx&quot;</span><span class="p">,</span> <span class="s">&quot;A new packet is created and is sent&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">tx</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3OnOffApplication</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-on-off-application-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/onoe_wifi_manager.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/onoe_wifi_manager.html
new file mode 100644 (file)
index 0000000..5a65730
--- /dev/null
@@ -0,0 +1,248 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.onoe_wifi_manager &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.onoe_wifi_manager</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3wifiremotestationmanager</span> <span class="kn">import</span> <span class="n">NS3BaseWifiRemoteStationManager</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3OnoeWifiManager"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.onoe_wifi_manager.NS3OnoeWifiManager">[docs]</a><span class="k">class</span> <span class="nc">NS3OnoeWifiManager</span><span class="p">(</span><span class="n">NS3BaseWifiRemoteStationManager</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::OnoeWifiManager&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_updateperiod</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;UpdatePeriod&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The interval between decisions about rate control changes&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+1000000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_updateperiod</span><span class="p">)</span>
+
+        <span class="n">attr_raisethreshold</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;RaiseThreshold&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Attempt to raise the rate if we hit that threshold&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;10&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_raisethreshold</span><span class="p">)</span>
+
+        <span class="n">attr_addcreditthreshold</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;AddCreditThreshold&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Add credit threshold&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;10&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_addcreditthreshold</span><span class="p">)</span>
+
+        <span class="n">attr_islowlatency</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;IsLowLatency&quot;</span><span class="p">,</span>
+            <span class="s">&quot;If true, we attempt to modelize a so-called low-latency device: a device where decisions about tx parameters can be made on a per-packet basis and feedback about the transmission of each packet is obtained before sending the next. Otherwise, we modelize a  high-latency device, that is a device where we cannot update our decision about tx parameters after every packet transmission.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;True&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_islowlatency</span><span class="p">)</span>
+
+        <span class="n">attr_maxssrc</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxSsrc&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The maximum number of retransmission attempts for an RTS. This value will not have any effect on some rate control algorithms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;7&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxssrc</span><span class="p">)</span>
+
+        <span class="n">attr_maxslrc</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxSlrc&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The maximum number of retransmission attempts for a DATA packet. This value will not have any effect on some rate control algorithms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;7&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxslrc</span><span class="p">)</span>
+
+        <span class="n">attr_rtsctsthreshold</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;RtsCtsThreshold&quot;</span><span class="p">,</span>
+            <span class="s">&quot;If  the size of the data packet + LLC header + MAC header + FCS trailer is bigger than this value, we use an RTS/CTS handshake before sending the data, as per IEEE Std. 802.11-2012, Section 9.3.5. This value will not have any effect on some rate control algorithms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;2346&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_rtsctsthreshold</span><span class="p">)</span>
+
+        <span class="n">attr_fragmentationthreshold</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;FragmentationThreshold&quot;</span><span class="p">,</span>
+            <span class="s">&quot;If the size of the data packet + LLC header + MAC header + FCS trailer is biggerthan this value, we fragment it such that the size of the fragments are equal or smaller than this value, as per IEEE Std. 802.11-2012, Section 9.5. This value will not have any effect on some rate control algorithms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;2346&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_fragmentationthreshold</span><span class="p">)</span>
+
+        <span class="n">attr_nonunicastmode</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;NonUnicastMode&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Wifi mode used for non-unicast transmissions.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;Invalid-WifiMode&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_nonunicastmode</span><span class="p">)</span>
+
+        <span class="n">attr_defaulttxpowerlevel</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;DefaultTxPowerLevel&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Default power level to be used for transmissions. This is the power level that is used by all those WifiManagers that do notimplement TX power control.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_defaulttxpowerlevel</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">mactxrtsfailed</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxRtsFailed&quot;</span><span class="p">,</span> <span class="s">&quot;The transmission of a RTS by the MAC layer has failed&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxrtsfailed</span><span class="p">)</span>
+
+        <span class="n">mactxdatafailed</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxDataFailed&quot;</span><span class="p">,</span> <span class="s">&quot;The transmission of a data packet by the MAC layer has failed&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxdatafailed</span><span class="p">)</span>
+
+        <span class="n">mactxfinalrtsfailed</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxFinalRtsFailed&quot;</span><span class="p">,</span> <span class="s">&quot;The transmission of a RTS has exceeded the maximum number of attempts&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxfinalrtsfailed</span><span class="p">)</span>
+
+        <span class="n">mactxfinaldatafailed</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxFinalDataFailed&quot;</span><span class="p">,</span> <span class="s">&quot;The transmission of a data packet has exceeded the maximum number of attempts&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxfinaldatafailed</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3OnoeWifiManager</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-onoe-wifi-manager-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/packet_sink.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/packet_sink.html
new file mode 100644 (file)
index 0000000..06afb05
--- /dev/null
@@ -0,0 +1,176 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.packet_sink &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.packet_sink</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3application</span> <span class="kn">import</span> <span class="n">NS3BaseApplication</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3PacketSink"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.packet_sink.NS3PacketSink">[docs]</a><span class="k">class</span> <span class="nc">NS3PacketSink</span><span class="p">(</span><span class="n">NS3BaseApplication</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::PacketSink&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_local</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Local&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The Address on which to Bind the rx socket.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;00-00-00&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_local</span><span class="p">)</span>
+
+        <span class="n">attr_protocol</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Protocol&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The type id of the protocol to use for the rx socket.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ns3::UdpSocketFactory&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_protocol</span><span class="p">)</span>
+
+        <span class="n">attr_starttime</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;StartTime&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Time at which the application will start&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+0.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_starttime</span><span class="p">)</span>
+
+        <span class="n">attr_stoptime</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;StopTime&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Time at which the application will stop&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+0.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_stoptime</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">rx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;Rx&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been received&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">rx</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3PacketSink</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-packet-sink-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/ping6.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/ping6.html
new file mode 100644 (file)
index 0000000..7800ecf
--- /dev/null
@@ -0,0 +1,201 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.ping6 &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.ping6</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3application</span> <span class="kn">import</span> <span class="n">NS3BaseApplication</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3Ping6"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.ping6.NS3Ping6">[docs]</a><span class="k">class</span> <span class="nc">NS3Ping6</span><span class="p">(</span><span class="n">NS3BaseApplication</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::Ping6&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_maxpackets</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxPackets&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The maximum number of packets the application will send&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;100&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxpackets</span><span class="p">)</span>
+
+        <span class="n">attr_interval</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Interval&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The time to wait between packets&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+1000000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_interval</span><span class="p">)</span>
+
+        <span class="n">attr_remoteipv6</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;RemoteIpv6&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The Ipv6Address of the outbound packets&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;::&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_remoteipv6</span><span class="p">)</span>
+
+        <span class="n">attr_localipv6</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;LocalIpv6&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Local Ipv6Address of the sender&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;::&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_localipv6</span><span class="p">)</span>
+
+        <span class="n">attr_packetsize</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;PacketSize&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Size of packets generated&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;100&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_packetsize</span><span class="p">)</span>
+
+        <span class="n">attr_starttime</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;StartTime&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Time at which the application will start&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+0.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_starttime</span><span class="p">)</span>
+
+        <span class="n">attr_stoptime</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;StopTime&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Time at which the application will stop&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+0.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_stoptime</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3Ping6</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-ping6-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/point_to_point_channel.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/point_to_point_channel.html
new file mode 100644 (file)
index 0000000..9633c16
--- /dev/null
@@ -0,0 +1,156 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.point_to_point_channel &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.point_to_point_channel</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3channel</span> <span class="kn">import</span> <span class="n">NS3BaseChannel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3PointToPointChannel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.point_to_point_channel.NS3PointToPointChannel">[docs]</a><span class="k">class</span> <span class="nc">NS3PointToPointChannel</span><span class="p">(</span><span class="n">NS3BaseChannel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::PointToPointChannel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_delay</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Delay&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Transmission delay through the channel&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+0.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_delay</span><span class="p">)</span>
+
+        <span class="n">attr_id</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Id&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The id (unique integer) of this Channel.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">NoWrite</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_id</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">txrxpointtopoint</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;TxRxPointToPoint&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source indicating transmission of packet from the PointToPointChannel, used by the Animation interface.&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">txrxpointtopoint</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3PointToPointChannel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-point-to-point-channel-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/point_to_point_net_device.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/point_to_point_net_device.html
new file mode 100644 (file)
index 0000000..b03bacf
--- /dev/null
@@ -0,0 +1,216 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.point_to_point_net_device &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.point_to_point_net_device</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3netdevice</span> <span class="kn">import</span> <span class="n">NS3BaseNetDevice</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3PointToPointNetDevice"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.point_to_point_net_device.NS3PointToPointNetDevice">[docs]</a><span class="k">class</span> <span class="nc">NS3PointToPointNetDevice</span><span class="p">(</span><span class="n">NS3BaseNetDevice</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::PointToPointNetDevice&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_mtu</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Mtu&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The MAC-level Maximum Transmission Unit&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1500&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_mtu</span><span class="p">)</span>
+
+        <span class="n">attr_address</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Address&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The MAC address of this device.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ff:ff:ff:ff:ff:ff&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_address</span><span class="p">)</span>
+
+        <span class="n">attr_datarate</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;DataRate&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The default data rate for point to point links&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;32768bps&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_datarate</span><span class="p">)</span>
+
+        <span class="n">attr_interframegap</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;InterframeGap&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The time to wait between packet (frame) transmissions&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+0.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_interframegap</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">mactx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTx&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source indicating a packet has arrived for transmission by this device&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactx</span><span class="p">)</span>
+
+        <span class="n">mactxdrop</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxDrop&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source indicating a packet has been dropped by the device before transmission&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxdrop</span><span class="p">)</span>
+
+        <span class="n">macpromiscrx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacPromiscRx&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been received by this device, has been passed up from the physical layer and is being forwarded up the local protocol stack.  This is a promiscuous trace,&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">macpromiscrx</span><span class="p">)</span>
+
+        <span class="n">macrx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacRx&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been received by this device, has been passed up from the physical layer and is being forwarded up the local protocol stack.  This is a non-promiscuous trace,&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">macrx</span><span class="p">)</span>
+
+        <span class="n">phytxbegin</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;PhyTxBegin&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source indicating a packet has begun transmitting over the channel&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">phytxbegin</span><span class="p">)</span>
+
+        <span class="n">phytxend</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;PhyTxEnd&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source indicating a packet has been completely transmitted over the channel&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">phytxend</span><span class="p">)</span>
+
+        <span class="n">phytxdrop</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;PhyTxDrop&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source indicating a packet has been dropped by the device during transmission&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">phytxdrop</span><span class="p">)</span>
+
+        <span class="n">phyrxend</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;PhyRxEnd&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source indicating a packet has been completely received by the device&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">phyrxend</span><span class="p">)</span>
+
+        <span class="n">phyrxdrop</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;PhyRxDrop&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source indicating a packet has been dropped by the device during reception&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">phyrxdrop</span><span class="p">)</span>
+
+        <span class="n">sniffer</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;Sniffer&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source simulating a non-promiscuous packet sniffer attached to the device&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">sniffer</span><span class="p">)</span>
+
+        <span class="n">promiscsniffer</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;PromiscSniffer&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source simulating a promiscuous packet sniffer attached to the device&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">promiscsniffer</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3PointToPointNetDevice</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-point-to-point-net-device-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/point_to_point_remote_channel.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/point_to_point_remote_channel.html
new file mode 100644 (file)
index 0000000..06166e8
--- /dev/null
@@ -0,0 +1,156 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.point_to_point_remote_channel &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.point_to_point_remote_channel</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3channel</span> <span class="kn">import</span> <span class="n">NS3BaseChannel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3PointToPointRemoteChannel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.point_to_point_remote_channel.NS3PointToPointRemoteChannel">[docs]</a><span class="k">class</span> <span class="nc">NS3PointToPointRemoteChannel</span><span class="p">(</span><span class="n">NS3BaseChannel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::PointToPointRemoteChannel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_delay</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Delay&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Transmission delay through the channel&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+0.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_delay</span><span class="p">)</span>
+
+        <span class="n">attr_id</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Id&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The id (unique integer) of this Channel.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">NoWrite</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_id</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">txrxpointtopoint</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;TxRxPointToPoint&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source indicating transmission of packet from the PointToPointChannel, used by the Animation interface.&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">txrxpointtopoint</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3PointToPointRemoteChannel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-point-to-point-remote-channel-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/radvd.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/radvd.html
new file mode 100644 (file)
index 0000000..0aa42df
--- /dev/null
@@ -0,0 +1,161 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.radvd &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.radvd</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3application</span> <span class="kn">import</span> <span class="n">NS3BaseApplication</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3Radvd"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.radvd.NS3Radvd">[docs]</a><span class="k">class</span> <span class="nc">NS3Radvd</span><span class="p">(</span><span class="n">NS3BaseApplication</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::Radvd&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_advertisementjitter</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;AdvertisementJitter&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Uniform variable to provide jitter between min and max values of AdvInterval&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ns3::UniformRandomVariable&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_advertisementjitter</span><span class="p">)</span>
+
+        <span class="n">attr_starttime</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;StartTime&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Time at which the application will start&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+0.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_starttime</span><span class="p">)</span>
+
+        <span class="n">attr_stoptime</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;StopTime&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Time at which the application will stop&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+0.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_stoptime</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3Radvd</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-radvd-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/random_direction2d_mobility_model.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/random_direction2d_mobility_model.html
new file mode 100644 (file)
index 0000000..22efa32
--- /dev/null
@@ -0,0 +1,186 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.random_direction2d_mobility_model &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.random_direction2d_mobility_model</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3mobilitymodel</span> <span class="kn">import</span> <span class="n">NS3BaseMobilityModel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3RandomDirection2dMobilityModel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.random_direction2d_mobility_model.NS3RandomDirection2dMobilityModel">[docs]</a><span class="k">class</span> <span class="nc">NS3RandomDirection2dMobilityModel</span><span class="p">(</span><span class="n">NS3BaseMobilityModel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::RandomDirection2dMobilityModel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_bounds</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Bounds&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The 2d bounding area&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;-100|100|-100|100&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_bounds</span><span class="p">)</span>
+
+        <span class="n">attr_speed</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Speed&quot;</span><span class="p">,</span>
+            <span class="s">&quot;A random variable to control the speed (m/s).&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ns3::UniformRandomVariable[Min=1.0|Max=2.0]&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_speed</span><span class="p">)</span>
+
+        <span class="n">attr_pause</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Pause&quot;</span><span class="p">,</span>
+            <span class="s">&quot;A random variable to control the pause (s).&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ns3::ConstantRandomVariable[Constant=2.0]&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_pause</span><span class="p">)</span>
+
+        <span class="n">attr_position</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Position&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The current position of the mobility model.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0:0:0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_position</span><span class="p">)</span>
+
+        <span class="n">attr_velocity</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Velocity&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The current velocity of the mobility model.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0:0:0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">NoWrite</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_velocity</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">coursechange</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;CourseChange&quot;</span><span class="p">,</span> <span class="s">&quot;The value of the position and/or velocity vector changed&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">coursechange</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3RandomDirection2dMobilityModel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-random-direction2d-mobility-model-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/random_propagation_delay_model.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/random_propagation_delay_model.html
new file mode 100644 (file)
index 0000000..013f9fd
--- /dev/null
@@ -0,0 +1,141 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.random_propagation_delay_model &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.random_propagation_delay_model</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3propagationdelaymodel</span> <span class="kn">import</span> <span class="n">NS3BasePropagationDelayModel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3RandomPropagationDelayModel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.random_propagation_delay_model.NS3RandomPropagationDelayModel">[docs]</a><span class="k">class</span> <span class="nc">NS3RandomPropagationDelayModel</span><span class="p">(</span><span class="n">NS3BasePropagationDelayModel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::RandomPropagationDelayModel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_variable</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Variable&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The random variable which generates random delays (s).&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ns3::UniformRandomVariable&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_variable</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3RandomPropagationDelayModel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-random-propagation-delay-model-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/random_propagation_loss_model.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/random_propagation_loss_model.html
new file mode 100644 (file)
index 0000000..67dfe0f
--- /dev/null
@@ -0,0 +1,141 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.random_propagation_loss_model &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.random_propagation_loss_model</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3propagationlossmodel</span> <span class="kn">import</span> <span class="n">NS3BasePropagationLossModel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3RandomPropagationLossModel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.random_propagation_loss_model.NS3RandomPropagationLossModel">[docs]</a><span class="k">class</span> <span class="nc">NS3RandomPropagationLossModel</span><span class="p">(</span><span class="n">NS3BasePropagationLossModel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::RandomPropagationLossModel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_variable</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Variable&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The random variable used to pick a loss everytime CalcRxPower is invoked.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ns3::ConstantRandomVariable[Constant=1.0]&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_variable</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3RandomPropagationLossModel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-random-propagation-loss-model-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/random_walk2d_mobility_model.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/random_walk2d_mobility_model.html
new file mode 100644 (file)
index 0000000..2baf6a8
--- /dev/null
@@ -0,0 +1,216 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.random_walk2d_mobility_model &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.random_walk2d_mobility_model</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3mobilitymodel</span> <span class="kn">import</span> <span class="n">NS3BaseMobilityModel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3RandomWalk2dMobilityModel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.random_walk2d_mobility_model.NS3RandomWalk2dMobilityModel">[docs]</a><span class="k">class</span> <span class="nc">NS3RandomWalk2dMobilityModel</span><span class="p">(</span><span class="n">NS3BaseMobilityModel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::RandomWalk2dMobilityModel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_bounds</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Bounds&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Bounds of the area to cruise.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0|100|0|100&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_bounds</span><span class="p">)</span>
+
+        <span class="n">attr_time</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Time&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Change current direction and speed after moving for this delay.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+1000000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_time</span><span class="p">)</span>
+
+        <span class="n">attr_distance</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Distance&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Change current direction and speed after moving for this distance.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_distance</span><span class="p">)</span>
+
+        <span class="n">attr_mode</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Mode&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The mode indicates the condition used to change the current speed and direction&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Enumerate</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;Distance&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;Distance&quot;</span><span class="p">,</span><span class="s">&quot;Time&quot;</span><span class="p">],</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_mode</span><span class="p">)</span>
+
+        <span class="n">attr_direction</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Direction&quot;</span><span class="p">,</span>
+            <span class="s">&quot;A random variable used to pick the direction (gradients).&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ns3::UniformRandomVariable[Min=0.0|Max=6.283184]&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_direction</span><span class="p">)</span>
+
+        <span class="n">attr_speed</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Speed&quot;</span><span class="p">,</span>
+            <span class="s">&quot;A random variable used to pick the speed (m/s).&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ns3::UniformRandomVariable[Min=2.0|Max=4.0]&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_speed</span><span class="p">)</span>
+
+        <span class="n">attr_position</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Position&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The current position of the mobility model.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0:0:0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_position</span><span class="p">)</span>
+
+        <span class="n">attr_velocity</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Velocity&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The current velocity of the mobility model.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0:0:0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">NoWrite</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_velocity</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">coursechange</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;CourseChange&quot;</span><span class="p">,</span> <span class="s">&quot;The value of the position and/or velocity vector changed&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">coursechange</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3RandomWalk2dMobilityModel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-random-walk2d-mobility-model-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/random_waypoint_mobility_model.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/random_waypoint_mobility_model.html
new file mode 100644 (file)
index 0000000..c2549ae
--- /dev/null
@@ -0,0 +1,176 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.random_waypoint_mobility_model &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.random_waypoint_mobility_model</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3mobilitymodel</span> <span class="kn">import</span> <span class="n">NS3BaseMobilityModel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3RandomWaypointMobilityModel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.random_waypoint_mobility_model.NS3RandomWaypointMobilityModel">[docs]</a><span class="k">class</span> <span class="nc">NS3RandomWaypointMobilityModel</span><span class="p">(</span><span class="n">NS3BaseMobilityModel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::RandomWaypointMobilityModel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_speed</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Speed&quot;</span><span class="p">,</span>
+            <span class="s">&quot;A random variable used to pick the speed of a random waypoint model.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ns3::UniformRandomVariable[Min=0.3|Max=0.7]&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_speed</span><span class="p">)</span>
+
+        <span class="n">attr_pause</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Pause&quot;</span><span class="p">,</span>
+            <span class="s">&quot;A random variable used to pick the pause of a random waypoint model.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ns3::ConstantRandomVariable[Constant=2.0]&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_pause</span><span class="p">)</span>
+
+        <span class="n">attr_position</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Position&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The current position of the mobility model.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0:0:0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_position</span><span class="p">)</span>
+
+        <span class="n">attr_velocity</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Velocity&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The current velocity of the mobility model.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0:0:0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">NoWrite</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_velocity</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">coursechange</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;CourseChange&quot;</span><span class="p">,</span> <span class="s">&quot;The value of the position and/or velocity vector changed&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">coursechange</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3RandomWaypointMobilityModel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-random-waypoint-mobility-model-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/range_propagation_loss_model.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/range_propagation_loss_model.html
new file mode 100644 (file)
index 0000000..12a038c
--- /dev/null
@@ -0,0 +1,141 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.range_propagation_loss_model &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.range_propagation_loss_model</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3propagationlossmodel</span> <span class="kn">import</span> <span class="n">NS3BasePropagationLossModel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3RangePropagationLossModel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.range_propagation_loss_model.NS3RangePropagationLossModel">[docs]</a><span class="k">class</span> <span class="nc">NS3RangePropagationLossModel</span><span class="p">(</span><span class="n">NS3BasePropagationLossModel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::RangePropagationLossModel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_maxrange</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxRange&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Maximum Transmission Range (meters)&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;250&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxrange</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3RangePropagationLossModel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-range-propagation-loss-model-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/rate_error_model.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/rate_error_model.html
new file mode 100644 (file)
index 0000000..df1f4f9
--- /dev/null
@@ -0,0 +1,171 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.rate_error_model &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.rate_error_model</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3errormodel</span> <span class="kn">import</span> <span class="n">NS3BaseErrorModel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3RateErrorModel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.rate_error_model.NS3RateErrorModel">[docs]</a><span class="k">class</span> <span class="nc">NS3RateErrorModel</span><span class="p">(</span><span class="n">NS3BaseErrorModel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::RateErrorModel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_errorunit</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ErrorUnit&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The error unit&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Enumerate</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ERROR_UNIT_BYTE&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;ERROR_UNIT_BIT&quot;</span><span class="p">,</span><span class="s">&quot;ERROR_UNIT_BYTE&quot;</span><span class="p">,</span><span class="s">&quot;ERROR_UNIT_PACKET&quot;</span><span class="p">],</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_errorunit</span><span class="p">)</span>
+
+        <span class="n">attr_errorrate</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ErrorRate&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The error rate.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_errorrate</span><span class="p">)</span>
+
+        <span class="n">attr_ranvar</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;RanVar&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The decision variable attached to this error model.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ns3::UniformRandomVariable[Min=0.0|Max=1.0]&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_ranvar</span><span class="p">)</span>
+
+        <span class="n">attr_isenabled</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;IsEnabled&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Whether this ErrorModel is enabled or not.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;True&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_isenabled</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3RateErrorModel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-rate-error-model-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/receive_list_error_model.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/receive_list_error_model.html
new file mode 100644 (file)
index 0000000..dcf10c0
--- /dev/null
@@ -0,0 +1,141 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.receive_list_error_model &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.receive_list_error_model</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3errormodel</span> <span class="kn">import</span> <span class="n">NS3BaseErrorModel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3ReceiveListErrorModel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.receive_list_error_model.NS3ReceiveListErrorModel">[docs]</a><span class="k">class</span> <span class="nc">NS3ReceiveListErrorModel</span><span class="p">(</span><span class="n">NS3BaseErrorModel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::ReceiveListErrorModel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_isenabled</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;IsEnabled&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Whether this ErrorModel is enabled or not.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;True&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_isenabled</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3ReceiveListErrorModel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-receive-list-error-model-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/red_queue.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/red_queue.html
new file mode 100644 (file)
index 0000000..1a49a0f
--- /dev/null
@@ -0,0 +1,264 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.red_queue &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.red_queue</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3queue</span> <span class="kn">import</span> <span class="n">NS3BaseQueue</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3RedQueue"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.red_queue.NS3RedQueue">[docs]</a><span class="k">class</span> <span class="nc">NS3RedQueue</span><span class="p">(</span><span class="n">NS3BaseQueue</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::RedQueue&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_meanpktsize</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MeanPktSize&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Average of packet size&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;500&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_meanpktsize</span><span class="p">)</span>
+
+        <span class="n">attr_idlepktsize</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;IdlePktSize&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Average packet size used during idle times. Used when m_cautions = 3&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_idlepktsize</span><span class="p">)</span>
+
+        <span class="n">attr_wait</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Wait&quot;</span><span class="p">,</span>
+            <span class="s">&quot;True for waiting between dropped packets&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;True&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_wait</span><span class="p">)</span>
+
+        <span class="n">attr_gentle</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Gentle&quot;</span><span class="p">,</span>
+            <span class="s">&quot;True to increases dropping probability slowly when average queue exceeds maxthresh&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;True&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_gentle</span><span class="p">)</span>
+
+        <span class="n">attr_minth</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MinTh&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Minimum average length threshold in packets/bytes&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;5&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_minth</span><span class="p">)</span>
+
+        <span class="n">attr_maxth</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxTh&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Maximum average length threshold in packets/bytes&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;15&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxth</span><span class="p">)</span>
+
+        <span class="n">attr_queuelimit</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;QueueLimit&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Queue limit in bytes/packets&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;25&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_queuelimit</span><span class="p">)</span>
+
+        <span class="n">attr_qw</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;QW&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Queue weight related to the exponential weighted moving average (EWMA)&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0.002&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_qw</span><span class="p">)</span>
+
+        <span class="n">attr_linterm</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;LInterm&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The maximum probability of dropping a packet&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;50&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_linterm</span><span class="p">)</span>
+
+        <span class="n">attr_ns1compat</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Ns1Compat&quot;</span><span class="p">,</span>
+            <span class="s">&quot;NS-1 compatibility&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;False&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_ns1compat</span><span class="p">)</span>
+
+        <span class="n">attr_linkbandwidth</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;LinkBandwidth&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The RED link bandwidth&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1500000bps&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_linkbandwidth</span><span class="p">)</span>
+
+        <span class="n">attr_linkdelay</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;LinkDelay&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The RED link delay&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+20000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_linkdelay</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">enqueue</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;Enqueue&quot;</span><span class="p">,</span> <span class="s">&quot;Enqueue a packet in the queue.&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">enqueue</span><span class="p">)</span>
+
+        <span class="n">dequeue</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;Dequeue&quot;</span><span class="p">,</span> <span class="s">&quot;Dequeue a packet from the queue.&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">dequeue</span><span class="p">)</span>
+
+        <span class="n">drop</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;Drop&quot;</span><span class="p">,</span> <span class="s">&quot;Drop a packet stored in the queue.&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">drop</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3RedQueue</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-red-queue-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/rraa_wifi_manager.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/rraa_wifi_manager.html
new file mode 100644 (file)
index 0000000..68fa6da
--- /dev/null
@@ -0,0 +1,458 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.rraa_wifi_manager &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.rraa_wifi_manager</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3wifiremotestationmanager</span> <span class="kn">import</span> <span class="n">NS3BaseWifiRemoteStationManager</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3RraaWifiManager"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.rraa_wifi_manager.NS3RraaWifiManager">[docs]</a><span class="k">class</span> <span class="nc">NS3RraaWifiManager</span><span class="p">(</span><span class="n">NS3BaseWifiRemoteStationManager</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::RraaWifiManager&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_basic</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Basic&quot;</span><span class="p">,</span>
+            <span class="s">&quot;If true the RRAA-BASIC algorithm will be used, otherwise the RRAA wil be used&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;False&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_basic</span><span class="p">)</span>
+
+        <span class="n">attr_timeout</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Timeout&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Timeout for the RRAA BASIC loss estimaton block (s)&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+50000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_timeout</span><span class="p">)</span>
+
+        <span class="n">attr_ewndfor54mbps</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ewndFor54mbps&quot;</span><span class="p">,</span>
+            <span class="s">&quot;ewnd parameter for 54 Mbs data mode&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;40&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_ewndfor54mbps</span><span class="p">)</span>
+
+        <span class="n">attr_ewndfor48mbps</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ewndFor48mbps&quot;</span><span class="p">,</span>
+            <span class="s">&quot;ewnd parameter for 48 Mbs data mode&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;40&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_ewndfor48mbps</span><span class="p">)</span>
+
+        <span class="n">attr_ewndfor36mbps</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ewndFor36mbps&quot;</span><span class="p">,</span>
+            <span class="s">&quot;ewnd parameter for 36 Mbs data mode&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;40&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_ewndfor36mbps</span><span class="p">)</span>
+
+        <span class="n">attr_ewndfor24mbps</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ewndFor24mbps&quot;</span><span class="p">,</span>
+            <span class="s">&quot;ewnd parameter for 24 Mbs data mode&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;40&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_ewndfor24mbps</span><span class="p">)</span>
+
+        <span class="n">attr_ewndfor18mbps</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ewndFor18mbps&quot;</span><span class="p">,</span>
+            <span class="s">&quot;ewnd parameter for 18 Mbs data mode&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;20&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_ewndfor18mbps</span><span class="p">)</span>
+
+        <span class="n">attr_ewndfor12mbps</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ewndFor12mbps&quot;</span><span class="p">,</span>
+            <span class="s">&quot;ewnd parameter for 12 Mbs data mode&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;20&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_ewndfor12mbps</span><span class="p">)</span>
+
+        <span class="n">attr_ewndfor9mbps</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ewndFor9mbps&quot;</span><span class="p">,</span>
+            <span class="s">&quot;ewnd parameter for 9 Mbs data mode&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;10&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_ewndfor9mbps</span><span class="p">)</span>
+
+        <span class="n">attr_ewndfor6mbps</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ewndFor6mbps&quot;</span><span class="p">,</span>
+            <span class="s">&quot;ewnd parameter for 6 Mbs data mode&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;6&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_ewndfor6mbps</span><span class="p">)</span>
+
+        <span class="n">attr_porifor48mbps</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;poriFor48mbps&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Pori parameter for 48 Mbs data mode&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0.047&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_porifor48mbps</span><span class="p">)</span>
+
+        <span class="n">attr_porifor36mbps</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;poriFor36mbps&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Pori parameter for 36 Mbs data mode&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0.115&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_porifor36mbps</span><span class="p">)</span>
+
+        <span class="n">attr_porifor24mbps</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;poriFor24mbps&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Pori parameter for 24 Mbs data mode&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0.1681&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_porifor24mbps</span><span class="p">)</span>
+
+        <span class="n">attr_porifor18mbps</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;poriFor18mbps&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Pori parameter for 18 Mbs data mode&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0.1325&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_porifor18mbps</span><span class="p">)</span>
+
+        <span class="n">attr_porifor12mbps</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;poriFor12mbps&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Pori parameter for 12 Mbs data mode&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0.1861&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_porifor12mbps</span><span class="p">)</span>
+
+        <span class="n">attr_porifor9mbps</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;poriFor9mbps&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Pori parameter for 9 Mbs data mode&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0.1434&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_porifor9mbps</span><span class="p">)</span>
+
+        <span class="n">attr_porifor6mbps</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;poriFor6mbps&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Pori parameter for 6 Mbs data mode&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0.5&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_porifor6mbps</span><span class="p">)</span>
+
+        <span class="n">attr_pmtlfor54mbps</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;pmtlFor54mbps&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Pmtl parameter for 54 Mbs data mode&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0.094&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_pmtlfor54mbps</span><span class="p">)</span>
+
+        <span class="n">attr_pmtlfor48mbps</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;pmtlFor48mbps&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Pmtl parameter for 48 Mbs data mode&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0.23&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_pmtlfor48mbps</span><span class="p">)</span>
+
+        <span class="n">attr_pmtlfor36mbps</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;pmtlFor36mbps&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Pmtl parameter for 36 Mbs data mode&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0.3363&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_pmtlfor36mbps</span><span class="p">)</span>
+
+        <span class="n">attr_pmtlfor24mbps</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;pmtlFor24mbps&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Pmtl parameter for 24 Mbs data mode&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0.265&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_pmtlfor24mbps</span><span class="p">)</span>
+
+        <span class="n">attr_pmtlfor18mbps</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;pmtlFor18mbps&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Pmtl parameter for 18 Mbs data mode&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0.3722&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_pmtlfor18mbps</span><span class="p">)</span>
+
+        <span class="n">attr_pmtlfor12mbps</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;pmtlFor12mbps&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Pmtl parameter for 12 Mbs data mode&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0.2868&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_pmtlfor12mbps</span><span class="p">)</span>
+
+        <span class="n">attr_pmtlfor9mbps</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;pmtlFor9mbps&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Pmtl parameter for 9 Mbs data mode&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0.3932&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_pmtlfor9mbps</span><span class="p">)</span>
+
+        <span class="n">attr_islowlatency</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;IsLowLatency&quot;</span><span class="p">,</span>
+            <span class="s">&quot;If true, we attempt to modelize a so-called low-latency device: a device where decisions about tx parameters can be made on a per-packet basis and feedback about the transmission of each packet is obtained before sending the next. Otherwise, we modelize a  high-latency device, that is a device where we cannot update our decision about tx parameters after every packet transmission.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;True&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_islowlatency</span><span class="p">)</span>
+
+        <span class="n">attr_maxssrc</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxSsrc&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The maximum number of retransmission attempts for an RTS. This value will not have any effect on some rate control algorithms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;7&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxssrc</span><span class="p">)</span>
+
+        <span class="n">attr_maxslrc</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxSlrc&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The maximum number of retransmission attempts for a DATA packet. This value will not have any effect on some rate control algorithms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;7&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxslrc</span><span class="p">)</span>
+
+        <span class="n">attr_rtsctsthreshold</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;RtsCtsThreshold&quot;</span><span class="p">,</span>
+            <span class="s">&quot;If  the size of the data packet + LLC header + MAC header + FCS trailer is bigger than this value, we use an RTS/CTS handshake before sending the data, as per IEEE Std. 802.11-2012, Section 9.3.5. This value will not have any effect on some rate control algorithms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;2346&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_rtsctsthreshold</span><span class="p">)</span>
+
+        <span class="n">attr_fragmentationthreshold</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;FragmentationThreshold&quot;</span><span class="p">,</span>
+            <span class="s">&quot;If the size of the data packet + LLC header + MAC header + FCS trailer is biggerthan this value, we fragment it such that the size of the fragments are equal or smaller than this value, as per IEEE Std. 802.11-2012, Section 9.5. This value will not have any effect on some rate control algorithms.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;2346&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_fragmentationthreshold</span><span class="p">)</span>
+
+        <span class="n">attr_nonunicastmode</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;NonUnicastMode&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Wifi mode used for non-unicast transmissions.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;Invalid-WifiMode&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_nonunicastmode</span><span class="p">)</span>
+
+        <span class="n">attr_defaulttxpowerlevel</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;DefaultTxPowerLevel&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Default power level to be used for transmissions. This is the power level that is used by all those WifiManagers that do notimplement TX power control.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_defaulttxpowerlevel</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">mactxrtsfailed</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxRtsFailed&quot;</span><span class="p">,</span> <span class="s">&quot;The transmission of a RTS by the MAC layer has failed&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxrtsfailed</span><span class="p">)</span>
+
+        <span class="n">mactxdatafailed</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxDataFailed&quot;</span><span class="p">,</span> <span class="s">&quot;The transmission of a data packet by the MAC layer has failed&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxdatafailed</span><span class="p">)</span>
+
+        <span class="n">mactxfinalrtsfailed</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxFinalRtsFailed&quot;</span><span class="p">,</span> <span class="s">&quot;The transmission of a RTS has exceeded the maximum number of attempts&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxfinalrtsfailed</span><span class="p">)</span>
+
+        <span class="n">mactxfinaldatafailed</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxFinalDataFailed&quot;</span><span class="p">,</span> <span class="s">&quot;The transmission of a data packet has exceeded the maximum number of attempts&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxfinaldatafailed</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3RraaWifiManager</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-rraa-wifi-manager-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/simple_channel.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/simple_channel.html
new file mode 100644 (file)
index 0000000..afa2fd8
--- /dev/null
@@ -0,0 +1,141 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.simple_channel &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.simple_channel</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3channel</span> <span class="kn">import</span> <span class="n">NS3BaseChannel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3SimpleChannel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.simple_channel.NS3SimpleChannel">[docs]</a><span class="k">class</span> <span class="nc">NS3SimpleChannel</span><span class="p">(</span><span class="n">NS3BaseChannel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::SimpleChannel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_id</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Id&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The id (unique integer) of this Channel.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">NoWrite</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_id</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3SimpleChannel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-simple-channel-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/simple_net_device.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/simple_net_device.html
new file mode 100644 (file)
index 0000000..da4586b
--- /dev/null
@@ -0,0 +1,135 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.simple_net_device &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.simple_net_device</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3netdevice</span> <span class="kn">import</span> <span class="n">NS3BaseNetDevice</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3SimpleNetDevice"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.simple_net_device.NS3SimpleNetDevice">[docs]</a><span class="k">class</span> <span class="nc">NS3SimpleNetDevice</span><span class="p">(</span><span class="n">NS3BaseNetDevice</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::SimpleNetDevice&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">phyrxdrop</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;PhyRxDrop&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source indicating a packet has been dropped by the device during reception&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">phyrxdrop</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3SimpleNetDevice</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-simple-net-device-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/single_model_spectrum_channel.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/single_model_spectrum_channel.html
new file mode 100644 (file)
index 0000000..7570e78
--- /dev/null
@@ -0,0 +1,156 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.single_model_spectrum_channel &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.single_model_spectrum_channel</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3channel</span> <span class="kn">import</span> <span class="n">NS3BaseChannel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3SingleModelSpectrumChannel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.single_model_spectrum_channel.NS3SingleModelSpectrumChannel">[docs]</a><span class="k">class</span> <span class="nc">NS3SingleModelSpectrumChannel</span><span class="p">(</span><span class="n">NS3BaseChannel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::SingleModelSpectrumChannel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_maxlossdb</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxLossDb&quot;</span><span class="p">,</span>
+            <span class="s">&quot;If a single-frequency PropagationLossModel is used, this value represents the maximum loss in dB for which transmissions will be passed to the receiving PHY. Signals for which the PropagationLossModel returns a loss bigger than this value will not be propagated to the receiver. This parameter is to be used to reduce the computational load by not propagating signals that are far beyond the interference range. Note that the default value corresponds to considering all signals for reception. Tune this value with care. &quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1e+09&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxlossdb</span><span class="p">)</span>
+
+        <span class="n">attr_id</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Id&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The id (unique integer) of this Channel.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">NoWrite</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_id</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">pathloss</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;PathLoss&quot;</span><span class="p">,</span> <span class="s">&quot;This trace is fired whenever a new path loss value is calculated. The first and second parameters to the trace are pointers respectively to the TX and RX SpectrumPhy instances, whereas the third parameters is the loss value in dB. Note that the loss value reported by this trace is the single-frequency loss value obtained by evaluating only the TX and RX AntennaModels and the PropagationLossModel. In particular, note that SpectrumPropagationLossModel (even if present) is never used to evaluate the loss value reported in this trace. &quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">pathloss</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3SingleModelSpectrumChannel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-single-model-spectrum-channel-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/six_low_pan_net_device.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/six_low_pan_net_device.html
new file mode 100644 (file)
index 0000000..d4be2bb
--- /dev/null
@@ -0,0 +1,214 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.six_low_pan_net_device &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.six_low_pan_net_device</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3netdevice</span> <span class="kn">import</span> <span class="n">NS3BaseNetDevice</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3SixLowPanNetDevice"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.six_low_pan_net_device.NS3SixLowPanNetDevice">[docs]</a><span class="k">class</span> <span class="nc">NS3SixLowPanNetDevice</span><span class="p">(</span><span class="n">NS3BaseNetDevice</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::SixLowPanNetDevice&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_rfc6282</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Rfc6282&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Use RFC6282 (IPHC) if true, RFC4944 (HC1) otherwise.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;True&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_rfc6282</span><span class="p">)</span>
+
+        <span class="n">attr_omitudpchecksum</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;OmitUdpChecksum&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Omit the UDP checksum in IPHC compression.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;True&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_omitudpchecksum</span><span class="p">)</span>
+
+        <span class="n">attr_fragmentreassemblylistsize</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;FragmentReassemblyListSize&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The maximum size of the reassembly buffer (in packets). Zero meaning infinite.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_fragmentreassemblylistsize</span><span class="p">)</span>
+
+        <span class="n">attr_fragmentexpirationtimeout</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;FragmentExpirationTimeout&quot;</span><span class="p">,</span>
+            <span class="s">&quot;When this timeout expires, the fragments will be cleared from the buffer.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+60000000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_fragmentexpirationtimeout</span><span class="p">)</span>
+
+        <span class="n">attr_compressionthreshold</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;CompressionThreshold&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The minimum MAC layer payload size.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_compressionthreshold</span><span class="p">)</span>
+
+        <span class="n">attr_forceethertype</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ForceEtherType&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Force a specific EtherType in L2 frames.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;False&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_forceethertype</span><span class="p">)</span>
+
+        <span class="n">attr_ethertype</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;EtherType&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The specific EtherType to be used in L2 frames.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;65535&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_ethertype</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">tx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;Tx&quot;</span><span class="p">,</span> <span class="s">&quot;Send - packet (including 6LoWPAN header), SixLoWPanNetDevice Ptr, interface index.&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">tx</span><span class="p">)</span>
+
+        <span class="n">rx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;Rx&quot;</span><span class="p">,</span> <span class="s">&quot;Receive - packet (including 6LoWPAN header), SixLoWPanNetDevice Ptr, interface index.&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">rx</span><span class="p">)</span>
+
+        <span class="n">drop</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;Drop&quot;</span><span class="p">,</span> <span class="s">&quot;Drop - DropReason, packet (including 6LoWPAN header), SixLoWPanNetDevice Ptr, interface index.&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">drop</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3SixLowPanNetDevice</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-six-low-pan-net-device-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/sta_wifi_mac.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/sta_wifi_mac.html
new file mode 100644 (file)
index 0000000..d695e43
--- /dev/null
@@ -0,0 +1,348 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.sta_wifi_mac &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.sta_wifi_mac</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3wifimac</span> <span class="kn">import</span> <span class="n">NS3BaseWifiMac</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3StaWifiMac"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.sta_wifi_mac.NS3StaWifiMac">[docs]</a><span class="k">class</span> <span class="nc">NS3StaWifiMac</span><span class="p">(</span><span class="n">NS3BaseWifiMac</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::StaWifiMac&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_proberequesttimeout</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ProbeRequestTimeout&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The interval between two consecutive probe request attempts.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+50000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_proberequesttimeout</span><span class="p">)</span>
+
+        <span class="n">attr_assocrequesttimeout</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;AssocRequestTimeout&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The interval between two consecutive assoc request attempts.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+500000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_assocrequesttimeout</span><span class="p">)</span>
+
+        <span class="n">attr_maxmissedbeacons</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxMissedBeacons&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Number of beacons which much be consecutively missed before we attempt to restart association.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;10&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxmissedbeacons</span><span class="p">)</span>
+
+        <span class="n">attr_activeprobing</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ActiveProbing&quot;</span><span class="p">,</span>
+            <span class="s">&quot;If true, we send probe requests. If false, we don</span><span class="se">\&#39;</span><span class="s">t. NOTE: if more than one STA in your simulation is using active probing, you should enable it at a different simulation time for each STA, otherwise all the STAs will start sending probes at the same time resulting in collisions. See bug 1060 for more info.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;False&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_activeprobing</span><span class="p">)</span>
+
+        <span class="n">attr_qossupported</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;QosSupported&quot;</span><span class="p">,</span>
+            <span class="s">&quot;This Boolean attribute is set to enable 802.11e/WMM-style QoS support at this STA&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;False&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_qossupported</span><span class="p">)</span>
+
+        <span class="n">attr_htsupported</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;HtSupported&quot;</span><span class="p">,</span>
+            <span class="s">&quot;This Boolean attribute is set to enable 802.11n support at this STA&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;False&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_htsupported</span><span class="p">)</span>
+
+        <span class="n">attr_ctstoselfsupported</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;CtsToSelfSupported&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Use CTS to Self when using a rate that is not in the basic set rate&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;False&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_ctstoselfsupported</span><span class="p">)</span>
+
+        <span class="n">attr_ctstimeout</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;CtsTimeout&quot;</span><span class="p">,</span>
+            <span class="s">&quot;When this timeout expires, the RTS/CTS handshake has failed.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+75000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_ctstimeout</span><span class="p">)</span>
+
+        <span class="n">attr_acktimeout</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;AckTimeout&quot;</span><span class="p">,</span>
+            <span class="s">&quot;When this timeout expires, the DATA/ACK handshake has failed.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+75000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_acktimeout</span><span class="p">)</span>
+
+        <span class="n">attr_basicblockacktimeout</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;BasicBlockAckTimeout&quot;</span><span class="p">,</span>
+            <span class="s">&quot;When this timeout expires, the BASIC_BLOCK_ACK_REQ/BASIC_BLOCK_ACK handshake has failed.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+281000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_basicblockacktimeout</span><span class="p">)</span>
+
+        <span class="n">attr_compressedblockacktimeout</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;CompressedBlockAckTimeout&quot;</span><span class="p">,</span>
+            <span class="s">&quot;When this timeout expires, the COMPRESSED_BLOCK_ACK_REQ/COMPRESSED_BLOCK_ACK handshake has failed.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+107000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_compressedblockacktimeout</span><span class="p">)</span>
+
+        <span class="n">attr_sifs</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Sifs&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The value of the SIFS constant.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+16000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_sifs</span><span class="p">)</span>
+
+        <span class="n">attr_eifsnodifs</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;EifsNoDifs&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The value of EIFS-DIFS&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+60000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_eifsnodifs</span><span class="p">)</span>
+
+        <span class="n">attr_slot</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Slot&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The duration of a Slot.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+9000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_slot</span><span class="p">)</span>
+
+        <span class="n">attr_pifs</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Pifs&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The value of the PIFS constant.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+25000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_pifs</span><span class="p">)</span>
+
+        <span class="n">attr_rifs</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Rifs&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The value of the RIFS constant.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+2000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_rifs</span><span class="p">)</span>
+
+        <span class="n">attr_maxpropagationdelay</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxPropagationDelay&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The maximum propagation delay. Unused for now.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+3333.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxpropagationdelay</span><span class="p">)</span>
+
+        <span class="n">attr_ssid</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Ssid&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The ssid we want to belong to.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;default&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_ssid</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">assoc</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;Assoc&quot;</span><span class="p">,</span> <span class="s">&quot;Associated with an access point.&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">assoc</span><span class="p">)</span>
+
+        <span class="n">deassoc</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;DeAssoc&quot;</span><span class="p">,</span> <span class="s">&quot;Association with an access point lost.&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">deassoc</span><span class="p">)</span>
+
+        <span class="n">txokheader</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;TxOkHeader&quot;</span><span class="p">,</span> <span class="s">&quot;The header of successfully transmitted packet&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">txokheader</span><span class="p">)</span>
+
+        <span class="n">txerrheader</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;TxErrHeader&quot;</span><span class="p">,</span> <span class="s">&quot;The header of unsuccessfully transmitted packet&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">txerrheader</span><span class="p">)</span>
+
+        <span class="n">mactx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTx&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been received from higher layers and is being processed in preparation for queueing for transmission.&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactx</span><span class="p">)</span>
+
+        <span class="n">mactxdrop</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTxDrop&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been dropped in the MAC layer before being queued for transmission.&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactxdrop</span><span class="p">)</span>
+
+        <span class="n">macpromiscrx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacPromiscRx&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been received by this device, has been passed up from the physical layer and is being forwarded up the local protocol stack.  This is a promiscuous trace,&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">macpromiscrx</span><span class="p">)</span>
+
+        <span class="n">macrx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacRx&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been received by this device, has been passed up from the physical layer and is being forwarded up the local protocol stack.  This is a non-promiscuous trace,&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">macrx</span><span class="p">)</span>
+
+        <span class="n">macrxdrop</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacRxDrop&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been dropped in the MAC layer after it has been passed up from the physical layer.&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">macrxdrop</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3StaWifiMac</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-sta-wifi-mac-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/steady_state_random_waypoint_mobility_model.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/steady_state_random_waypoint_mobility_model.html
new file mode 100644 (file)
index 0000000..03aaaed
--- /dev/null
@@ -0,0 +1,246 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.steady_state_random_waypoint_mobility_model &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.steady_state_random_waypoint_mobility_model</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3mobilitymodel</span> <span class="kn">import</span> <span class="n">NS3BaseMobilityModel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3SteadyStateRandomWaypointMobilityModel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.steady_state_random_waypoint_mobility_model.NS3SteadyStateRandomWaypointMobilityModel">[docs]</a><span class="k">class</span> <span class="nc">NS3SteadyStateRandomWaypointMobilityModel</span><span class="p">(</span><span class="n">NS3BaseMobilityModel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::SteadyStateRandomWaypointMobilityModel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_minspeed</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MinSpeed&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Minimum speed value, [m/s]&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0.3&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_minspeed</span><span class="p">)</span>
+
+        <span class="n">attr_maxspeed</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxSpeed&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Maximum speed value, [m/s]&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0.7&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxspeed</span><span class="p">)</span>
+
+        <span class="n">attr_minpause</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MinPause&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Minimum pause value, [s]&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_minpause</span><span class="p">)</span>
+
+        <span class="n">attr_maxpause</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxPause&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Maximum pause value, [s]&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxpause</span><span class="p">)</span>
+
+        <span class="n">attr_minx</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MinX&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Minimum X value of traveling region, [m]&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_minx</span><span class="p">)</span>
+
+        <span class="n">attr_maxx</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxX&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Maximum X value of traveling region, [m]&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxx</span><span class="p">)</span>
+
+        <span class="n">attr_miny</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MinY&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Minimum Y value of traveling region, [m]&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_miny</span><span class="p">)</span>
+
+        <span class="n">attr_maxy</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxY&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Maximum Y value of traveling region, [m]&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxy</span><span class="p">)</span>
+
+        <span class="n">attr_z</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Z&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Z value of traveling region (fixed), [m]&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_z</span><span class="p">)</span>
+
+        <span class="n">attr_position</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Position&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The current position of the mobility model.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0:0:0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_position</span><span class="p">)</span>
+
+        <span class="n">attr_velocity</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Velocity&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The current velocity of the mobility model.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0:0:0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">NoWrite</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_velocity</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">coursechange</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;CourseChange&quot;</span><span class="p">,</span> <span class="s">&quot;The value of the position and/or velocity vector changed&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">coursechange</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3SteadyStateRandomWaypointMobilityModel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-steady-state-random-waypoint-mobility-model-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/subscriber_station_net_device.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/subscriber_station_net_device.html
new file mode 100644 (file)
index 0000000..45bace1
--- /dev/null
@@ -0,0 +1,306 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.subscriber_station_net_device &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.subscriber_station_net_device</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3netdevice</span> <span class="kn">import</span> <span class="n">NS3BaseNetDevice</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3SubscriberStationNetDevice"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.subscriber_station_net_device.NS3SubscriberStationNetDevice">[docs]</a><span class="k">class</span> <span class="nc">NS3SubscriberStationNetDevice</span><span class="p">(</span><span class="n">NS3BaseNetDevice</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::SubscriberStationNetDevice&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_lostdlmapinterval</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;LostDlMapInterval&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Time since last received DL-MAP message before downlink synchronization is considered lost. Maximum is 600ms&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+500000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_lostdlmapinterval</span><span class="p">)</span>
+
+        <span class="n">attr_lostulmapinterval</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;LostUlMapInterval&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Time since last received UL-MAP before uplink synchronization is considered lost, maximum is 600.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+500000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_lostulmapinterval</span><span class="p">)</span>
+
+        <span class="n">attr_maxdcdinterval</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxDcdInterval&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Maximum time between transmission of DCD messages. Maximum is 10s&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+10000000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxdcdinterval</span><span class="p">)</span>
+
+        <span class="n">attr_maxucdinterval</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxUcdInterval&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Maximum time between transmission of UCD messages. Maximum is 10s&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+10000000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxucdinterval</span><span class="p">)</span>
+
+        <span class="n">attr_intervalt1</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;IntervalT1&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Wait for DCD timeout. Maximum is 5*maxDcdInterval&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+50000000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_intervalt1</span><span class="p">)</span>
+
+        <span class="n">attr_intervalt2</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;IntervalT2&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Wait for broadcast ranging timeout, i.e., wait for initial ranging opportunity. Maximum is 5*Ranging interval&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+10000000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_intervalt2</span><span class="p">)</span>
+
+        <span class="n">attr_intervalt3</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;IntervalT3&quot;</span><span class="p">,</span>
+            <span class="s">&quot;ranging Response reception timeout following the transmission of a ranging request. Maximum is 200ms&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+200000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_intervalt3</span><span class="p">)</span>
+
+        <span class="n">attr_intervalt7</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;IntervalT7&quot;</span><span class="p">,</span>
+            <span class="s">&quot;wait for DSA/DSC/DSD Response timeout. Maximum is 1s&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+100000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_intervalt7</span><span class="p">)</span>
+
+        <span class="n">attr_intervalt12</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;IntervalT12&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Wait for UCD descriptor.Maximum is 5*MaxUcdInterval&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+10000000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_intervalt12</span><span class="p">)</span>
+
+        <span class="n">attr_intervalt20</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;IntervalT20&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Time the SS searches for preambles on a given channel. Minimum is 2 MAC frames&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+500000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_intervalt20</span><span class="p">)</span>
+
+        <span class="n">attr_intervalt21</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;IntervalT21&quot;</span><span class="p">,</span>
+            <span class="s">&quot;time the SS searches for (decodable) DL-MAP on a given channel&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+10000000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_intervalt21</span><span class="p">)</span>
+
+        <span class="n">attr_maxcontentionrangingretries</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxContentionRangingRetries&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Number of retries on contention Ranging Requests&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;16&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxcontentionrangingretries</span><span class="p">)</span>
+
+        <span class="n">attr_mtu</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Mtu&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The MAC-level Maximum Transmission Unit&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1400&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_mtu</span><span class="p">)</span>
+
+        <span class="n">attr_rtg</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;RTG&quot;</span><span class="p">,</span>
+            <span class="s">&quot;receive/transmit transition gap.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_rtg</span><span class="p">)</span>
+
+        <span class="n">attr_ttg</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;TTG&quot;</span><span class="p">,</span>
+            <span class="s">&quot;transmit/receive transition gap.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_ttg</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">sstxdrop</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;SSTxDrop&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been dropped in the MAC layer before being queued for transmission.&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">sstxdrop</span><span class="p">)</span>
+
+        <span class="n">sspromiscrx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;SSPromiscRx&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been received by this device, has been passed up from the physical layer and is being forwarded up the local protocol stack.  This is a promiscuous trace,&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">sspromiscrx</span><span class="p">)</span>
+
+        <span class="n">ssrx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;SSRx&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been received by this device, has been passed up from the physical layer and is being forwarded up the local protocol stack.  This is a non-promiscuous trace,&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">ssrx</span><span class="p">)</span>
+
+        <span class="n">ssrxdrop</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;SSRxDrop&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been dropped in the MAC layer after it has been passed up from the physical layer.&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">ssrxdrop</span><span class="p">)</span>
+
+        <span class="n">rx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;Rx&quot;</span><span class="p">,</span> <span class="s">&quot;Receive trace&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">rx</span><span class="p">)</span>
+
+        <span class="n">tx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;Tx&quot;</span><span class="p">,</span> <span class="s">&quot;Transmit trace&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">tx</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3SubscriberStationNetDevice</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-subscriber-station-net-device-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/tap_bridge.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/tap_bridge.html
new file mode 100644 (file)
index 0000000..0f26c6b
--- /dev/null
@@ -0,0 +1,211 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.tap_bridge &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.tap_bridge</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3netdevice</span> <span class="kn">import</span> <span class="n">NS3BaseNetDevice</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3TapBridge"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.tap_bridge.NS3TapBridge">[docs]</a><span class="k">class</span> <span class="nc">NS3TapBridge</span><span class="p">(</span><span class="n">NS3BaseNetDevice</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::TapBridge&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_mtu</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Mtu&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The MAC-level Maximum Transmission Unit&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_mtu</span><span class="p">)</span>
+
+        <span class="n">attr_devicename</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;DeviceName&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The name of the tap device to create.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_devicename</span><span class="p">)</span>
+
+        <span class="n">attr_gateway</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Gateway&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The IP address of the default gateway to assign to the host machine, when in ConfigureLocal mode.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;255.255.255.255&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_gateway</span><span class="p">)</span>
+
+        <span class="n">attr_ipaddress</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;IpAddress&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The IP address to assign to the tap device, when in ConfigureLocal mode.  This address will override the discovered IP address of the simulated device.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;255.255.255.255&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_ipaddress</span><span class="p">)</span>
+
+        <span class="n">attr_macaddress</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MacAddress&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The MAC address to assign to the tap device, when in ConfigureLocal mode.  This address will override the discovered MAC address of the simulated device.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ff:ff:ff:ff:ff:ff&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_macaddress</span><span class="p">)</span>
+
+        <span class="n">attr_netmask</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Netmask&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The network mask to assign to the tap device, when in ConfigureLocal mode.  This address will override the discovered MAC address of the simulated device.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;255.255.255.255&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_netmask</span><span class="p">)</span>
+
+        <span class="n">attr_start</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Start&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The simulation time at which to spin up the tap device read thread.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+0.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_start</span><span class="p">)</span>
+
+        <span class="n">attr_stop</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Stop&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The simulation time at which to tear down the tap device read thread.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+0.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_stop</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3TapBridge</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-tap-bridge-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/tcp_l4protocol.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/tcp_l4protocol.html
new file mode 100644 (file)
index 0000000..27e51db
--- /dev/null
@@ -0,0 +1,161 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.tcp_l4protocol &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.tcp_l4protocol</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3base</span> <span class="kn">import</span> <span class="n">NS3Base</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3TcpL4Protocol"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.tcp_l4protocol.NS3TcpL4Protocol">[docs]</a><span class="k">class</span> <span class="nc">NS3TcpL4Protocol</span><span class="p">(</span><span class="n">NS3Base</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::TcpL4Protocol&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_rttestimatortype</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;RttEstimatorType&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Type of RttEstimator objects.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ns3::RttMeanDeviation&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_rttestimatortype</span><span class="p">)</span>
+
+        <span class="n">attr_sockettype</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;SocketType&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Socket type of TCP objects.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;ns3::TcpNewReno&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_sockettype</span><span class="p">)</span>
+
+        <span class="n">attr_protocolnumber</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ProtocolNumber&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The Ip protocol number.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_protocolnumber</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3TcpL4Protocol</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-tcp-l4protocol-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/three_log_distance_propagation_loss_model.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/three_log_distance_propagation_loss_model.html
new file mode 100644 (file)
index 0000000..458f0bb
--- /dev/null
@@ -0,0 +1,201 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.three_log_distance_propagation_loss_model &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.three_log_distance_propagation_loss_model</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3propagationlossmodel</span> <span class="kn">import</span> <span class="n">NS3BasePropagationLossModel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3ThreeLogDistancePropagationLossModel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.three_log_distance_propagation_loss_model.NS3ThreeLogDistancePropagationLossModel">[docs]</a><span class="k">class</span> <span class="nc">NS3ThreeLogDistancePropagationLossModel</span><span class="p">(</span><span class="n">NS3BasePropagationLossModel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::ThreeLogDistancePropagationLossModel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_distance0</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Distance0&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Beginning of the first (near) distance field&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_distance0</span><span class="p">)</span>
+
+        <span class="n">attr_distance1</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Distance1&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Beginning of the second (middle) distance field.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;200&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_distance1</span><span class="p">)</span>
+
+        <span class="n">attr_distance2</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Distance2&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Beginning of the third (far) distance field.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;500&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_distance2</span><span class="p">)</span>
+
+        <span class="n">attr_exponent0</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Exponent0&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The exponent for the first field.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1.9&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_exponent0</span><span class="p">)</span>
+
+        <span class="n">attr_exponent1</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Exponent1&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The exponent for the second field.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;3.8&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_exponent1</span><span class="p">)</span>
+
+        <span class="n">attr_exponent2</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Exponent2&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The exponent for the third field.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;3.8&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_exponent2</span><span class="p">)</span>
+
+        <span class="n">attr_referenceloss</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ReferenceLoss&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The reference loss at distance d0 (dB). (Default is Friis at 1m with 5.15 GHz)&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;46.6777&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_referenceloss</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3ThreeLogDistancePropagationLossModel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-three-log-distance-propagation-loss-model-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/two_ray_ground_propagation_loss_model.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/two_ray_ground_propagation_loss_model.html
new file mode 100644 (file)
index 0000000..3a34d74
--- /dev/null
@@ -0,0 +1,171 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.two_ray_ground_propagation_loss_model &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.two_ray_ground_propagation_loss_model</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3propagationlossmodel</span> <span class="kn">import</span> <span class="n">NS3BasePropagationLossModel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3TwoRayGroundPropagationLossModel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.two_ray_ground_propagation_loss_model.NS3TwoRayGroundPropagationLossModel">[docs]</a><span class="k">class</span> <span class="nc">NS3TwoRayGroundPropagationLossModel</span><span class="p">(</span><span class="n">NS3BasePropagationLossModel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::TwoRayGroundPropagationLossModel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_frequency</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Frequency&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The carrier frequency (in Hz) at which propagation occurs  (default is 5.15 GHz).&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;5.15e+09&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_frequency</span><span class="p">)</span>
+
+        <span class="n">attr_systemloss</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;SystemLoss&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The system loss&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_systemloss</span><span class="p">)</span>
+
+        <span class="n">attr_mindistance</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MinDistance&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The distance under which the propagation model refuses to give results (m)&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0.5&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_mindistance</span><span class="p">)</span>
+
+        <span class="n">attr_heightabovez</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;HeightAboveZ&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The height of the antenna (m) above the node</span><span class="se">\&#39;</span><span class="s">s Z coordinate&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_heightabovez</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3TwoRayGroundPropagationLossModel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-two-ray-ground-propagation-loss-model-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/uan_channel.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/uan_channel.html
new file mode 100644 (file)
index 0000000..4e17dfd
--- /dev/null
@@ -0,0 +1,141 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.uan_channel &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.uan_channel</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3channel</span> <span class="kn">import</span> <span class="n">NS3BaseChannel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3UanChannel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.uan_channel.NS3UanChannel">[docs]</a><span class="k">class</span> <span class="nc">NS3UanChannel</span><span class="p">(</span><span class="n">NS3BaseChannel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::UanChannel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_id</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Id&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The id (unique integer) of this Channel.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">NoWrite</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_id</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3UanChannel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-uan-channel-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/udp_client.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/udp_client.html
new file mode 100644 (file)
index 0000000..a86a67d
--- /dev/null
@@ -0,0 +1,201 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.udp_client &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.udp_client</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3application</span> <span class="kn">import</span> <span class="n">NS3BaseApplication</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3UdpClient"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.udp_client.NS3UdpClient">[docs]</a><span class="k">class</span> <span class="nc">NS3UdpClient</span><span class="p">(</span><span class="n">NS3BaseApplication</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::UdpClient&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_maxpackets</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxPackets&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The maximum number of packets the application will send&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;100&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxpackets</span><span class="p">)</span>
+
+        <span class="n">attr_interval</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Interval&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The time to wait between packets&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+1000000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_interval</span><span class="p">)</span>
+
+        <span class="n">attr_remoteaddress</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;RemoteAddress&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The destination Address of the outbound packets&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;00-00-00&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_remoteaddress</span><span class="p">)</span>
+
+        <span class="n">attr_remoteport</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;RemotePort&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The destination port of the outbound packets&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;100&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_remoteport</span><span class="p">)</span>
+
+        <span class="n">attr_packetsize</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;PacketSize&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Size of packets generated. The minimum packet size is 12 bytes which is the size of the header carrying the sequence number and the time stamp.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1024&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_packetsize</span><span class="p">)</span>
+
+        <span class="n">attr_starttime</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;StartTime&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Time at which the application will start&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+0.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_starttime</span><span class="p">)</span>
+
+        <span class="n">attr_stoptime</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;StopTime&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Time at which the application will stop&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+0.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_stoptime</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3UdpClient</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-udp-client-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/udp_echo_client.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/udp_echo_client.html
new file mode 100644 (file)
index 0000000..245eb6d
--- /dev/null
@@ -0,0 +1,206 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.udp_echo_client &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.udp_echo_client</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3application</span> <span class="kn">import</span> <span class="n">NS3BaseApplication</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3UdpEchoClient"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.udp_echo_client.NS3UdpEchoClient">[docs]</a><span class="k">class</span> <span class="nc">NS3UdpEchoClient</span><span class="p">(</span><span class="n">NS3BaseApplication</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::UdpEchoClient&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_maxpackets</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxPackets&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The maximum number of packets the application will send&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;100&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxpackets</span><span class="p">)</span>
+
+        <span class="n">attr_interval</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Interval&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The time to wait between packets&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+1000000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_interval</span><span class="p">)</span>
+
+        <span class="n">attr_remoteaddress</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;RemoteAddress&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The destination Address of the outbound packets&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;00-00-00&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_remoteaddress</span><span class="p">)</span>
+
+        <span class="n">attr_remoteport</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;RemotePort&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The destination port of the outbound packets&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_remoteport</span><span class="p">)</span>
+
+        <span class="n">attr_packetsize</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;PacketSize&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Size of echo data in outbound packets&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;100&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_packetsize</span><span class="p">)</span>
+
+        <span class="n">attr_starttime</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;StartTime&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Time at which the application will start&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+0.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_starttime</span><span class="p">)</span>
+
+        <span class="n">attr_stoptime</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;StopTime&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Time at which the application will stop&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+0.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_stoptime</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">tx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;Tx&quot;</span><span class="p">,</span> <span class="s">&quot;A new packet is created and is sent&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">tx</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3UdpEchoClient</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-udp-echo-client-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/udp_echo_server.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/udp_echo_server.html
new file mode 100644 (file)
index 0000000..582ce26
--- /dev/null
@@ -0,0 +1,161 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.udp_echo_server &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.udp_echo_server</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3application</span> <span class="kn">import</span> <span class="n">NS3BaseApplication</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3UdpEchoServer"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.udp_echo_server.NS3UdpEchoServer">[docs]</a><span class="k">class</span> <span class="nc">NS3UdpEchoServer</span><span class="p">(</span><span class="n">NS3BaseApplication</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::UdpEchoServer&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_port</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Port&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Port on which we listen for incoming packets.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;9&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_port</span><span class="p">)</span>
+
+        <span class="n">attr_starttime</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;StartTime&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Time at which the application will start&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+0.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_starttime</span><span class="p">)</span>
+
+        <span class="n">attr_stoptime</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;StopTime&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Time at which the application will stop&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+0.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_stoptime</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3UdpEchoServer</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-udp-echo-server-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/udp_l4protocol.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/udp_l4protocol.html
new file mode 100644 (file)
index 0000000..9a2086a
--- /dev/null
@@ -0,0 +1,141 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.udp_l4protocol &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.udp_l4protocol</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3base</span> <span class="kn">import</span> <span class="n">NS3Base</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3UdpL4Protocol"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.udp_l4protocol.NS3UdpL4Protocol">[docs]</a><span class="k">class</span> <span class="nc">NS3UdpL4Protocol</span><span class="p">(</span><span class="n">NS3Base</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::UdpL4Protocol&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_protocolnumber</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ProtocolNumber&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The Ip protocol number.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_protocolnumber</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3UdpL4Protocol</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-udp-l4protocol-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/udp_server.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/udp_server.html
new file mode 100644 (file)
index 0000000..8688d33
--- /dev/null
@@ -0,0 +1,171 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.udp_server &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.udp_server</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3application</span> <span class="kn">import</span> <span class="n">NS3BaseApplication</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3UdpServer"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.udp_server.NS3UdpServer">[docs]</a><span class="k">class</span> <span class="nc">NS3UdpServer</span><span class="p">(</span><span class="n">NS3BaseApplication</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::UdpServer&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_port</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Port&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Port on which we listen for incoming packets.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;100&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_port</span><span class="p">)</span>
+
+        <span class="n">attr_packetwindowsize</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;PacketWindowSize&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The size of the window used to compute the packet loss. This value should be a multiple of 8.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;32&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_packetwindowsize</span><span class="p">)</span>
+
+        <span class="n">attr_starttime</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;StartTime&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Time at which the application will start&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+0.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_starttime</span><span class="p">)</span>
+
+        <span class="n">attr_stoptime</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;StopTime&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Time at which the application will stop&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+0.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_stoptime</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3UdpServer</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-udp-server-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/udp_trace_client.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/udp_trace_client.html
new file mode 100644 (file)
index 0000000..266ecd7
--- /dev/null
@@ -0,0 +1,181 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.udp_trace_client &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.udp_trace_client</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3application</span> <span class="kn">import</span> <span class="n">NS3BaseApplication</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3UdpTraceClient"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.udp_trace_client.NS3UdpTraceClient">[docs]</a><span class="k">class</span> <span class="nc">NS3UdpTraceClient</span><span class="p">(</span><span class="n">NS3BaseApplication</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::UdpTraceClient&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_remoteaddress</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;RemoteAddress&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The destination Address of the outbound packets&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;00-00-00&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_remoteaddress</span><span class="p">)</span>
+
+        <span class="n">attr_remoteport</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;RemotePort&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The destination port of the outbound packets&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;100&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_remoteport</span><span class="p">)</span>
+
+        <span class="n">attr_maxpacketsize</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;MaxPacketSize&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The maximum size of a packet (including the SeqTsHeader, 12 bytes).&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1024&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_maxpacketsize</span><span class="p">)</span>
+
+        <span class="n">attr_starttime</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;StartTime&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Time at which the application will start&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+0.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_starttime</span><span class="p">)</span>
+
+        <span class="n">attr_stoptime</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;StopTime&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Time at which the application will stop&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+0.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_stoptime</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3UdpTraceClient</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-udp-trace-client-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/v4ping.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/v4ping.html
new file mode 100644 (file)
index 0000000..3dd63cd
--- /dev/null
@@ -0,0 +1,196 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.v4ping &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.v4ping</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3application</span> <span class="kn">import</span> <span class="n">NS3BaseApplication</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3V4Ping"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.v4ping.NS3V4Ping">[docs]</a><span class="k">class</span> <span class="nc">NS3V4Ping</span><span class="p">(</span><span class="n">NS3BaseApplication</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::V4Ping&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_remote</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Remote&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The address of the machine we want to ping.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;102.102.102.102&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_remote</span><span class="p">)</span>
+
+        <span class="n">attr_verbose</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Verbose&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Produce usual output.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;False&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_verbose</span><span class="p">)</span>
+
+        <span class="n">attr_interval</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Interval&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Wait  interval  seconds between sending each packet.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+1000000000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_interval</span><span class="p">)</span>
+
+        <span class="n">attr_size</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Size&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The number of data bytes to be sent, real packet will be 8 (ICMP) + 20 (IP) bytes longer.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;56&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_size</span><span class="p">)</span>
+
+        <span class="n">attr_starttime</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;StartTime&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Time at which the application will start&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+0.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_starttime</span><span class="p">)</span>
+
+        <span class="n">attr_stoptime</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;StopTime&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Time at which the application will stop&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+0.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_stoptime</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">rtt</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;Rtt&quot;</span><span class="p">,</span> <span class="s">&quot;The rtt calculated by the ping.&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">rtt</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3V4Ping</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-v4ping-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/virtual_net_device.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/virtual_net_device.html
new file mode 100644 (file)
index 0000000..82adaa9
--- /dev/null
@@ -0,0 +1,162 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.virtual_net_device &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.virtual_net_device</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3netdevice</span> <span class="kn">import</span> <span class="n">NS3BaseNetDevice</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3VirtualNetDevice"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.virtual_net_device.NS3VirtualNetDevice">[docs]</a><span class="k">class</span> <span class="nc">NS3VirtualNetDevice</span><span class="p">(</span><span class="n">NS3BaseNetDevice</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::VirtualNetDevice&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_mtu</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Mtu&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The MAC-level Maximum Transmission Unit&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1500&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_mtu</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">mactx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacTx&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source indicating a packet has arrived for transmission by this device&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">mactx</span><span class="p">)</span>
+
+        <span class="n">macpromiscrx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacPromiscRx&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been received by this device, has been passed up from the physical layer and is being forwarded up the local protocol stack.  This is a promiscuous trace,&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">macpromiscrx</span><span class="p">)</span>
+
+        <span class="n">macrx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MacRx&quot;</span><span class="p">,</span> <span class="s">&quot;A packet has been received by this device, has been passed up from the physical layer and is being forwarded up the local protocol stack.  This is a non-promiscuous trace,&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">macrx</span><span class="p">)</span>
+
+        <span class="n">sniffer</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;Sniffer&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source simulating a non-promiscuous packet sniffer attached to the device&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">sniffer</span><span class="p">)</span>
+
+        <span class="n">promiscsniffer</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;PromiscSniffer&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source simulating a promiscuous packet sniffer attached to the device&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">promiscsniffer</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3VirtualNetDevice</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-virtual-net-device-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/waypoint_mobility_model.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/waypoint_mobility_model.html
new file mode 100644 (file)
index 0000000..5446089
--- /dev/null
@@ -0,0 +1,186 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.waypoint_mobility_model &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.waypoint_mobility_model</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3mobilitymodel</span> <span class="kn">import</span> <span class="n">NS3BaseMobilityModel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3WaypointMobilityModel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.waypoint_mobility_model.NS3WaypointMobilityModel">[docs]</a><span class="k">class</span> <span class="nc">NS3WaypointMobilityModel</span><span class="p">(</span><span class="n">NS3BaseMobilityModel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::WaypointMobilityModel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_waypointsleft</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;WaypointsLeft&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The number of waypoints remaining.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">NoWrite</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_waypointsleft</span><span class="p">)</span>
+
+        <span class="n">attr_lazynotify</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;LazyNotify&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Only call NotifyCourseChange when position is calculated.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;False&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_lazynotify</span><span class="p">)</span>
+
+        <span class="n">attr_initialpositioniswaypoint</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;InitialPositionIsWaypoint&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Calling SetPosition with no waypoints creates a waypoint.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;False&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_initialpositioniswaypoint</span><span class="p">)</span>
+
+        <span class="n">attr_position</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Position&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The current position of the mobility model.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0:0:0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_position</span><span class="p">)</span>
+
+        <span class="n">attr_velocity</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Velocity&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The current velocity of the mobility model.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0:0:0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">NoWrite</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_velocity</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">coursechange</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;CourseChange&quot;</span><span class="p">,</span> <span class="s">&quot;The value of the position and/or velocity vector changed&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">coursechange</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3WaypointMobilityModel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-waypoint-mobility-model-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/wifi_net_device.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/wifi_net_device.html
new file mode 100644 (file)
index 0000000..86375c8
--- /dev/null
@@ -0,0 +1,141 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.wifi_net_device &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.wifi_net_device</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3wifinetdevice</span> <span class="kn">import</span> <span class="n">NS3BaseWifiNetDevice</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3WifiNetDevice"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.wifi_net_device.NS3WifiNetDevice">[docs]</a><span class="k">class</span> <span class="nc">NS3WifiNetDevice</span><span class="p">(</span><span class="n">NS3BaseWifiNetDevice</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::WifiNetDevice&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_mtu</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Mtu&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The MAC-level Maximum Transmission Unit&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;2296&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_mtu</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3WifiNetDevice</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-wifi-net-device-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/yans_error_rate_model.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/yans_error_rate_model.html
new file mode 100644 (file)
index 0000000..f4c7747
--- /dev/null
@@ -0,0 +1,130 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.yans_error_rate_model &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.yans_error_rate_model</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3errorratemodel</span> <span class="kn">import</span> <span class="n">NS3BaseErrorRateModel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3YansErrorRateModel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.yans_error_rate_model.NS3YansErrorRateModel">[docs]</a><span class="k">class</span> <span class="nc">NS3YansErrorRateModel</span><span class="p">(</span><span class="n">NS3BaseErrorRateModel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::YansErrorRateModel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3YansErrorRateModel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-yans-error-rate-model-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/yans_wifi_channel.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/yans_wifi_channel.html
new file mode 100644 (file)
index 0000000..658f1b8
--- /dev/null
@@ -0,0 +1,141 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.yans_wifi_channel &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.yans_wifi_channel</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3wifichannel</span> <span class="kn">import</span> <span class="n">NS3BaseWifiChannel</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3YansWifiChannel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.yans_wifi_channel.NS3YansWifiChannel">[docs]</a><span class="k">class</span> <span class="nc">NS3YansWifiChannel</span><span class="p">(</span><span class="n">NS3BaseWifiChannel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::YansWifiChannel&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_id</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Id&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The id (unique integer) of this Channel.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;0&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">NoWrite</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_id</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3YansWifiChannel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-yans-wifi-channel-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/yans_wifi_phy.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/classes/yans_wifi_phy.html
new file mode 100644 (file)
index 0000000..6cb0397
--- /dev/null
@@ -0,0 +1,344 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.classes.yans_wifi_phy &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.classes.yans_wifi_phy</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3wifiphy</span> <span class="kn">import</span> <span class="n">NS3BaseWifiPhy</span> 
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3YansWifiPhy"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.yans_wifi_phy.NS3YansWifiPhy">[docs]</a><span class="k">class</span> <span class="nc">NS3YansWifiPhy</span><span class="p">(</span><span class="n">NS3BaseWifiPhy</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::YansWifiPhy&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">attr_energydetectionthreshold</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;EnergyDetectionThreshold&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The energy of a received signal should be higher than this threshold (dbm) to allow the PHY layer to detect the signal.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;-96&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_energydetectionthreshold</span><span class="p">)</span>
+
+        <span class="n">attr_ccamode1threshold</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;CcaMode1Threshold&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The energy of a received signal should be higher than this threshold (dbm) to allow the PHY layer to declare CCA BUSY state&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;-99&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_ccamode1threshold</span><span class="p">)</span>
+
+        <span class="n">attr_txgain</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;TxGain&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Transmission gain (dB).&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_txgain</span><span class="p">)</span>
+
+        <span class="n">attr_rxgain</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;RxGain&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Reception gain (dB).&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_rxgain</span><span class="p">)</span>
+
+        <span class="n">attr_txpowerlevels</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;TxPowerLevels&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Number of transmission power levels available between TxPowerStart and TxPowerEnd included.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_txpowerlevels</span><span class="p">)</span>
+
+        <span class="n">attr_txpowerend</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;TxPowerEnd&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Maximum available transmission level (dbm).&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;16.0206&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_txpowerend</span><span class="p">)</span>
+
+        <span class="n">attr_txpowerstart</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;TxPowerStart&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Minimum available transmission level (dbm).&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;16.0206&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_txpowerstart</span><span class="p">)</span>
+
+        <span class="n">attr_rxnoisefigure</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;RxNoiseFigure&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Loss (dB) in the Signal-to-Noise-Ratio due to non-idealities in the receiver. According to Wikipedia (http://en.wikipedia.org/wiki/Noise_figure), this is </span><span class="se">\&quot;</span><span class="s">the difference in decibels (dB) between the noise output of the actual receiver to the noise output of an  ideal receiver with the same overall gain and bandwidth when the receivers  are connected to sources at the standard noise temperature T0 (usually 290 K)</span><span class="se">\&quot;</span><span class="s">. For&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;7&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_rxnoisefigure</span><span class="p">)</span>
+
+        <span class="n">attr_channelswitchdelay</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ChannelSwitchDelay&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Delay between two short frames transmitted on different frequencies.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+250000.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_channelswitchdelay</span><span class="p">)</span>
+
+        <span class="n">attr_channelnumber</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ChannelNumber&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Channel center frequency = Channel starting frequency + 5 MHz * nch&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_channelnumber</span><span class="p">)</span>
+
+        <span class="n">attr_frequency</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Frequency&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The operating frequency.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;2407&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_frequency</span><span class="p">)</span>
+
+        <span class="n">attr_transmitters</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Transmitters&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The number of transmitters.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_transmitters</span><span class="p">)</span>
+
+        <span class="n">attr_recievers</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Recievers&quot;</span><span class="p">,</span>
+            <span class="s">&quot;The number of recievers.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;1&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_recievers</span><span class="p">)</span>
+
+        <span class="n">attr_shortguardenabled</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ShortGuardEnabled&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Whether or not short guard interval is enabled.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;False&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_shortguardenabled</span><span class="p">)</span>
+
+        <span class="n">attr_ldpcenabled</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;LdpcEnabled&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Whether or not LDPC is enabled.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;False&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_ldpcenabled</span><span class="p">)</span>
+
+        <span class="n">attr_stbcenabled</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;STBCEnabled&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Whether or not STBC is enabled.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;False&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_stbcenabled</span><span class="p">)</span>
+
+        <span class="n">attr_greenfieldenabled</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;GreenfieldEnabled&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Whether or not STBC is enabled.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;False&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_greenfieldenabled</span><span class="p">)</span>
+
+        <span class="n">attr_channelbonding</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ChannelBonding&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Whether 20MHz or 40MHz.&quot;</span><span class="p">,</span>
+            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;False&quot;</span><span class="p">,</span>  
+            <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+            <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>    
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">attr_channelbonding</span><span class="p">)</span>
+
+
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">phytxbegin</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;PhyTxBegin&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source indicating a packet has begun transmitting over the channel medium&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">phytxbegin</span><span class="p">)</span>
+
+        <span class="n">phytxend</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;PhyTxEnd&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source indicating a packet has been completely transmitted over the channel. NOTE: the only official WifiPhy implementation available to this date (YansWifiPhy) never fires this trace source.&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">phytxend</span><span class="p">)</span>
+
+        <span class="n">phytxdrop</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;PhyTxDrop&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source indicating a packet has been dropped by the device during transmission&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">phytxdrop</span><span class="p">)</span>
+
+        <span class="n">phyrxbegin</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;PhyRxBegin&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source indicating a packet has begun being received from the channel medium by the device&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">phyrxbegin</span><span class="p">)</span>
+
+        <span class="n">phyrxend</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;PhyRxEnd&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source indicating a packet has been completely received from the channel medium by the device&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">phyrxend</span><span class="p">)</span>
+
+        <span class="n">phyrxdrop</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;PhyRxDrop&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source indicating a packet has been dropped by the device during reception&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">phyrxdrop</span><span class="p">)</span>
+
+        <span class="n">monitorsnifferrx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MonitorSnifferRx&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source simulating a wifi device in monitor mode sniffing all received frames&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">monitorsnifferrx</span><span class="p">)</span>
+
+        <span class="n">monitorsniffertx</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;MonitorSnifferTx&quot;</span><span class="p">,</span> <span class="s">&quot;Trace source simulating the capability of a wifi device in monitor mode to sniff all frames being transmitted&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">monitorsniffertx</span><span class="p">)</span>
+
+
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3YansWifiPhy</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ns3-yans-wifi-phy-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3application.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3application.html
new file mode 100644 (file)
index 0000000..755f478
--- /dev/null
@@ -0,0 +1,181 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.ns3application &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.ns3application</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span><span class="p">,</span> <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3base</span> <span class="kn">import</span> <span class="n">NS3Base</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3BaseApplication"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3application.NS3BaseApplication">[docs]</a><span class="k">class</span> <span class="nc">NS3BaseApplication</span><span class="p">(</span><span class="n">NS3Base</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;abstract::ns3::Application&quot;</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3BaseApplication</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_node</span> <span class="o">=</span> <span class="bp">None</span>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BaseApplication.node"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3application.NS3BaseApplication.node">[docs]</a>    <span class="k">def</span> <span class="nf">node</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_node</span><span class="p">:</span>
+            <span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3node</span> <span class="kn">import</span> <span class="n">NS3BaseNode</span>
+            <span class="n">nodes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">NS3BaseNode</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+
+            <span class="k">if</span> <span class="ow">not</span> <span class="n">nodes</span><span class="p">:</span> 
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Application not connected to node&quot;</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">_node</span> <span class="o">=</span> <span class="n">nodes</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_node</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_rms_to_wait</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">rms</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+        <span class="n">rms</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">rms</span>
+
+    <span class="k">def</span> <span class="nf">_connect_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span>
+        <span class="k">if</span> <span class="n">node</span><span class="o">.</span><span class="n">uuid</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">connected</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;AddApplication&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_connected</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+
+<div class="viewcode-block" id="NS3BaseApplication.do_stop"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3application.NS3BaseApplication.do_stop">[docs]</a>    <span class="k">def</span> <span class="nf">do_stop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">:</span>
+            <span class="c"># No need to do anything, simulation.Destroy() will stop every object</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Stopping command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;Stop&quot;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_stopped</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="NS3BaseApplication.do_start"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3application.NS3BaseApplication.do_start">[docs]</a>    <span class="k">def</span> <span class="nf">do_start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;---- RESCHEDULING START ----&quot;</span> <span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">start</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="nb">super</span><span class="p">(</span><span class="n">NS3BaseApplication</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_start</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_start_time</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">start_time</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BaseApplication.state"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3application.NS3BaseApplication.state">[docs]</a>    <span class="k">def</span> <span class="nf">state</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">:</span>
+            <span class="k">try</span><span class="p">:</span>
+                <span class="n">is_running</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;isAppRunning&quot;</span><span class="p">)</span>
+                
+                <span class="k">if</span> <span class="ow">not</span> <span class="n">is_running</span><span class="p">:</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">set_stopped</span><span class="p">()</span>
+            <span class="k">except</span><span class="p">:</span>
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Application failed. Can not retrieve state&quot;</span>
+                <span class="n">out</span> <span class="o">=</span> <span class="s">&quot;&quot;</span>
+
+                <span class="kn">import</span> <span class="nn">traceback</span>
+                <span class="n">err</span> <span class="o">=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">()</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">do_fail</span><span class="p">()</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3arpl3protocol.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3arpl3protocol.html
new file mode 100644 (file)
index 0000000..ad7db8e
--- /dev/null
@@ -0,0 +1,137 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.ns3arpl3protocol &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.ns3arpl3protocol</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3base</span> <span class="kn">import</span> <span class="n">NS3Base</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3BaseArpL3Protocol"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3arpl3protocol.NS3BaseArpL3Protocol">[docs]</a><span class="k">class</span> <span class="nc">NS3BaseArpL3Protocol</span><span class="p">(</span><span class="n">NS3Base</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;abstract::ns3::ArpL3Protocol&quot;</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BaseArpL3Protocol.node"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3arpl3protocol.NS3BaseArpL3Protocol.node">[docs]</a>    <span class="k">def</span> <span class="nf">node</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3node</span> <span class="kn">import</span> <span class="n">NS3BaseNode</span>
+        <span class="n">nodes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">NS3BaseNode</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">nodes</span><span class="p">:</span> 
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;ArpL3Protocol not connected to node&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">return</span> <span class="n">nodes</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_rms_to_wait</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">rms</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+        <span class="n">rms</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">rms</span>
+
+    <span class="k">def</span> <span class="nf">_connect_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">pass</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3base.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3base.html
new file mode 100644 (file)
index 0000000..dd54a0c
--- /dev/null
@@ -0,0 +1,257 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.ns3base &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.ns3base</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Flags</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">TraceAttr</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3Base"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3base.NS3Base">[docs]</a><span class="k">class</span> <span class="nc">NS3Base</span><span class="p">(</span><span class="n">ResourceManager</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;abstract::ns3::Object&quot;</span>
+    <span class="n">_platform</span> <span class="o">=</span> <span class="s">&quot;ns3&quot;</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3Base</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_uuid</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_connected</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_trace_filename</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_node</span> <span class="o">=</span> <span class="bp">None</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3Base.connected"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3base.NS3Base.connected">[docs]</a>    <span class="k">def</span> <span class="nf">connected</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_connected</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3Base.uuid"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3base.NS3Base.uuid">[docs]</a>    <span class="k">def</span> <span class="nf">uuid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_uuid</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3Base.simulation"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3base.NS3Base.simulation">[docs]</a>    <span class="k">def</span> <span class="nf">simulation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">simulation</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3Base.node"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3base.NS3Base.node">[docs]</a>    <span class="k">def</span> <span class="nf">node</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_node</span><span class="p">:</span>
+            <span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3node</span> <span class="kn">import</span> <span class="n">NS3BaseNode</span>
+            <span class="n">nodes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">NS3BaseNode</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+            <span class="k">if</span> <span class="n">nodes</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_node</span> <span class="o">=</span> <span class="n">nodes</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_node</span>
+</div>
+<div class="viewcode-block" id="NS3Base.trace"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3base.NS3Base.trace">[docs]</a>    <span class="k">def</span> <span class="nf">trace</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">attr</span> <span class="o">=</span> <span class="n">TraceAttr</span><span class="o">.</span><span class="n">ALL</span><span class="p">,</span> <span class="n">block</span> <span class="o">=</span> <span class="mi">512</span><span class="p">,</span> <span class="n">offset</span> <span class="o">=</span> <span class="mi">0</span><span class="p">):</span>
+        <span class="n">filename</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_trace_filename</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">filename</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s">&quot;Can not resolve trace </span><span class="si">%s</span><span class="s">. Did you enabled it?&quot;</span> <span class="o">%</span> <span class="n">name</span><span class="p">)</span>
+            <span class="k">return</span> <span class="s">&quot;&quot;</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">trace</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="n">block</span><span class="p">,</span> <span class="n">offset</span><span class="p">)</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_rms_to_wait</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the collection of ns-3 RMs that this RM needs to</span>
+<span class="sd">        wait for before start</span>
+
+<span class="sd">        This method should be overriden to wait for other ns-3</span>
+<span class="sd">        objects to be deployed before proceeding with the deployment</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">rms</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+        <span class="n">node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span>
+        <span class="k">if</span> <span class="n">node</span><span class="p">:</span> <span class="n">rms</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">rms</span>
+
+    <span class="k">def</span> <span class="nf">_instantiate_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">:</span>
+            <span class="k">return</span> 
+
+        <span class="n">kwargs</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
+        <span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attrs</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span> <span class="n">attr</span><span class="o">.</span><span class="n">has_flag</span><span class="p">(</span><span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span> <span class="ow">and</span> <span class="n">attr</span><span class="o">.</span><span class="n">has_changed</span> <span class="p">):</span>
+                <span class="k">continue</span>
+
+            <span class="n">kwargs</span><span class="p">[</span><span class="n">attr</span><span class="o">.</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">attr</span><span class="o">.</span><span class="n">_value</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">_uuid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">factory</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">(),</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_configure_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">_connect_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span>
+        <span class="k">if</span> <span class="n">node</span> <span class="ow">and</span> <span class="n">node</span><span class="o">.</span><span class="n">uuid</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">connected</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;AggregateObject&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_connected</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_wait_rms</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns True if dependent RMs are not yer READY, False otherwise&quot;&quot;&quot;</span>
+        <span class="k">for</span> <span class="n">rm</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_rms_to_wait</span><span class="p">:</span>
+            <span class="k">if</span> <span class="n">rm</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+                <span class="k">return</span> <span class="bp">True</span>
+        <span class="k">return</span> <span class="bp">False</span>
+
+<div class="viewcode-block" id="NS3Base.do_provision"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3base.NS3Base.do_provision">[docs]</a>    <span class="k">def</span> <span class="nf">do_provision</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_instantiate_object</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_connect_object</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_configure_object</span><span class="p">()</span>
+      
+        <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Provisioning finished&quot;</span><span class="p">)</span>
+
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3Base</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_provision</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="NS3Base.do_deploy"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3base.NS3Base.do_deploy">[docs]</a>    <span class="k">def</span> <span class="nf">do_deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_wait_rms</span><span class="p">():</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;---- RESCHEDULING DEPLOY ----&quot;</span> <span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">deploy</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_provision</span><span class="p">()</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_ready</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="NS3Base.do_start"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3base.NS3Base.do_start">[docs]</a>    <span class="k">def</span> <span class="nf">do_start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+            <span class="c"># No need to do anything, simulation.Run() will start every object</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Starting&quot;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_started</span><span class="p">()</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Failed&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+</div>
+<div class="viewcode-block" id="NS3Base.do_stop"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3base.NS3Base.do_stop">[docs]</a>    <span class="k">def</span> <span class="nf">do_stop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">:</span>
+            <span class="c"># No need to do anything, simulation.Destroy() will stop every object</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Stopping&quot;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_stopped</span><span class="p">()</span>
+    </div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3Base.state"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3base.NS3Base.state">[docs]</a>    <span class="k">def</span> <span class="nf">state</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span>
+</div>
+<div class="viewcode-block" id="NS3Base.get"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3base.NS3Base.get">[docs]</a>    <span class="k">def</span> <span class="nf">get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="ow">in</span> <span class="p">[</span><span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">,</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">]</span> <span class="ow">and</span> \
+                <span class="bp">self</span><span class="o">.</span><span class="n">has_flag</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span><span class="p">)</span> <span class="ow">and</span> \
+                <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">has_flag</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">Flags</span><span class="o">.</span><span class="n">NoRead</span><span class="p">):</span> 
+            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">ns3_get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">value</span> <span class="o">=</span> <span class="nb">super</span><span class="p">(</span><span class="n">NS3Base</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">value</span>
+</div>
+<div class="viewcode-block" id="NS3Base.set"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3base.NS3Base.set">[docs]</a>    <span class="k">def</span> <span class="nf">set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="ow">in</span> <span class="p">[</span><span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">,</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">]</span> <span class="ow">and</span> \
+                <span class="bp">self</span><span class="o">.</span><span class="n">has_flag</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span><span class="p">)</span> <span class="ow">and</span> \
+                <span class="ow">not</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">has_flag</span><span class="p">(</span><span class="n">Flags</span><span class="o">.</span><span class="n">NoWrite</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">has_flag</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)):</span> 
+            <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">ns3_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
+        
+        <span class="n">value</span> <span class="o">=</span> <span class="nb">super</span><span class="p">(</span><span class="n">NS3Base</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">value</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3ccndceapplication.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3ccndceapplication.html
new file mode 100644 (file)
index 0000000..273de63
--- /dev/null
@@ -0,0 +1,212 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.ns3ccndceapplication &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.ns3ccndceapplication</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span><span class="p">,</span> <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3dceapplication</span> <span class="kn">import</span> <span class="n">NS3BaseDceApplication</span>
+
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">threading</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3BaseCCNDceApplication"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3ccndceapplication.NS3BaseCCNDceApplication">[docs]</a><span class="k">class</span> <span class="nc">NS3BaseCCNDceApplication</span><span class="p">(</span><span class="n">NS3BaseDceApplication</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;abstract::ns3::CCNDceApplication&quot;</span>
+
+    <span class="c"># Lock used to synchronize usage of CcnClientHelper </span>
+    <span class="n">ccn_client_lock</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Lock</span><span class="p">()</span>
+    <span class="n">_ccn_client_helper_uuid</span> <span class="o">=</span> <span class="bp">None</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BaseCCNDceApplication.ccn_client_helper_uuid"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3ccndceapplication.NS3BaseCCNDceApplication.ccn_client_helper_uuid">[docs]</a>    <span class="k">def</span> <span class="nf">ccn_client_helper_uuid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ccn_client_helper_uuid</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_ccn_client_helper_uuid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="s">&quot;CcnClientHelper&quot;</span><span class="p">)</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ccn_client_helper_uuid</span>
+</div>
+    <span class="k">def</span> <span class="nf">_instantiate_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">_connect_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span>
+        <span class="k">if</span> <span class="n">node</span><span class="o">.</span><span class="n">uuid</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">connected</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_connected</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+
+            <span class="c"># Preventing concurrent access to the DceApplicationHelper</span>
+            <span class="c"># from different DceApplication RMs</span>
+            <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">ccn_client_lock</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">ccn_client_helper_uuid</span><span class="p">,</span> 
+                        <span class="s">&quot;ResetArguments&quot;</span><span class="p">)</span> 
+
+                <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">ccn_client_helper_uuid</span><span class="p">,</span> 
+                        <span class="s">&quot;ResetEnvironment&quot;</span><span class="p">)</span> 
+
+                <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">ccn_client_helper_uuid</span><span class="p">,</span> 
+                        <span class="s">&quot;SetBinary&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;binary&quot;</span><span class="p">))</span> 
+
+                <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">ccn_client_helper_uuid</span><span class="p">,</span> 
+                        <span class="s">&quot;SetStackSize&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;stackSize&quot;</span><span class="p">))</span> 
+
+                <span class="n">arguments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;arguments&quot;</span><span class="p">)</span>
+                <span class="k">if</span> <span class="n">arguments</span><span class="p">:</span>
+                    <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="nb">map</span><span class="p">(</span><span class="nb">str</span><span class="o">.</span><span class="n">strip</span><span class="p">,</span> <span class="n">arguments</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;;&quot;</span><span class="p">)):</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span>
+                                 <span class="bp">self</span><span class="o">.</span><span class="n">ccn_client_helper_uuid</span><span class="p">,</span> 
+                                <span class="s">&quot;AddArgument&quot;</span><span class="p">,</span> <span class="n">arg</span><span class="p">)</span>
+
+                <span class="n">environment</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;environment&quot;</span><span class="p">)</span>
+                <span class="k">if</span> <span class="n">environment</span><span class="p">:</span>
+                    <span class="k">for</span> <span class="n">env</span> <span class="ow">in</span> <span class="nb">map</span><span class="p">(</span><span class="nb">str</span><span class="o">.</span><span class="n">strip</span><span class="p">,</span> <span class="n">environment</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;;&quot;</span><span class="p">)):</span>
+                        <span class="n">key</span><span class="p">,</span> <span class="n">val</span> <span class="o">=</span> <span class="n">env</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;=&quot;</span><span class="p">)</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span>
+                                <span class="bp">self</span><span class="o">.</span><span class="n">ccn_client_helper_uuid</span><span class="p">,</span> 
+                               <span class="s">&quot;AddEnvironment&quot;</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">val</span><span class="p">)</span>
+
+                <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">has_attribute</span><span class="p">(</span><span class="s">&quot;files&quot;</span><span class="p">):</span>
+                    <span class="n">files</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;files&quot;</span><span class="p">)</span>
+                    <span class="k">if</span> <span class="n">files</span><span class="p">:</span>
+                        <span class="k">for</span> <span class="nb">file</span> <span class="ow">in</span> <span class="nb">map</span><span class="p">(</span><span class="nb">str</span><span class="o">.</span><span class="n">strip</span><span class="p">,</span> <span class="n">files</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;;&quot;</span><span class="p">)):</span>
+                            <span class="n">remotepath</span><span class="p">,</span> <span class="n">dcepath</span> <span class="o">=</span> <span class="nb">file</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;=&quot;</span><span class="p">)</span>
+                            <span class="n">localpath</span> <span class="o">=</span>  <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">app_home</span><span class="p">,</span> 
+                                    <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">remotepath</span><span class="p">))</span>
+                            <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span>
+                                    <span class="bp">self</span><span class="o">.</span><span class="n">ccn_client_helper_uuid</span><span class="p">,</span> 
+                                    <span class="s">&quot;AddFile&quot;</span><span class="p">,</span> <span class="n">localpath</span><span class="p">,</span> <span class="n">dcepath</span><span class="p">)</span>
+
+                <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">has_attribute</span><span class="p">(</span><span class="s">&quot;stdinFile&quot;</span><span class="p">):</span>
+                    <span class="n">stdinfile</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;stdinFile&quot;</span><span class="p">)</span>
+                    <span class="k">if</span> <span class="n">stdinfile</span><span class="p">:</span>
+                        <span class="c"># stdinfile might be an empty text that should be set as</span>
+                        <span class="c"># stdin</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span>
+                                <span class="bp">self</span><span class="o">.</span><span class="n">ccn_client_helper_uuid</span><span class="p">,</span> 
+                                <span class="s">&quot;SetStdinFile&quot;</span><span class="p">,</span> <span class="n">stdinfile</span><span class="p">)</span>
+
+                <span class="n">apps_uuid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">ccn_client_helper_uuid</span><span class="p">,</span> 
+                        <span class="s">&quot;InstallInNode&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+
+                <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">                container_uuid = self.simulation.create(&quot;NodeContainer&quot;)</span>
+<span class="sd">                self.simulation.invoke(container_uuid, &quot;Add&quot;, self.node.uuid)</span>
+<span class="sd">                apps_uuid = self.simulation.invoke(</span>
+<span class="sd">                        self.ccn_client_helper_uuid, </span>
+<span class="sd">                        &quot;Install&quot;, container_uuid)</span>
+<span class="sd">                &quot;&quot;&quot;</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">_uuid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">apps_uuid</span><span class="p">,</span> <span class="s">&quot;Get&quot;</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">has_changed</span><span class="p">(</span><span class="s">&quot;StartTime&quot;</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">ns3_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;StartTime&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;StartTime&quot;</span><span class="p">))</span>
+
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">has_changed</span><span class="p">(</span><span class="s">&quot;StopTime&quot;</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">ns3_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;StopTime&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;StopTime&quot;</span><span class="p">))</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3channel.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3channel.html
new file mode 100644 (file)
index 0000000..cc8246d
--- /dev/null
@@ -0,0 +1,141 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.ns3channel &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.ns3channel</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3base</span> <span class="kn">import</span> <span class="n">NS3Base</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3BaseChannel"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3channel.NS3BaseChannel">[docs]</a><span class="k">class</span> <span class="nc">NS3BaseChannel</span><span class="p">(</span><span class="n">NS3Base</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;abstract::ns3::Channel&quot;</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BaseChannel.simulation"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3channel.NS3BaseChannel.simulation">[docs]</a>    <span class="k">def</span> <span class="nf">simulation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">devices</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">simulation</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BaseChannel.devices"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3channel.NS3BaseChannel.devices">[docs]</a>    <span class="k">def</span> <span class="nf">devices</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3netdevice</span> <span class="kn">import</span> <span class="n">NS3BaseNetDevice</span>
+        <span class="n">devices</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">NS3BaseNetDevice</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">devices</span><span class="p">:</span> 
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Channel not connected to devices&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">return</span> <span class="n">devices</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_rms_to_wait</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">rms</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+        <span class="n">rms</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">rms</span>
+
+    <span class="k">def</span> <span class="nf">_connect_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">pass</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3client.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3client.html
new file mode 100644 (file)
index 0000000..7e94ddc
--- /dev/null
@@ -0,0 +1,141 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.ns3client &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.ns3client</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<div class="viewcode-block" id="NS3Client"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3client.NS3Client">[docs]</a><span class="k">class</span> <span class="nc">NS3Client</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot; Common Interface for NS3 client classes &quot;&quot;&quot;</span>
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3Client</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+
+<div class="viewcode-block" id="NS3Client.create"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3client.NS3Client.create">[docs]</a>    <span class="k">def</span> <span class="nf">create</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">pass</span>
+</div>
+<div class="viewcode-block" id="NS3Client.factory"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3client.NS3Client.factory">[docs]</a>    <span class="k">def</span> <span class="nf">factory</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">pass</span>
+</div>
+<div class="viewcode-block" id="NS3Client.invoke"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3client.NS3Client.invoke">[docs]</a>    <span class="k">def</span> <span class="nf">invoke</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">pass</span>
+</div>
+<div class="viewcode-block" id="NS3Client.set"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3client.NS3Client.set">[docs]</a>    <span class="k">def</span> <span class="nf">set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">pass</span>
+</div>
+<div class="viewcode-block" id="NS3Client.get"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3client.NS3Client.get">[docs]</a>    <span class="k">def</span> <span class="nf">get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">pass</span>
+</div>
+<div class="viewcode-block" id="NS3Client.flush"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3client.NS3Client.flush">[docs]</a>    <span class="k">def</span> <span class="nf">flush</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">pass</span>
+</div>
+<div class="viewcode-block" id="NS3Client.start"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3client.NS3Client.start">[docs]</a>    <span class="k">def</span> <span class="nf">start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">pass</span>
+</div>
+<div class="viewcode-block" id="NS3Client.stop"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3client.NS3Client.stop">[docs]</a>    <span class="k">def</span> <span class="nf">stop</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">pass</span>
+</div>
+<div class="viewcode-block" id="NS3Client.shutdown"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3client.NS3Client.shutdown">[docs]</a>    <span class="k">def</span> <span class="nf">shutdown</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">pass</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3dceapplication.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3dceapplication.html
new file mode 100644 (file)
index 0000000..87795b9
--- /dev/null
@@ -0,0 +1,272 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.ns3dceapplication &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.ns3dceapplication</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span><span class="p">,</span> <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3application</span> <span class="kn">import</span> <span class="n">NS3BaseApplication</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">TraceAttr</span>
+
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3wrapper</span> <span class="kn">import</span> <span class="n">SIMULATOR_UUID</span>
+
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">time</span>
+<span class="kn">import</span> <span class="nn">threading</span>
+        
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3BaseDceApplication"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3dceapplication.NS3BaseDceApplication">[docs]</a><span class="k">class</span> <span class="nc">NS3BaseDceApplication</span><span class="p">(</span><span class="n">NS3BaseApplication</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;abstract::ns3::DceApplication&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">binary</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;binary&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;Name of binary to execute&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">stack_size</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;stackSize&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;Stack Size for DCE&quot;</span><span class="p">,</span>
+                <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span>
+                <span class="n">default</span> <span class="o">=</span> <span class="mi">1</span><span class="o">&lt;&lt;</span><span class="mi">20</span><span class="p">,</span>                
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">arguments</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;arguments&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;Semi-colon separated list of arguments for the application&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">environment</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;environment&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;Semi-colon separated list of &#39;key=value&#39; pairs to set as &quot;</span>
+                <span class="s">&quot;DCE environment variables.&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">use_dlm</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;useDlmLoader&quot;</span><span class="p">,</span>
+                <span class="s">&quot;Use ns3::DlmLoaderFactory as library loader&quot;</span><span class="p">,</span>
+                <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+        
+        <span class="n">starttime</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;StartTime&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Time at which the application will start&quot;</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+0.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">stoptime</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;StopTime&quot;</span><span class="p">,</span>
+            <span class="s">&quot;Time at which the application will stop&quot;</span><span class="p">,</span>
+            <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;+0.0ns&quot;</span><span class="p">,</span>  
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Reserved</span> <span class="o">|</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Construct</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">binary</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">stack_size</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">arguments</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">environment</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">use_dlm</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">stoptime</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">starttime</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3BaseDceApplication</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_pid</span> <span class="o">=</span> <span class="bp">None</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BaseDceApplication.pid"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3dceapplication.NS3BaseDceApplication.pid">[docs]</a>    <span class="k">def</span> <span class="nf">pid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pid</span>
+</div>
+    <span class="k">def</span> <span class="nf">_instantiate_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">_connect_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span>
+        <span class="k">if</span> <span class="n">node</span><span class="o">.</span><span class="n">uuid</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">connected</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_connected</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+
+            <span class="c"># Preventing concurrent access to the DceApplicationHelper</span>
+            <span class="c"># from different DceApplication RMs</span>
+            <span class="n">dce_helper</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">dce_helper</span>
+
+            <span class="k">with</span> <span class="n">dce_helper</span><span class="o">.</span><span class="n">dce_application_lock</span><span class="p">:</span>
+                <span class="n">dce_app_uuid</span> <span class="o">=</span> <span class="n">dce_helper</span><span class="o">.</span><span class="n">dce_application_uuid</span>
+
+                <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">dce_app_uuid</span><span class="p">,</span> <span class="s">&quot;ResetArguments&quot;</span><span class="p">)</span> 
+
+                <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">dce_app_uuid</span><span class="p">,</span> <span class="s">&quot;ResetEnvironment&quot;</span><span class="p">)</span> 
+
+                <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">dce_app_uuid</span><span class="p">,</span> 
+                        <span class="s">&quot;SetBinary&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;binary&quot;</span><span class="p">))</span> 
+
+                <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">dce_app_uuid</span><span class="p">,</span> 
+                        <span class="s">&quot;SetStackSize&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;stackSize&quot;</span><span class="p">))</span> 
+
+                <span class="n">arguments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;arguments&quot;</span><span class="p">)</span>
+                <span class="k">if</span> <span class="n">arguments</span><span class="p">:</span>
+                    <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="nb">map</span><span class="p">(</span><span class="nb">str</span><span class="o">.</span><span class="n">strip</span><span class="p">,</span> <span class="n">arguments</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;;&quot;</span><span class="p">)):</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">dce_app_uuid</span><span class="p">,</span> 
+                            <span class="s">&quot;AddArgument&quot;</span><span class="p">,</span> <span class="n">arg</span><span class="p">)</span>
+
+                <span class="n">environment</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;environment&quot;</span><span class="p">)</span>
+                <span class="k">if</span> <span class="n">environment</span><span class="p">:</span>
+                    <span class="k">for</span> <span class="n">env</span> <span class="ow">in</span> <span class="nb">map</span><span class="p">(</span><span class="nb">str</span><span class="o">.</span><span class="n">strip</span><span class="p">,</span> <span class="n">environment</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;;&quot;</span><span class="p">)):</span>
+                        <span class="n">key</span><span class="p">,</span> <span class="n">val</span> <span class="o">=</span> <span class="n">env</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;=&quot;</span><span class="p">)</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">dce_app_uuid</span><span class="p">,</span> 
+                            <span class="s">&quot;AddEnvironment&quot;</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">val</span><span class="p">)</span>
+
+                <span class="n">apps_uuid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">dce_app_uuid</span><span class="p">,</span> 
+                        <span class="s">&quot;InstallInNode&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">_uuid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">apps_uuid</span><span class="p">,</span> <span class="s">&quot;Get&quot;</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">has_changed</span><span class="p">(</span><span class="s">&quot;StartTime&quot;</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">ns3_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;StartTime&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;StartTime&quot;</span><span class="p">))</span>
+
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">has_changed</span><span class="p">(</span><span class="s">&quot;StopTime&quot;</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">ns3_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;StopTime&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;StopTime&quot;</span><span class="p">))</span>
+
+<div class="viewcode-block" id="NS3BaseDceApplication.do_stop"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3dceapplication.NS3BaseDceApplication.do_stop">[docs]</a>    <span class="k">def</span> <span class="nf">do_stop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">:</span>
+            <span class="c"># No need to do anything, simulation.Destroy() will stop every object</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Stopping command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;Stop&quot;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_stopped</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="NS3BaseDceApplication.do_start"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3dceapplication.NS3BaseDceApplication.do_start">[docs]</a>    <span class="k">def</span> <span class="nf">do_start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;---- RESCHEDULING START ----&quot;</span> <span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">start</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">is_app_started</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;isAppStarted&quot;</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="n">is_app_started</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">state</span> <span class="o">&gt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">:</span>
+                <span class="nb">super</span><span class="p">(</span><span class="n">NS3BaseApplication</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_start</span><span class="p">()</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_start_time</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">start_time</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="c"># Reschedule until dce application is actually started</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;---- RESCHEDULING START ----&quot;</span> <span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">start</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NS3BaseDceApplication.trace"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3dceapplication.NS3BaseDceApplication.trace">[docs]</a>    <span class="k">def</span> <span class="nf">trace</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">attr</span> <span class="o">=</span> <span class="n">TraceAttr</span><span class="o">.</span><span class="n">ALL</span><span class="p">,</span> <span class="n">block</span> <span class="o">=</span> <span class="mi">512</span><span class="p">,</span> <span class="n">offset</span> <span class="o">=</span> <span class="mi">0</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_configure_traces</span><span class="p">()</span>
+        <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">NS3BaseDceApplication</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">trace</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">attr</span> <span class="o">=</span> <span class="n">attr</span><span class="p">,</span> 
+                <span class="n">block</span> <span class="o">=</span> <span class="n">block</span><span class="p">,</span> <span class="n">offset</span> <span class="o">=</span> <span class="n">offset</span><span class="p">)</span>
+</div>
+    <span class="k">def</span> <span class="nf">_configure_traces</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pid</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
+            <span class="k">return</span> 
+
+        <span class="c"># Using lock to prevent concurrent access to the DceApplicationHelper</span>
+        <span class="c"># from different DceApplication RMs</span>
+        <span class="n">dce_helper</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">dce_helper</span>
+
+        <span class="k">with</span> <span class="n">dce_helper</span><span class="o">.</span><span class="n">dce_application_lock</span><span class="p">:</span>
+            <span class="n">dce_app_uuid</span> <span class="o">=</span> <span class="n">dce_helper</span><span class="o">.</span><span class="n">dce_application_uuid</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">_pid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">dce_app_uuid</span><span class="p">,</span> 
+                    <span class="s">&quot;GetPid&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+
+        <span class="n">node_id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">node_id</span> 
+        <span class="bp">self</span><span class="o">.</span><span class="n">_trace_filename</span><span class="p">[</span><span class="s">&quot;stdout&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&quot;files-</span><span class="si">%s</span><span class="s">/var/log/</span><span class="si">%s</span><span class="s">/stdout&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">node_id</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">pid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_trace_filename</span><span class="p">[</span><span class="s">&quot;stderr&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&quot;files-</span><span class="si">%s</span><span class="s">/var/log/</span><span class="si">%s</span><span class="s">/stderr&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">node_id</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">pid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_trace_filename</span><span class="p">[</span><span class="s">&quot;status&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&quot;files-</span><span class="si">%s</span><span class="s">/var/log/</span><span class="si">%s</span><span class="s">/status&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">node_id</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">pid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_trace_filename</span><span class="p">[</span><span class="s">&quot;cmdline&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&quot;files-</span><span class="si">%s</span><span class="s">/var/log/</span><span class="si">%s</span><span class="s">/cmdline&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">node_id</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">pid</span><span class="p">)</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3dcehelper.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3dcehelper.html
new file mode 100644 (file)
index 0000000..6c104f3
--- /dev/null
@@ -0,0 +1,149 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.ns3dcehelper &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.ns3dcehelper</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">time</span>
+<span class="kn">import</span> <span class="nn">threading</span>
+        
+<div class="viewcode-block" id="NS3DceHelper"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3dcehelper.NS3DceHelper">[docs]</a><span class="k">class</span> <span class="nc">NS3DceHelper</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">simulation</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span> <span class="o">=</span> <span class="n">simulation</span>
+
+        <span class="c"># Lock used to synchronize usage of DceManagerHelper </span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_dce_manager_lock</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Lock</span><span class="p">()</span>
+        <span class="c"># Lock used to synchronize usage of DceApplicationHelper</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_dce_application_lock</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Lock</span><span class="p">()</span>
+   
+        <span class="bp">self</span><span class="o">.</span><span class="n">_dce_manager_uuid</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_dce_application_uuid</span> <span class="o">=</span> <span class="bp">None</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3DceHelper.dce_manager_uuid"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3dcehelper.NS3DceHelper.dce_manager_uuid">[docs]</a>    <span class="k">def</span> <span class="nf">dce_manager_uuid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_dce_manager_uuid</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_dce_manager_uuid</span> <span class="o">=</span> \
+                    <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="s">&quot;DceManagerHelper&quot;</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_dce_manager_uuid</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3DceHelper.dce_application_uuid"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3dcehelper.NS3DceHelper.dce_application_uuid">[docs]</a>    <span class="k">def</span> <span class="nf">dce_application_uuid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_dce_application_uuid</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_dce_application_uuid</span> <span class="o">=</span> \
+                    <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="s">&quot;DceApplicationHelper&quot;</span><span class="p">)</span>
+                        
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_dce_application_uuid</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3DceHelper.dce_manager_lock"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3dcehelper.NS3DceHelper.dce_manager_lock">[docs]</a>    <span class="k">def</span> <span class="nf">dce_manager_lock</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_dce_manager_lock</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3DceHelper.dce_application_lock"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3dcehelper.NS3DceHelper.dce_application_lock">[docs]</a>    <span class="k">def</span> <span class="nf">dce_application_lock</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_dce_application_lock</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3errormodel.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3errormodel.html
new file mode 100644 (file)
index 0000000..08e2721
--- /dev/null
@@ -0,0 +1,140 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.ns3errormodel &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.ns3errormodel</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3base</span> <span class="kn">import</span> <span class="n">NS3Base</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3BaseErrorModel"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3errormodel.NS3BaseErrorModel">[docs]</a><span class="k">class</span> <span class="nc">NS3BaseErrorModel</span><span class="p">(</span><span class="n">NS3Base</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;abstract::ns3::ErrorModel&quot;</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BaseErrorModel.device"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3errormodel.NS3BaseErrorModel.device">[docs]</a>    <span class="k">def</span> <span class="nf">device</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3netdevice</span> <span class="kn">import</span> <span class="n">NS3BaseNetDevice</span>
+        <span class="n">devices</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">NS3BaseNetDevice</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">devices</span><span class="p">:</span> 
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;ErrorModel not connected to device&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">return</span> <span class="n">devices</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_rms_to_wait</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">rms</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+        <span class="n">rms</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">device</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">rms</span>
+
+    <span class="k">def</span> <span class="nf">_connect_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">device</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">device</span>
+        <span class="k">if</span> <span class="n">device</span><span class="o">.</span><span class="n">uuid</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">connected</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">device</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;SetReceiveErrorModel&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_connected</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">device</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3errorratemodel.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3errorratemodel.html
new file mode 100644 (file)
index 0000000..7a81fc4
--- /dev/null
@@ -0,0 +1,144 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.ns3errorratemodel &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.ns3errorratemodel</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3base</span> <span class="kn">import</span> <span class="n">NS3Base</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3BaseErrorRateModel"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3errorratemodel.NS3BaseErrorRateModel">[docs]</a><span class="k">class</span> <span class="nc">NS3BaseErrorRateModel</span><span class="p">(</span><span class="n">NS3Base</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;abstract::ns3::ErrorRateModel&quot;</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BaseErrorRateModel.node"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3errorratemodel.NS3BaseErrorRateModel.node">[docs]</a>    <span class="k">def</span> <span class="nf">node</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">phy</span><span class="o">.</span><span class="n">node</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BaseErrorRateModel.phy"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3errorratemodel.NS3BaseErrorRateModel.phy">[docs]</a>    <span class="k">def</span> <span class="nf">phy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3wifiphy</span> <span class="kn">import</span> <span class="n">NS3BaseWifiPhy</span>
+        <span class="n">phys</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">NS3BaseWifiPhy</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">phys</span><span class="p">:</span> 
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;ErrorRateModel not connected to phy&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">return</span> <span class="n">phys</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_rms_to_wait</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">rms</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+        <span class="n">rms</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">phy</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">rms</span>
+
+    <span class="k">def</span> <span class="nf">_connect_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">phy</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">phy</span>
+        <span class="k">if</span> <span class="n">phy</span><span class="o">.</span><span class="n">uuid</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">connected</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">phy</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;SetErrorRateModel&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_connected</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">phy</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3fdnetdevice.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3fdnetdevice.html
new file mode 100644 (file)
index 0000000..d220680
--- /dev/null
@@ -0,0 +1,149 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.ns3fdnetdevice &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.ns3fdnetdevice</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3netdevice</span> <span class="kn">import</span> <span class="n">NS3BaseNetDevice</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3BaseFdNetDevice"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3fdnetdevice.NS3BaseFdNetDevice">[docs]</a><span class="k">class</span> <span class="nc">NS3BaseFdNetDevice</span><span class="p">(</span><span class="n">NS3BaseNetDevice</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;abstract::ns3::FdNetDevice&quot;</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_rms_to_wait</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">rms</span> <span class="o">=</span> <span class="nb">set</span><span class="p">([</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="p">])</span>
+        <span class="k">return</span> <span class="n">rms</span>
+
+    <span class="k">def</span> <span class="nf">_configure_mac_address</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="c"># The wifimac is the one responsible for</span>
+        <span class="c"># configuring the MAC address</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">_connect_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span>
+        <span class="k">if</span> <span class="n">node</span> <span class="ow">and</span> <span class="n">node</span><span class="o">.</span><span class="n">uuid</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">connected</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;AddDevice&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_connected</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_instantiate_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; just validate that the simulator is in real time</span>
+<span class="sd">        mode, otherwise it is not going to work</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+
+        <span class="n">mode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;simulatorImplementationType&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">mode</span> <span class="o">!=</span> <span class="s">&quot;ns3::RealtimeSimulatorImpl&quot;</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;The simulation must run in real time!!&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+        
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3BaseFdNetDevice</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">_instantiate_object</span><span class="p">()</span>
+
+<div class="viewcode-block" id="NS3BaseFdNetDevice.recv_fd"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3fdnetdevice.NS3BaseFdNetDevice.recv_fd">[docs]</a>    <span class="k">def</span> <span class="nf">recv_fd</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">address</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;recvFD&quot;</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">address</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3icmpv4l4protocol.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3icmpv4l4protocol.html
new file mode 100644 (file)
index 0000000..08b9cac
--- /dev/null
@@ -0,0 +1,134 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.ns3icmpv4l4protocol &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.ns3icmpv4l4protocol</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3base</span> <span class="kn">import</span> <span class="n">NS3Base</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3BaseIcmpv4L4Protocol"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3icmpv4l4protocol.NS3BaseIcmpv4L4Protocol">[docs]</a><span class="k">class</span> <span class="nc">NS3BaseIcmpv4L4Protocol</span><span class="p">(</span><span class="n">NS3Base</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;abstract::ns3::Icmpv4L4Protocol&quot;</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BaseIcmpv4L4Protocol.node"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3icmpv4l4protocol.NS3BaseIcmpv4L4Protocol.node">[docs]</a>    <span class="k">def</span> <span class="nf">node</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3node</span> <span class="kn">import</span> <span class="n">NS3BaseNode</span>
+        <span class="n">nodes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">NS3BaseNode</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">nodes</span><span class="p">:</span> 
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Icmp4L4Protocol not connected to node&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">return</span> <span class="n">nodes</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_rms_to_wait</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">rms</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+        <span class="n">rms</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">rms</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3ipv4l3protocol.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3ipv4l3protocol.html
new file mode 100644 (file)
index 0000000..af335aa
--- /dev/null
@@ -0,0 +1,157 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.ns3ipv4l3protocol &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.ns3ipv4l3protocol</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3base</span> <span class="kn">import</span> <span class="n">NS3Base</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3BaseIpv4L3Protocol"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3ipv4l3protocol.NS3BaseIpv4L3Protocol">[docs]</a><span class="k">class</span> <span class="nc">NS3BaseIpv4L3Protocol</span><span class="p">(</span><span class="n">NS3Base</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;abstract::ns3::Ipv4L3Protocol&quot;</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3BaseIpv4L3Protocol</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">list_routing_uuid</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">static_routing_uuid</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">global_routing_uuid</span> <span class="o">=</span> <span class="bp">None</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BaseIpv4L3Protocol.node"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3ipv4l3protocol.NS3BaseIpv4L3Protocol.node">[docs]</a>    <span class="k">def</span> <span class="nf">node</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3node</span> <span class="kn">import</span> <span class="n">NS3BaseNode</span>
+        <span class="n">nodes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">NS3BaseNode</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">nodes</span><span class="p">:</span> 
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Ipv4L3Protocol not connected to node&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">return</span> <span class="n">nodes</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_rms_to_wait</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">rms</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+        <span class="n">rms</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">rms</span>
+
+    <span class="k">def</span> <span class="nf">_configure_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">simulation</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">list_routing_uuid</span> <span class="o">=</span> <span class="n">simulation</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="s">&quot;Ipv4ListRouting&quot;</span><span class="p">)</span>
+        <span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;SetRoutingProtocol&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">list_routing_uuid</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">static_routing_uuid</span> <span class="o">=</span> <span class="n">simulation</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="s">&quot;Ipv4StaticRouting&quot;</span><span class="p">)</span>
+        <span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">list_routing_uuid</span><span class="p">,</span> <span class="s">&quot;AddRoutingProtocol&quot;</span><span class="p">,</span> 
+                <span class="bp">self</span><span class="o">.</span><span class="n">static_routing_uuid</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">global_routing_uuid</span> <span class="o">=</span> <span class="n">simulation</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="s">&quot;Ipv4GlobalRouting&quot;</span><span class="p">)</span>
+        <span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">list_routing_uuid</span><span class="p">,</span> <span class="s">&quot;AddRoutingProtocol&quot;</span><span class="p">,</span> 
+                <span class="bp">self</span><span class="o">.</span><span class="n">global_routing_uuid</span><span class="p">,</span> <span class="o">-</span><span class="mi">10</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_connect_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">pass</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3mobilitymodel.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3mobilitymodel.html
new file mode 100644 (file)
index 0000000..63b72b4
--- /dev/null
@@ -0,0 +1,135 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.ns3mobilitymodel &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.ns3mobilitymodel</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3base</span> <span class="kn">import</span> <span class="n">NS3Base</span>
+
+<span class="c"># TODO: </span>
+<span class="c">#       - mobility.SetPositionAllocator (&quot;ns3::GridPositionAllocator&quot;,</span>
+<span class="c">#       - set hook for Position - SetPosition(Vector)</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3BaseMobilityModel"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3mobilitymodel.NS3BaseMobilityModel">[docs]</a><span class="k">class</span> <span class="nc">NS3BaseMobilityModel</span><span class="p">(</span><span class="n">NS3Base</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;abstract::ns3::MobilityModel&quot;</span>
+
+    <span class="k">def</span> <span class="nf">_configure_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="c"># Set initial position</span>
+        <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;Position&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">position</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">ns3_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;Position&quot;</span><span class="p">,</span> <span class="n">position</span><span class="p">)</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_rms_to_wait</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">rms</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+        <span class="n">rms</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">rms</span>
+
+    <span class="k">def</span> <span class="nf">_connect_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">pass</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3netdevice.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3netdevice.html
new file mode 100644 (file)
index 0000000..51630fa
--- /dev/null
@@ -0,0 +1,313 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.ns3netdevice &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.ns3netdevice</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3base</span> <span class="kn">import</span> <span class="n">NS3Base</span>
+
+<span class="kn">import</span> <span class="nn">ipaddr</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3BaseNetDevice"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice">[docs]</a><span class="k">class</span> <span class="nc">NS3BaseNetDevice</span><span class="p">(</span><span class="n">NS3Base</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;abstract::ns3::NetDevice&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">mac</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;mac&quot;</span><span class="p">,</span> <span class="s">&quot;MAC address for device&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">ip</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ip&quot;</span><span class="p">,</span> <span class="s">&quot;IP address for device&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">prefix</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;prefix&quot;</span><span class="p">,</span> <span class="s">&quot;Network prefix for device&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">mac</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ip</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">prefix</span><span class="p">)</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_traces</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">pcap</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;pcap&quot;</span><span class="p">,</span> <span class="s">&quot;Dump traffic sniffed on the network device in Pcap format&quot;</span><span class="p">)</span>
+        <span class="n">promisc_pcap</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;promiscPcap&quot;</span><span class="p">,</span> <span class="s">&quot;Dump traffic sniffed in promiscuous mode on the network device in Pcap format&quot;</span><span class="p">)</span>
+        <span class="n">ascii</span> <span class="o">=</span> <span class="n">Trace</span><span class="p">(</span><span class="s">&quot;ascii&quot;</span><span class="p">,</span> <span class="s">&quot;Dump traffic sniffed on the network device in Ascii format&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">pcap</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">promisc_pcap</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_trace</span><span class="p">(</span><span class="n">ascii</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3BaseNetDevice</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_ascii_helper_uuid</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_device_helper_uuid</span> <span class="o">=</span> <span class="bp">None</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BaseNetDevice.node"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice.node">[docs]</a>    <span class="k">def</span> <span class="nf">node</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3node</span> <span class="kn">import</span> <span class="n">NS3BaseNode</span>
+        <span class="n">nodes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">NS3BaseNode</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">nodes</span><span class="p">:</span> 
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Device not connected to node&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">return</span> <span class="n">nodes</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BaseNetDevice.channel"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice.channel">[docs]</a>    <span class="k">def</span> <span class="nf">channel</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3channel</span> <span class="kn">import</span> <span class="n">NS3BaseChannel</span>
+        <span class="n">channels</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">NS3BaseChannel</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">channels</span><span class="p">:</span> 
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Device not connected to channel&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">return</span> <span class="n">channels</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BaseNetDevice.queue"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice.queue">[docs]</a>    <span class="k">def</span> <span class="nf">queue</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3queue</span> <span class="kn">import</span> <span class="n">NS3BaseQueue</span>
+        <span class="n">queue</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">NS3BaseQueue</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">queue</span><span class="p">:</span> 
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Device not connected to queue&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">return</span> <span class="n">queue</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BaseNetDevice.ascii_helper_uuid"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice.ascii_helper_uuid">[docs]</a>    <span class="k">def</span> <span class="nf">ascii_helper_uuid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ascii_helper_uuid</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_ascii_helper_uuid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="s">&quot;AsciiTraceHelper&quot;</span><span class="p">)</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ascii_helper_uuid</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BaseNetDevice.device_helper_uuid"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice.device_helper_uuid">[docs]</a>    <span class="k">def</span> <span class="nf">device_helper_uuid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_device_helper_uuid</span><span class="p">:</span>
+            <span class="n">rtype</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">()</span>
+            <span class="k">if</span> <span class="n">rtype</span> <span class="o">==</span> <span class="s">&quot;ns3::PointToPointNetDevice&quot;</span><span class="p">:</span>
+                <span class="n">classname</span> <span class="o">=</span> <span class="s">&quot;PointToPointHelper&quot;</span>
+            <span class="k">elif</span> <span class="n">rtype</span> <span class="o">==</span> <span class="s">&quot;ns3::CsmaNetDevice&quot;</span><span class="p">:</span>
+                <span class="n">classname</span> <span class="o">=</span> <span class="s">&quot;CsmaHelper&quot;</span>
+            <span class="k">elif</span> <span class="n">rtype</span> <span class="o">==</span> <span class="s">&quot;ns3::EmuNetDevice&quot;</span><span class="p">:</span>
+                <span class="n">classname</span> <span class="o">=</span> <span class="s">&quot;EmuHelper&quot;</span>
+            <span class="k">elif</span> <span class="n">rtype</span> <span class="o">==</span> <span class="s">&quot;ns3::FdNetDevice&quot;</span><span class="p">:</span>
+                <span class="n">classname</span> <span class="o">=</span> <span class="s">&quot;FdNetDeviceHelper&quot;</span>
+            <span class="k">elif</span> <span class="n">rtype</span> <span class="ow">in</span> <span class="p">[</span> <span class="s">&quot;ns3::BaseStationNetDevice&quot;</span><span class="p">,</span> <span class="s">&quot;SubscriberStationNetDevice&quot;</span> <span class="p">]:</span>
+                <span class="n">classname</span> <span class="o">=</span> <span class="s">&quot;WimaxHelper&quot;</span>
+            <span class="k">elif</span> <span class="n">rtype</span> <span class="o">==</span> <span class="s">&quot;ns3::WifiNetDevice&quot;</span><span class="p">:</span>
+                <span class="n">classname</span> <span class="o">=</span> <span class="s">&quot;YansWifiPhyHelper&quot;</span>
+            <span class="k">elif</span> <span class="n">rtype</span> <span class="o">==</span> <span class="s">&quot;ns3::FdNetDevice&quot;</span><span class="p">:</span>
+                <span class="n">classname</span> <span class="o">=</span> <span class="s">&quot;FdNetDeviceHelper&quot;</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">_device_helper_uuid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">classname</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_device_helper_uuid</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_rms_to_wait</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">rms</span> <span class="o">=</span> <span class="nb">set</span><span class="p">([</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">channel</span><span class="p">])</span>
+        <span class="k">return</span> <span class="n">rms</span>
+
+    <span class="k">def</span> <span class="nf">_configure_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="c"># Set Mac</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_configure_mac_address</span><span class="p">()</span>
+
+        <span class="c"># Set IP address</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_configure_ip_address</span><span class="p">()</span>
+        
+        <span class="c"># Enable traces</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_configure_traces</span><span class="p">()</span>
+
+    <span class="k">def</span> <span class="nf">_configure_mac_address</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">mac</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;mac&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">mac</span><span class="p">:</span>
+            <span class="n">mac_uuid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="s">&quot;Mac48Address&quot;</span><span class="p">,</span> <span class="n">mac</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">mac_uuid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="s">&quot;singleton::Mac48Address&quot;</span><span class="p">,</span> <span class="s">&quot;Allocate&quot;</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;SetAddress&quot;</span><span class="p">,</span> <span class="n">mac_uuid</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_configure_ip_address</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">ip</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ip&quot;</span><span class="p">)</span>
+        <span class="n">prefix</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;prefix&quot;</span><span class="p">)</span>
+
+        <span class="n">i</span> <span class="o">=</span> <span class="n">ipaddr</span><span class="o">.</span><span class="n">IPAddress</span><span class="p">(</span><span class="n">ip</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">i</span><span class="o">.</span><span class="n">version</span> <span class="o">==</span> <span class="mi">4</span><span class="p">:</span>
+            <span class="c"># IPv4</span>
+            <span class="n">ipv4</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">ipv4</span>
+            <span class="n">ifindex_uuid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">ipv4</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;AddInterface&quot;</span><span class="p">,</span> 
+                    <span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+            <span class="n">ipv4_addr_uuid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="s">&quot;Ipv4Address&quot;</span><span class="p">,</span> <span class="n">ip</span><span class="p">)</span>
+            <span class="n">ipv4_mask_uuid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="s">&quot;Ipv4Mask&quot;</span><span class="p">,</span> <span class="s">&quot;/</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="n">prefix</span><span class="p">))</span>
+            <span class="n">inaddr_uuid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="s">&quot;Ipv4InterfaceAddress&quot;</span><span class="p">,</span> 
+                    <span class="n">ipv4_addr_uuid</span><span class="p">,</span> <span class="n">ipv4_mask_uuid</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">ipv4</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;AddAddress&quot;</span><span class="p">,</span> <span class="n">ifindex_uuid</span><span class="p">,</span> 
+                    <span class="n">inaddr_uuid</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">ipv4</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;SetMetric&quot;</span><span class="p">,</span> <span class="n">ifindex_uuid</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">ipv4</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;SetUp&quot;</span><span class="p">,</span> <span class="n">ifindex_uuid</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="c"># IPv6</span>
+            <span class="c"># TODO!</span>
+            <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">_configure_traces</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">trace_enabled</span><span class="p">(</span><span class="s">&quot;pcap&quot;</span><span class="p">):</span>
+            <span class="n">helper_uuid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">device_helper_uuid</span>
+
+            <span class="n">filename</span> <span class="o">=</span> <span class="s">&quot;trace-pcap-netdev-</span><span class="si">%d</span><span class="s">.pcap&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_trace_filename</span><span class="p">[</span><span class="s">&quot;pcap&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">filename</span>
+
+            <span class="n">filepath</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">trace_filepath</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">helper_uuid</span><span class="p">,</span> <span class="s">&quot;EnablePcap&quot;</span><span class="p">,</span> <span class="n">filepath</span><span class="p">,</span> 
+                    <span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="n">promiscuous</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span> <span class="n">explicitFilename</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">trace_enabled</span><span class="p">(</span><span class="s">&quot;promiscPcap&quot;</span><span class="p">):</span>
+            <span class="n">helper_uuid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">device_helper_uuid</span>
+
+            <span class="n">filename</span> <span class="o">=</span> <span class="s">&quot;trace-promisc-pcap-netdev-</span><span class="si">%d</span><span class="s">.pcap&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_trace_filename</span><span class="p">[</span><span class="s">&quot;promiscPcap&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">filename</span>
+
+            <span class="n">filepath</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">trace_filepath</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">helper_uuid</span><span class="p">,</span> <span class="s">&quot;EnablePcap&quot;</span><span class="p">,</span> <span class="n">filepath</span><span class="p">,</span> 
+                    <span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="n">promiscuous</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span> <span class="n">explicitFilename</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">trace_enabled</span><span class="p">(</span><span class="s">&quot;ascii&quot;</span><span class="p">):</span>
+            <span class="n">helper_uuid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">device_helper_uuid</span>
+            <span class="n">ascii_helper_uuid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ascii_helper_uuid</span>
+
+            <span class="n">filename</span> <span class="o">=</span> <span class="s">&quot;trace-ascii-netdev-</span><span class="si">%d</span><span class="s">.tr&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_trace_filename</span><span class="p">[</span><span class="s">&quot;ascii&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">filename</span>
+
+            <span class="n">filepath</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">trace_filepath</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span>
+            <span class="n">stream_uuid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">ascii_helper_uuid</span><span class="p">,</span> 
+                    <span class="s">&quot;CreateFileStream&quot;</span><span class="p">,</span> <span class="n">filepath</span><span class="p">)</span> 
+            <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">helper_uuid</span><span class="p">,</span> <span class="s">&quot;EnableAscii&quot;</span><span class="p">,</span> <span class="n">stream_uuid</span><span class="p">,</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_connect_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span>
+        <span class="k">if</span> <span class="n">node</span> <span class="ow">and</span> <span class="n">node</span><span class="o">.</span><span class="n">uuid</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">connected</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;AddDevice&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_connected</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+
+        <span class="n">channel</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">channel</span>
+        <span class="k">if</span> <span class="n">channel</span> <span class="ow">and</span> <span class="n">channel</span><span class="o">.</span><span class="n">uuid</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">connected</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;Attach&quot;</span><span class="p">,</span> <span class="n">channel</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_connected</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">channel</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+        
+        <span class="c"># Verify that the device has a queue. If no queue is added a segfault </span>
+        <span class="c"># error occurs</span>
+        <span class="n">queue</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">queue</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3node.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3node.html
new file mode 100644 (file)
index 0000000..af6fefa
--- /dev/null
@@ -0,0 +1,285 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.ns3node &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.ns3node</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3base</span> <span class="kn">import</span> <span class="n">NS3Base</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3BaseNode"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3node.NS3BaseNode">[docs]</a><span class="k">class</span> <span class="nc">NS3BaseNode</span><span class="p">(</span><span class="n">NS3Base</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;abstract::ns3::Node&quot;</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3BaseNode</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_simulation</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_node_id</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_ipv4</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_arp</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_mobility</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_devices</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_dceapplications</span> <span class="o">=</span> <span class="bp">None</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">enablestack</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;enableStack&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;Install network stack in Node, including: ARP, &quot;</span>
+                <span class="s">&quot;IP4, ICMP, UDP and TCP &quot;</span><span class="p">,</span>
+                <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+                <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">enablestack</span><span class="p">)</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BaseNode.simulation"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3node.NS3BaseNode.simulation">[docs]</a>    <span class="k">def</span> <span class="nf">simulation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_simulation</span><span class="p">:</span>
+            <span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3simulation</span> <span class="kn">import</span> <span class="n">NS3Simulation</span>
+            <span class="k">for</span> <span class="n">guid</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">connections</span><span class="p">:</span>
+                <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+                <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">rm</span><span class="p">,</span> <span class="n">NS3Simulation</span><span class="p">):</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">_simulation</span> <span class="o">=</span> <span class="n">rm</span>
+            
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_simulation</span><span class="p">:</span>
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Node not connected to simulation&quot;</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_simulation</span>
+         </div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BaseNode.ipv4"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3node.NS3BaseNode.ipv4">[docs]</a>    <span class="k">def</span> <span class="nf">ipv4</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ipv4</span><span class="p">:</span>
+            <span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3ipv4l3protocol</span> <span class="kn">import</span> <span class="n">NS3BaseIpv4L3Protocol</span>
+            <span class="n">ipv4s</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">NS3BaseIpv4L3Protocol</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+            <span class="k">if</span> <span class="n">ipv4s</span><span class="p">:</span> 
+                <span class="bp">self</span><span class="o">.</span><span class="n">_ipv4</span> <span class="o">=</span> <span class="n">ipv4s</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+        
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ipv4</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BaseNode.arp"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3node.NS3BaseNode.arp">[docs]</a>    <span class="k">def</span> <span class="nf">arp</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_arp</span><span class="p">:</span>
+            <span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3arpl3protocol</span> <span class="kn">import</span> <span class="n">NS3BaseArpL3Protocol</span>
+            <span class="n">arps</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">NS3BaseArpL3Protocol</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+            <span class="k">if</span> <span class="n">arps</span><span class="p">:</span> 
+                <span class="bp">self</span><span class="o">.</span><span class="n">_arp</span> <span class="o">=</span> <span class="n">arps</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_arp</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BaseNode.mobility"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3node.NS3BaseNode.mobility">[docs]</a>    <span class="k">def</span> <span class="nf">mobility</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_mobility</span><span class="p">:</span>
+            <span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3mobilitymodel</span> <span class="kn">import</span> <span class="n">NS3BaseMobilityModel</span>
+            <span class="n">mobility</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">NS3BaseMobilityModel</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+            <span class="k">if</span> <span class="n">mobility</span><span class="p">:</span> 
+                <span class="bp">self</span><span class="o">.</span><span class="n">_mobility</span> <span class="o">=</span> <span class="n">mobility</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_mobility</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BaseNode.devices"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3node.NS3BaseNode.devices">[docs]</a>    <span class="k">def</span> <span class="nf">devices</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_devices</span><span class="p">:</span>
+            <span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3netdevice</span> <span class="kn">import</span> <span class="n">NS3BaseNetDevice</span>
+            <span class="n">devices</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">NS3BaseNetDevice</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+
+            <span class="k">if</span> <span class="ow">not</span> <span class="n">devices</span><span class="p">:</span> 
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Node not connected to devices&quot;</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">_devices</span> <span class="o">=</span> <span class="n">devices</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_devices</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BaseNode.node_id"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3node.NS3BaseNode.node_id">[docs]</a>    <span class="k">def</span> <span class="nf">node_id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_node_id</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BaseNode.dceapplications"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3node.NS3BaseNode.dceapplications">[docs]</a>    <span class="k">def</span> <span class="nf">dceapplications</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_dceapplications</span><span class="p">:</span>
+            <span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3dceapplication</span> <span class="kn">import</span> <span class="n">NS3BaseDceApplication</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_dceapplications</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">NS3BaseDceApplication</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_dceapplications</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_rms_to_wait</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">rms</span> <span class="o">=</span> <span class="nb">set</span><span class="p">([</span><span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="p">])</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ipv4</span><span class="p">:</span>
+            <span class="n">rms</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ipv4</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">arp</span><span class="p">:</span>
+            <span class="n">rms</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">arp</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">mobility</span><span class="p">:</span>
+            <span class="n">rms</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mobility</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">rms</span>
+
+    <span class="k">def</span> <span class="nf">_configure_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;enableStack&quot;</span><span class="p">):</span>
+            <span class="n">uuid_stack_helper</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="s">&quot;InternetStackHelper&quot;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">uuid_stack_helper</span><span class="p">,</span> <span class="s">&quot;Install&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+
+            <span class="c"># Retrieve IPV4 object</span>
+            <span class="n">ipv4_uuid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;retrieveObject&quot;</span><span class="p">,</span>
+                    <span class="s">&quot;ns3::Ipv4L3Protocol&quot;</span><span class="p">)</span>
+            
+            <span class="c"># Add IPv4 RM to the node</span>
+            <span class="n">ipv4</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">register_resource</span><span class="p">(</span><span class="s">&quot;ns3::Ipv4L3Protocol&quot;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">register_connection</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">,</span> <span class="n">ipv4</span><span class="p">)</span>
+            <span class="n">ipv4rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">ipv4</span><span class="p">)</span>
+            <span class="n">ipv4rm</span><span class="o">.</span><span class="n">_uuid</span> <span class="o">=</span> <span class="n">ipv4_uuid</span>
+            <span class="n">ipv4rm</span><span class="o">.</span><span class="n">set_started</span><span class="p">()</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="c">### node.AggregateObject(PacketSocketFactory())</span>
+            <span class="n">uuid_packet_socket_factory</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="s">&quot;PacketSocketFactory&quot;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;AggregateObject&quot;</span><span class="p">,</span> <span class="n">uuid_packet_socket_factory</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">_node_id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;GetId&quot;</span><span class="p">)</span>
+        
+        <span class="n">dceapplications</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dceapplications</span>
+        <span class="k">if</span> <span class="n">dceapplications</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_add_dce</span><span class="p">(</span><span class="n">dceapplications</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_connect_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;enableStack&quot;</span><span class="p">):</span>
+            <span class="n">ipv4</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ipv4</span>
+            <span class="k">if</span> <span class="n">ipv4</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;AggregateObject&quot;</span><span class="p">,</span> <span class="n">ipv4</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_connected</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">ipv4</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+                <span class="n">ipv4</span><span class="o">.</span><span class="n">_connected</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+
+            <span class="n">arp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">arp</span>
+            <span class="k">if</span> <span class="n">arp</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;AggregateObject&quot;</span><span class="p">,</span> <span class="n">arp</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_connected</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">arp</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+                <span class="n">arp</span><span class="o">.</span><span class="n">_connected</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+
+        <span class="n">mobility</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">mobility</span>
+        <span class="k">if</span> <span class="n">mobility</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;AggregateObject&quot;</span><span class="p">,</span> <span class="n">mobility</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_connected</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">mobility</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+            <span class="n">mobility</span><span class="o">.</span><span class="n">_connected</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_add_dce</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dceapplications</span><span class="p">):</span>
+        <span class="n">dceapp</span> <span class="o">=</span> <span class="n">dceapplications</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+
+        <span class="n">container_uuid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="s">&quot;NodeContainer&quot;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">container_uuid</span><span class="p">,</span> <span class="s">&quot;Add&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+        
+        <span class="n">dce_helper</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">dce_helper</span>
+
+        <span class="k">with</span> <span class="n">dce_helper</span><span class="o">.</span><span class="n">dce_manager_lock</span><span class="p">:</span>
+            <span class="n">dce_manager_uuid</span> <span class="o">=</span> <span class="n">dce_helper</span><span class="o">.</span><span class="n">dce_manager_uuid</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">dce_manager_uuid</span><span class="p">,</span> <span class="s">&quot;Install&quot;</span><span class="p">,</span> <span class="n">container_uuid</span><span class="p">)</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3pipechanel.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3pipechanel.html
new file mode 100644 (file)
index 0000000..6ebc43d
--- /dev/null
@@ -0,0 +1,171 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.ns3pipechanel &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.ns3pipechanel</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3base</span> <span class="kn">import</span> <span class="n">NS3Base</span>
+
+<span class="kn">import</span> <span class="nn">socket</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3BasePipeChannel"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3pipechanel.NS3BasePipeChannel">[docs]</a><span class="k">class</span> <span class="nc">NS3BasePipeChannel</span><span class="p">(</span><span class="n">NS3Base</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot; Interconnects two FdNetDevices with a PIPE</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::PipeChannel&quot;</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3BasePipeChannel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_devices</span> <span class="o">=</span> <span class="bp">None</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BasePipeChannel.devices"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3pipechanel.NS3BasePipeChannel.devices">[docs]</a>    <span class="k">def</span> <span class="nf">devices</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_devices</span><span class="p">:</span>
+            <span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3fdnetdevice</span> <span class="kn">import</span> <span class="n">NS3BaseFdNetDevice</span>
+            <span class="n">devices</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">NS3BaseFdNetDevice</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="n">devices</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">devices</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">2</span><span class="p">:</span> 
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;PipeChannel must be connected to exactly to two FdNetDevices&quot;</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">_devices</span> <span class="o">=</span> <span class="n">devices</span>
+        
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_devices</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BasePipeChannel.node"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3pipechanel.NS3BasePipeChannel.node">[docs]</a>    <span class="k">def</span> <span class="nf">node</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">devices</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">node</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_rms_to_wait</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">rms</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">devices</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">rms</span>
+
+    <span class="k">def</span> <span class="nf">_instantiate_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; The pipe channel does not really exists as an ns-3 object.</span>
+<span class="sd">        Do nothing.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">_connect_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">dev1</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">devices</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+        <span class="n">dev2</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">devices</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
+
+        <span class="k">if</span> <span class="n">dev1</span><span class="o">.</span><span class="n">uuid</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">connected</span> <span class="ow">and</span> <span class="n">dev2</span><span class="o">.</span><span class="n">uuid</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">connected</span><span class="p">:</span>
+            <span class="p">(</span><span class="n">s0</span><span class="p">,</span> <span class="n">s1</span><span class="p">)</span> <span class="o">=</span> <span class="n">socket</span><span class="o">.</span><span class="n">socketpair</span><span class="p">(</span><span class="n">socket</span><span class="o">.</span><span class="n">AF_UNIX</span><span class="p">,</span> <span class="n">socket</span><span class="o">.</span><span class="n">SOCK_STREAM</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+            
+            <span class="n">dev1</span><span class="o">.</span><span class="n">send_fd</span><span class="p">(</span><span class="n">s0</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">_connected</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">dev1</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+            <span class="n">dev1</span><span class="o">.</span><span class="n">_connected</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+
+            <span class="n">dev2</span><span class="o">.</span><span class="n">send_fd</span><span class="p">(</span><span class="n">s1</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">_connected</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">dev2</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+            <span class="n">dev2</span><span class="o">.</span><span class="n">_connected</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3propagationdelaymodel.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3propagationdelaymodel.html
new file mode 100644 (file)
index 0000000..885465e
--- /dev/null
@@ -0,0 +1,144 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.ns3propagationdelaymodel &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.ns3propagationdelaymodel</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3base</span> <span class="kn">import</span> <span class="n">NS3Base</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3BasePropagationDelayModel"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3propagationdelaymodel.NS3BasePropagationDelayModel">[docs]</a><span class="k">class</span> <span class="nc">NS3BasePropagationDelayModel</span><span class="p">(</span><span class="n">NS3Base</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;abstract::ns3::PropagationDelayModel&quot;</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BasePropagationDelayModel.simulation"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3propagationdelaymodel.NS3BasePropagationDelayModel.simulation">[docs]</a>    <span class="k">def</span> <span class="nf">simulation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">channel</span><span class="o">.</span><span class="n">simulation</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BasePropagationDelayModel.channel"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3propagationdelaymodel.NS3BasePropagationDelayModel.channel">[docs]</a>    <span class="k">def</span> <span class="nf">channel</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3wifichannel</span> <span class="kn">import</span> <span class="n">NS3BaseWifiChannel</span>
+        <span class="n">channels</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">NS3BaseWifiChannel</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">channels</span><span class="p">:</span> 
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;PropagationDelayModel not connected to channel&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">return</span> <span class="n">channels</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_rms_to_wait</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">others</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+        <span class="n">others</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">channel</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">others</span>
+
+    <span class="k">def</span> <span class="nf">_connect_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">channel</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">channel</span>
+        <span class="k">if</span> <span class="n">channel</span><span class="o">.</span><span class="n">uuid</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">connected</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">channel</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;SetPropagationDelayModel&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_connected</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">channel</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3propagationlossmodel.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3propagationlossmodel.html
new file mode 100644 (file)
index 0000000..8ded835
--- /dev/null
@@ -0,0 +1,144 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.ns3propagationlossmodel &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.ns3propagationlossmodel</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3base</span> <span class="kn">import</span> <span class="n">NS3Base</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3BasePropagationLossModel"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel">[docs]</a><span class="k">class</span> <span class="nc">NS3BasePropagationLossModel</span><span class="p">(</span><span class="n">NS3Base</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::PropagationLossModel&quot;</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BasePropagationLossModel.simulation"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel.simulation">[docs]</a>    <span class="k">def</span> <span class="nf">simulation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">channel</span><span class="o">.</span><span class="n">simulation</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BasePropagationLossModel.channel"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel.channel">[docs]</a>    <span class="k">def</span> <span class="nf">channel</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3wifichannel</span> <span class="kn">import</span> <span class="n">NS3BaseWifiChannel</span>
+        <span class="n">channels</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">NS3BaseWifiChannel</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">channels</span><span class="p">:</span> 
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;PropagationLossModel not connected to channel&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">return</span> <span class="n">channels</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_rms_to_wait</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">others</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+        <span class="n">others</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">channel</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">others</span>
+
+    <span class="k">def</span> <span class="nf">_connect_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">channel</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">channel</span>
+        <span class="k">if</span> <span class="n">channel</span><span class="o">.</span><span class="n">uuid</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">connected</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">channel</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;SetPropagationLossModel&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_connected</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">channel</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3queue.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3queue.html
new file mode 100644 (file)
index 0000000..b61b117
--- /dev/null
@@ -0,0 +1,145 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.ns3queue &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.ns3queue</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3base</span> <span class="kn">import</span> <span class="n">NS3Base</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3BaseQueue"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3queue.NS3BaseQueue">[docs]</a><span class="k">class</span> <span class="nc">NS3BaseQueue</span><span class="p">(</span><span class="n">NS3Base</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;abstract::ns3::Queue&quot;</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BaseQueue.device"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3queue.NS3BaseQueue.device">[docs]</a>    <span class="k">def</span> <span class="nf">device</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3netdevice</span> <span class="kn">import</span> <span class="n">NS3BaseNetDevice</span>
+        <span class="n">devices</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">NS3BaseNetDevice</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">devices</span><span class="p">:</span> 
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Queue not connected to device&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">return</span> <span class="n">devices</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BaseQueue.node"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3queue.NS3BaseQueue.node">[docs]</a>    <span class="k">def</span> <span class="nf">node</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">device</span><span class="o">.</span><span class="n">node</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_rms_to_wait</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">rms</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+        <span class="n">rms</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">device</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">rms</span>
+
+    <span class="k">def</span> <span class="nf">_connect_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">device</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">device</span>
+        <span class="k">if</span> <span class="n">device</span><span class="o">.</span><span class="n">uuid</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">connected</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">device</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;SetQueue&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_connected</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">device</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+            <span class="n">device</span><span class="o">.</span><span class="n">_connected</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3route.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3route.html
new file mode 100644 (file)
index 0000000..0364fb1
--- /dev/null
@@ -0,0 +1,183 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.ns3route &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.ns3route</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3base</span> <span class="kn">import</span> <span class="n">NS3Base</span>
+
+<span class="kn">import</span> <span class="nn">ipaddr</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3Route"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3route.NS3Route">[docs]</a><span class="k">class</span> <span class="nc">NS3Route</span><span class="p">(</span><span class="n">NS3Base</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;ns3::Route&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">network</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;network&quot;</span><span class="p">,</span> <span class="s">&quot;Destination network address&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">prefix</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;prefix&quot;</span><span class="p">,</span> <span class="s">&quot;Network prefix for the network&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">nexthop</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;nexthop&quot;</span><span class="p">,</span> <span class="s">&quot;Address of next hop in the route&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">network</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">prefix</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">nexthop</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3Route</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3Route.node"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3route.NS3Route.node">[docs]</a>    <span class="k">def</span> <span class="nf">node</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3node</span> <span class="kn">import</span> <span class="n">NS3BaseNode</span>
+        <span class="n">nodes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">NS3BaseNode</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">nodes</span><span class="p">:</span> 
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Device not connected to node&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">return</span> <span class="n">nodes</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_rms_to_wait</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="c"># Wait for all network devices connected to the node to be ready</span>
+        <span class="c"># before configuring the routes, else the route might refer to a</span>
+        <span class="c"># non yet existing interface</span>
+
+        <span class="n">rms</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+        <span class="n">rms</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">devices</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">rms</span>
+
+    <span class="k">def</span> <span class="nf">_instantiate_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">_configure_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">network</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;network&quot;</span><span class="p">)</span>
+        <span class="n">prefix</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;prefix&quot;</span><span class="p">)</span>
+        <span class="n">nexthop</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;nexthop&quot;</span><span class="p">)</span>
+        <span class="n">ipv4_uuid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">ipv4</span><span class="o">.</span><span class="n">uuid</span>
+
+        <span class="n">ret</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">ipv4_uuid</span><span class="p">,</span> <span class="s">&quot;addStaticRoute&quot;</span><span class="p">,</span> <span class="n">network</span><span class="p">,</span> 
+            <span class="n">prefix</span><span class="p">,</span> <span class="n">nexthop</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">ret</span><span class="p">:</span> 
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Could not configure route </span><span class="si">%s</span><span class="s">/</span><span class="si">%s</span><span class="s"> hop: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">network</span><span class="p">,</span> <span class="n">prefix</span><span class="p">,</span> 
+                    <span class="n">nexthop</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+    <span class="k">def</span> <span class="nf">_connect_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span>
+        <span class="k">if</span> <span class="n">node</span> <span class="ow">and</span> <span class="n">node</span><span class="o">.</span><span class="n">uuid</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">connected</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_connected</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3server.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3server.html
new file mode 100644 (file)
index 0000000..bd8e159
--- /dev/null
@@ -0,0 +1,349 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.ns3server &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.ns3server</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">import</span> <span class="nn">base64</span>
+<span class="kn">import</span> <span class="nn">cPickle</span>
+<span class="kn">import</span> <span class="nn">errno</span>
+<span class="kn">import</span> <span class="nn">logging</span>
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">socket</span>
+<span class="kn">import</span> <span class="nn">sys</span>
+
+<span class="kn">from</span> <span class="nn">optparse</span> <span class="kn">import</span> <span class="n">OptionParser</span><span class="p">,</span> <span class="n">SUPPRESS_HELP</span>
+
+<span class="kn">from</span> <span class="nn">ns3wrapper</span> <span class="kn">import</span> <span class="n">NS3Wrapper</span>
+
+<div class="viewcode-block" id="NS3WrapperMessage"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3server.NS3WrapperMessage">[docs]</a><span class="k">class</span> <span class="nc">NS3WrapperMessage</span><span class="p">:</span>
+    <span class="n">CREATE</span> <span class="o">=</span> <span class="s">&quot;CREATE&quot;</span>
+    <span class="n">FACTORY</span> <span class="o">=</span> <span class="s">&quot;FACTORY&quot;</span>
+    <span class="n">INVOKE</span> <span class="o">=</span> <span class="s">&quot;INVOKE&quot;</span>
+    <span class="n">SET</span> <span class="o">=</span> <span class="s">&quot;SET&quot;</span>
+    <span class="n">GET</span> <span class="o">=</span> <span class="s">&quot;GET&quot;</span>
+    <span class="n">FLUSH</span> <span class="o">=</span> <span class="s">&quot;FLUSH&quot;</span>
+    <span class="n">START</span> <span class="o">=</span> <span class="s">&quot;START&quot;</span>
+    <span class="n">STOP</span> <span class="o">=</span> <span class="s">&quot;STOP&quot;</span>
+    <span class="n">SHUTDOWN</span> <span class="o">=</span> <span class="s">&quot;SHUTDOWN&quot;</span>
+</div>
+<div class="viewcode-block" id="handle_message"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3server.handle_message">[docs]</a><span class="k">def</span> <span class="nf">handle_message</span><span class="p">(</span><span class="n">ns3_wrapper</span><span class="p">,</span> <span class="n">msg_type</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">):</span>
+    <span class="k">if</span> <span class="n">msg_type</span> <span class="o">==</span> <span class="n">NS3WrapperMessage</span><span class="o">.</span><span class="n">SHUTDOWN</span><span class="p">:</span>
+        <span class="n">ns3_wrapper</span><span class="o">.</span><span class="n">shutdown</span><span class="p">()</span>
+
+        <span class="k">return</span> <span class="s">&quot;BYEBYE&quot;</span>
+    
+    <span class="k">if</span> <span class="n">msg_type</span> <span class="o">==</span> <span class="n">NS3WrapperMessage</span><span class="o">.</span><span class="n">STOP</span><span class="p">:</span>
+        <span class="n">time</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;time&quot;</span><span class="p">)</span>
+
+        <span class="n">ns3_wrapper</span><span class="o">.</span><span class="n">stop</span><span class="p">(</span><span class="n">time</span><span class="o">=</span><span class="n">time</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="s">&quot;STOPPED&quot;</span>
+
+    <span class="k">if</span> <span class="n">msg_type</span> <span class="o">==</span> <span class="n">NS3WrapperMessage</span><span class="o">.</span><span class="n">START</span><span class="p">:</span>
+        <span class="n">ns3_wrapper</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
+
+        <span class="k">return</span> <span class="s">&quot;STARTED&quot;</span>
+
+    <span class="k">if</span> <span class="n">msg_type</span> <span class="o">==</span> <span class="n">NS3WrapperMessage</span><span class="o">.</span><span class="n">CREATE</span><span class="p">:</span>
+        <span class="n">clazzname</span> <span class="o">=</span> <span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+        
+        <span class="k">return</span> <span class="n">ns3_wrapper</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">clazzname</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
+        
+    <span class="k">if</span> <span class="n">msg_type</span> <span class="o">==</span> <span class="n">NS3WrapperMessage</span><span class="o">.</span><span class="n">FACTORY</span><span class="p">:</span>
+        <span class="n">type_name</span> <span class="o">=</span> <span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">ns3_wrapper</span><span class="o">.</span><span class="n">factory</span><span class="p">(</span><span class="n">type_name</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+       
+    <span class="k">if</span> <span class="n">msg_type</span> <span class="o">==</span> <span class="n">NS3WrapperMessage</span><span class="o">.</span><span class="n">INVOKE</span><span class="p">:</span>
+        <span class="n">uuid</span> <span class="o">=</span> <span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+        <span class="n">operation</span> <span class="o">=</span> <span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+   
+        <span class="k">return</span> <span class="n">ns3_wrapper</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">uuid</span><span class="p">,</span> <span class="n">operation</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+
+    <span class="k">if</span> <span class="n">msg_type</span> <span class="o">==</span> <span class="n">NS3WrapperMessage</span><span class="o">.</span><span class="n">GET</span><span class="p">:</span>
+        <span class="n">uuid</span> <span class="o">=</span> <span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+        <span class="n">name</span> <span class="o">=</span> <span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">ns3_wrapper</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">uuid</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
+        
+    <span class="k">if</span> <span class="n">msg_type</span> <span class="o">==</span> <span class="n">NS3WrapperMessage</span><span class="o">.</span><span class="n">SET</span><span class="p">:</span>
+        <span class="n">uuid</span> <span class="o">=</span> <span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+        <span class="n">name</span> <span class="o">=</span> <span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+        <span class="n">value</span> <span class="o">=</span> <span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">ns3_wrapper</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">uuid</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
+
+    <span class="k">if</span> <span class="n">msg_type</span> <span class="o">==</span> <span class="n">NS3WrapperMessage</span><span class="o">.</span><span class="n">FLUSH</span><span class="p">:</span>
+        <span class="c"># Forces flushing output and error streams.</span>
+        <span class="c"># NS-3 output will stay unflushed until the program exits or </span>
+        <span class="c"># explicit invocation flush is done</span>
+        <span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">flush</span><span class="p">()</span>
+        <span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">flush</span><span class="p">()</span>
+
+        <span class="n">ns3_wrapper</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;FLUSHED&quot;</span><span class="p">)</span> 
+        
+        <span class="k">return</span> <span class="s">&quot;FLUSHED&quot;</span>
+</div>
+<div class="viewcode-block" id="open_socket"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3server.open_socket">[docs]</a><span class="k">def</span> <span class="nf">open_socket</span><span class="p">(</span><span class="n">socket_name</span><span class="p">):</span>
+    <span class="n">sock</span> <span class="o">=</span> <span class="n">socket</span><span class="o">.</span><span class="n">socket</span><span class="p">(</span><span class="n">socket</span><span class="o">.</span><span class="n">AF_UNIX</span><span class="p">,</span> <span class="n">socket</span><span class="o">.</span><span class="n">SOCK_STREAM</span><span class="p">)</span>
+    <span class="n">sock</span><span class="o">.</span><span class="n">bind</span><span class="p">(</span><span class="n">socket_name</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">sock</span>
+</div>
+<div class="viewcode-block" id="close_socket"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3server.close_socket">[docs]</a><span class="k">def</span> <span class="nf">close_socket</span><span class="p">(</span><span class="n">sock</span><span class="p">):</span>
+    <span class="k">try</span><span class="p">:</span>
+        <span class="n">sock</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+    <span class="k">except</span><span class="p">:</span>
+        <span class="k">pass</span>
+</div>
+<div class="viewcode-block" id="recv_msg"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3server.recv_msg">[docs]</a><span class="k">def</span> <span class="nf">recv_msg</span><span class="p">(</span><span class="n">conn</span><span class="p">):</span>
+    <span class="n">msg</span> <span class="o">=</span> <span class="p">[]</span>
+    <span class="n">chunk</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
+
+    <span class="k">while</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">chunk</span><span class="p">:</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">chunk</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">recv</span><span class="p">(</span><span class="mi">1024</span><span class="p">)</span>
+        <span class="k">except</span> <span class="p">(</span><span class="ne">OSError</span><span class="p">,</span> <span class="n">socket</span><span class="o">.</span><span class="n">error</span><span class="p">),</span> <span class="n">e</span><span class="p">:</span>
+            <span class="k">if</span> <span class="n">e</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="n">errno</span><span class="o">.</span><span class="n">EINTR</span><span class="p">:</span>
+                <span class="k">raise</span>
+            <span class="c"># Ignore eintr errors</span>
+            <span class="k">continue</span>
+
+        <span class="k">if</span> <span class="n">chunk</span><span class="p">:</span>
+            <span class="n">msg</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">chunk</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="c"># empty chunk = EOF</span>
+            <span class="k">break</span>
+    <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
+
+    <span class="c"># The message is formatted as follows:</span>
+    <span class="c">#   MESSAGE_TYPE|args|kwargs</span>
+    <span class="c">#</span>
+    <span class="c">#   where MESSAGE_TYPE, args and kwargs are pickld and enoded in base64</span>
+
+    <span class="k">def</span> <span class="nf">decode</span><span class="p">(</span><span class="n">item</span><span class="p">):</span>
+        <span class="n">item</span> <span class="o">=</span> <span class="n">base64</span><span class="o">.</span><span class="n">b64decode</span><span class="p">(</span><span class="n">item</span><span class="p">)</span><span class="o">.</span><span class="n">rstrip</span><span class="p">()</span>
+        <span class="k">return</span> <span class="n">cPickle</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">item</span><span class="p">)</span>
+
+    <span class="n">decoded</span> <span class="o">=</span> <span class="nb">map</span><span class="p">(</span><span class="n">decode</span><span class="p">,</span> <span class="n">msg</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;|&quot;</span><span class="p">))</span>
+
+    <span class="c"># decoded message</span>
+    <span class="n">dmsg_type</span> <span class="o">=</span> <span class="n">decoded</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+    <span class="n">dargs</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">decoded</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">))</span> <span class="c"># transforming touple into list</span>
+    <span class="n">dkwargs</span> <span class="o">=</span> <span class="n">decoded</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+
+    <span class="k">return</span> <span class="p">(</span><span class="n">dmsg_type</span><span class="p">,</span> <span class="n">dargs</span><span class="p">,</span> <span class="n">dkwargs</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="send_reply"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3server.send_reply">[docs]</a><span class="k">def</span> <span class="nf">send_reply</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="n">reply</span><span class="p">):</span>
+    <span class="n">encoded</span> <span class="o">=</span> <span class="n">base64</span><span class="o">.</span><span class="n">b64encode</span><span class="p">(</span><span class="n">cPickle</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">reply</span><span class="p">))</span>
+    <span class="n">conn</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="s">&quot;</span><span class="si">%s</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">encoded</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="get_options"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3server.get_options">[docs]</a><span class="k">def</span> <span class="nf">get_options</span><span class="p">():</span>
+    <span class="n">usage</span> <span class="o">=</span> <span class="p">(</span><span class="s">&quot;usage: %prog -S &lt;socket-name&gt; -L &lt;ns-log&gt;  -D &lt;enable-dump&gt; -v &quot;</span><span class="p">)</span>
+    
+    <span class="n">parser</span> <span class="o">=</span> <span class="n">OptionParser</span><span class="p">(</span><span class="n">usage</span> <span class="o">=</span> <span class="n">usage</span><span class="p">)</span>
+
+    <span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s">&quot;-S&quot;</span><span class="p">,</span> <span class="s">&quot;--socket-name&quot;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s">&quot;socket_name&quot;</span><span class="p">,</span>
+        <span class="n">help</span> <span class="o">=</span> <span class="s">&quot;Name for the unix socket used to interact with this process&quot;</span><span class="p">,</span> 
+        <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;tap.sock&quot;</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s">&quot;str&quot;</span><span class="p">)</span>
+
+    <span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s">&quot;-L&quot;</span><span class="p">,</span> <span class="s">&quot;--ns-log&quot;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s">&quot;ns_log&quot;</span><span class="p">,</span>
+        <span class="n">help</span> <span class="o">=</span> <span class="s">&quot;NS_LOG environmental variable to be set&quot;</span><span class="p">,</span> 
+        <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;&quot;</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s">&quot;str&quot;</span><span class="p">)</span>
+
+    <span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s">&quot;-D&quot;</span><span class="p">,</span> <span class="s">&quot;--enable-dump&quot;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s">&quot;enable_dump&quot;</span><span class="p">,</span>
+        <span class="n">help</span> <span class="o">=</span> <span class="s">&quot;Enable dumping the remote executed ns-3 commands to a script &quot;</span>
+            <span class="s">&quot;in order to later reproduce and debug the experiment&quot;</span><span class="p">,</span>
+        <span class="n">action</span> <span class="o">=</span> <span class="s">&quot;store_true&quot;</span><span class="p">,</span>
+        <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">)</span>
+
+    <span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s">&quot;-v&quot;</span><span class="p">,</span> <span class="s">&quot;--verbose&quot;</span><span class="p">,</span>
+        <span class="n">help</span><span class="o">=</span><span class="s">&quot;Print debug output&quot;</span><span class="p">,</span>
+        <span class="n">action</span><span class="o">=</span><span class="s">&quot;store_true&quot;</span><span class="p">,</span> 
+        <span class="n">dest</span><span class="o">=</span><span class="s">&quot;verbose&quot;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
+
+    <span class="p">(</span><span class="n">options</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span>
+    
+    <span class="k">return</span> <span class="p">(</span><span class="n">options</span><span class="o">.</span><span class="n">socket_name</span><span class="p">,</span> <span class="n">options</span><span class="o">.</span><span class="n">verbose</span><span class="p">,</span> <span class="n">options</span><span class="o">.</span><span class="n">ns_log</span><span class="p">,</span>
+            <span class="n">options</span><span class="o">.</span><span class="n">enable_dump</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="run_server"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3server.run_server">[docs]</a><span class="k">def</span> <span class="nf">run_server</span><span class="p">(</span><span class="n">socket_name</span><span class="p">,</span> <span class="n">level</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">INFO</span><span class="p">,</span> <span class="n">ns_log</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> 
+        <span class="n">enable_dump</span> <span class="o">=</span> <span class="bp">False</span><span class="p">):</span>
+
+    <span class="c"># Sets NS_LOG environmental variable for NS debugging</span>
+    <span class="k">if</span> <span class="n">ns_log</span><span class="p">:</span>
+        <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="s">&quot;NS_LOG&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">ns_log</span>
+
+    <span class="c">###### ns-3 wrapper instantiation</span>
+
+    <span class="n">ns3_wrapper</span> <span class="o">=</span> <span class="n">NS3Wrapper</span><span class="p">(</span><span class="n">loglevel</span><span class="o">=</span><span class="n">level</span><span class="p">,</span> <span class="n">enable_dump</span> <span class="o">=</span> <span class="n">enable_dump</span><span class="p">)</span>
+    
+    <span class="n">ns3_wrapper</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;STARTING...&quot;</span><span class="p">)</span>
+
+    <span class="c"># create unix socket to receive instructions</span>
+    <span class="n">sock</span> <span class="o">=</span> <span class="n">open_socket</span><span class="p">(</span><span class="n">socket_name</span><span class="p">)</span>
+    <span class="n">sock</span><span class="o">.</span><span class="n">listen</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+
+    <span class="c"># wait for messages to arrive and process them</span>
+    <span class="n">stop</span> <span class="o">=</span> <span class="bp">False</span>
+
+    <span class="k">while</span> <span class="ow">not</span> <span class="n">stop</span><span class="p">:</span>
+        <span class="n">conn</span><span class="p">,</span> <span class="n">addr</span> <span class="o">=</span> <span class="n">sock</span><span class="o">.</span><span class="n">accept</span><span class="p">()</span>
+        <span class="n">conn</span><span class="o">.</span><span class="n">settimeout</span><span class="p">(</span><span class="mi">30</span><span class="p">)</span>
+
+        <span class="k">try</span><span class="p">:</span>
+            <span class="p">(</span><span class="n">msg_type</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">)</span> <span class="o">=</span> <span class="n">recv_msg</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
+        <span class="k">except</span> <span class="n">socket</span><span class="o">.</span><span class="n">timeout</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
+            <span class="c"># Ingore time-out</span>
+            <span class="n">close_socket</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
+            <span class="k">continue</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">msg_type</span><span class="p">:</span>
+            <span class="c"># Ignore - connection lost</span>
+            <span class="n">close_socket</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
+            <span class="k">continue</span>
+
+        <span class="k">if</span> <span class="n">msg_type</span> <span class="o">==</span> <span class="n">NS3WrapperMessage</span><span class="o">.</span><span class="n">SHUTDOWN</span><span class="p">:</span>
+           <span class="n">stop</span> <span class="o">=</span> <span class="bp">True</span>
+  
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">reply</span> <span class="o">=</span> <span class="n">handle_message</span><span class="p">(</span><span class="n">ns3_wrapper</span><span class="p">,</span> <span class="n">msg_type</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">)</span>  
+        <span class="k">except</span><span class="p">:</span>
+            <span class="kn">import</span> <span class="nn">traceback</span>
+            <span class="n">err</span> <span class="o">=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">()</span>
+            <span class="n">ns3_wrapper</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">err</span><span class="p">)</span> 
+            <span class="n">close_socket</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
+            <span class="k">raise</span>
+
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">send_reply</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="n">reply</span><span class="p">)</span>
+        <span class="k">except</span> <span class="n">socket</span><span class="o">.</span><span class="n">error</span><span class="p">:</span>
+            <span class="kn">import</span> <span class="nn">traceback</span>
+            <span class="n">err</span> <span class="o">=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">()</span>
+            <span class="n">ns3_wrapper</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">err</span><span class="p">)</span> 
+            <span class="n">close_socket</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
+            <span class="k">raise</span>
+        
+        <span class="n">close_socket</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
+
+    <span class="n">close_socket</span><span class="p">(</span><span class="n">sock</span><span class="p">)</span>
+
+    <span class="n">ns3_wrapper</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;EXITING...&quot;</span><span class="p">)</span>
+</div>
+<span class="k">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s">&#39;__main__&#39;</span><span class="p">:</span>
+            
+    <span class="p">(</span><span class="n">socket_name</span><span class="p">,</span> <span class="n">verbose</span><span class="p">,</span> <span class="n">ns_log</span><span class="p">,</span> <span class="n">enable_dump</span><span class="p">)</span> <span class="o">=</span> <span class="n">get_options</span><span class="p">()</span>
+
+    <span class="c">## configure logging</span>
+    <span class="n">FORMAT</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%(asctime)s</span><span class="s"> </span><span class="si">%(name)s</span><span class="s"> </span><span class="si">%(levelname)-4s</span><span class="s"> </span><span class="si">%(message)s</span><span class="s">&quot;</span>
+    <span class="n">level</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">DEBUG</span> <span class="k">if</span> <span class="n">verbose</span> <span class="k">else</span> <span class="n">logging</span><span class="o">.</span><span class="n">INFO</span>
+
+    <span class="n">logging</span><span class="o">.</span><span class="n">basicConfig</span><span class="p">(</span><span class="n">format</span> <span class="o">=</span> <span class="n">FORMAT</span><span class="p">,</span> <span class="n">level</span> <span class="o">=</span> <span class="n">level</span><span class="p">)</span>
+
+    <span class="c">## Run the server</span>
+    <span class="n">run_server</span><span class="p">(</span><span class="n">socket_name</span><span class="p">,</span> <span class="n">level</span><span class="p">,</span> <span class="n">ns_log</span><span class="p">,</span> <span class="n">enable_dump</span><span class="p">)</span>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3simulation.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3simulation.html
new file mode 100644 (file)
index 0000000..49eaeec
--- /dev/null
@@ -0,0 +1,141 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.ns3simulation &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.ns3simulation</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<div class="viewcode-block" id="NS3Simulation"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3simulation.NS3Simulation">[docs]</a><span class="k">class</span> <span class="nc">NS3Simulation</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3Simulation.client"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3simulation.NS3Simulation.client">[docs]</a>    <span class="k">def</span> <span class="nf">client</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span>
+</div>
+<div class="viewcode-block" id="NS3Simulation.create"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3simulation.NS3Simulation.create">[docs]</a>    <span class="k">def</span> <span class="nf">create</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NS3Simulation.factory"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3simulation.NS3Simulation.factory">[docs]</a>    <span class="k">def</span> <span class="nf">factory</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">factory</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NS3Simulation.invoke"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3simulation.NS3Simulation.invoke">[docs]</a>    <span class="k">def</span> <span class="nf">invoke</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NS3Simulation.ns3_set"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3simulation.NS3Simulation.ns3_set">[docs]</a>    <span class="k">def</span> <span class="nf">ns3_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NS3Simulation.ns3_get"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3simulation.NS3Simulation.ns3_get">[docs]</a>    <span class="k">def</span> <span class="nf">ns3_get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NS3Simulation.flush"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3simulation.NS3Simulation.flush">[docs]</a>    <span class="k">def</span> <span class="nf">flush</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">flush</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NS3Simulation.start"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3simulation.NS3Simulation.start">[docs]</a>    <span class="k">def</span> <span class="nf">start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">start</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NS3Simulation.stop"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3simulation.NS3Simulation.stop">[docs]</a>    <span class="k">def</span> <span class="nf">stop</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">stop</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NS3Simulation.shutdown"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3simulation.NS3Simulation.shutdown">[docs]</a>    <span class="k">def</span> <span class="nf">shutdown</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">shutdown</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3wifichannel.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3wifichannel.html
new file mode 100644 (file)
index 0000000..48b899f
--- /dev/null
@@ -0,0 +1,141 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.ns3wifichannel &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.ns3wifichannel</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3base</span> <span class="kn">import</span> <span class="n">NS3Base</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3BaseWifiChannel"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wifichannel.NS3BaseWifiChannel">[docs]</a><span class="k">class</span> <span class="nc">NS3BaseWifiChannel</span><span class="p">(</span><span class="n">NS3Base</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;abstract::ns3::WifiChannel&quot;</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BaseWifiChannel.simulation"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wifichannel.NS3BaseWifiChannel.simulation">[docs]</a>    <span class="k">def</span> <span class="nf">simulation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">phys</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">device</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">simulation</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BaseWifiChannel.phys"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wifichannel.NS3BaseWifiChannel.phys">[docs]</a>    <span class="k">def</span> <span class="nf">phys</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3wifiphy</span> <span class="kn">import</span> <span class="n">NS3BaseWifiPhy</span>
+        <span class="n">phys</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">NS3BaseWifiPhy</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">phys</span><span class="p">:</span> 
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Channel not connected to phy&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">return</span> <span class="n">phys</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_rms_to_wait</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">rms</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+        <span class="n">rms</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">rms</span>
+
+    <span class="k">def</span> <span class="nf">_connect_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">pass</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3wifimac.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3wifimac.html
new file mode 100644 (file)
index 0000000..3cc758e
--- /dev/null
@@ -0,0 +1,169 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.ns3wifimac &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.ns3wifimac</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3base</span> <span class="kn">import</span> <span class="n">NS3Base</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3wifinetdevice</span> <span class="kn">import</span> <span class="n">WIFI_STANDARDS</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3BaseWifiMac"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wifimac.NS3BaseWifiMac">[docs]</a><span class="k">class</span> <span class="nc">NS3BaseWifiMac</span><span class="p">(</span><span class="n">NS3Base</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;abstract::ns3::WifiMac&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">standard</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Standard&quot;</span><span class="p">,</span> <span class="s">&quot;Wireless standard&quot;</span><span class="p">,</span>
+                <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;WIFI_PHY_STANDARD_80211a&quot;</span><span class="p">,</span>
+                <span class="n">allowed</span> <span class="o">=</span> <span class="n">WIFI_STANDARDS</span><span class="o">.</span><span class="n">keys</span><span class="p">(),</span>
+                <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Enumerate</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">standard</span><span class="p">)</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BaseWifiMac.node"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wifimac.NS3BaseWifiMac.node">[docs]</a>    <span class="k">def</span> <span class="nf">node</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">device</span><span class="o">.</span><span class="n">node</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BaseWifiMac.device"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wifimac.NS3BaseWifiMac.device">[docs]</a>    <span class="k">def</span> <span class="nf">device</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3wifinetdevice</span> <span class="kn">import</span> <span class="n">NS3BaseWifiNetDevice</span>
+        <span class="n">devices</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">NS3BaseWifiNetDevice</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">devices</span><span class="p">:</span> 
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;WifiMac not connected to device&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">return</span> <span class="n">devices</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_rms_to_wait</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">rms</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+        <span class="n">rms</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">device</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">rms</span>
+
+    <span class="k">def</span> <span class="nf">_connect_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">device</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">device</span>
+        <span class="k">if</span> <span class="n">device</span><span class="o">.</span><span class="n">uuid</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">connected</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_connected</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">device</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">device</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;SetMac&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+
+            <span class="n">standard</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;Standard&quot;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;ConfigureStandard&quot;</span><span class="p">,</span> <span class="n">WIFI_STANDARDS</span><span class="p">[</span><span class="n">standard</span><span class="p">])</span>
+
+            <span class="c"># Delayed configuration of MAC address</span>
+            <span class="n">mac</span> <span class="o">=</span> <span class="n">device</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;mac&quot;</span><span class="p">)</span>
+            <span class="k">if</span> <span class="n">mac</span><span class="p">:</span>
+                <span class="n">mac_uuid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="s">&quot;Mac48Address&quot;</span><span class="p">,</span> <span class="n">mac</span><span class="p">)</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="n">mac_uuid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="s">&quot;singleton::Mac48Address&quot;</span><span class="p">,</span> <span class="s">&quot;Allocate&quot;</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;SetAddress&quot;</span><span class="p">,</span> <span class="n">mac_uuid</span><span class="p">)</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3wifinetdevice.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3wifinetdevice.html
new file mode 100644 (file)
index 0000000..9dc4d7c
--- /dev/null
@@ -0,0 +1,144 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.ns3wifinetdevice &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.ns3wifinetdevice</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3netdevice</span> <span class="kn">import</span> <span class="n">NS3BaseNetDevice</span>
+
+<span class="n">WIFI_STANDARDS</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">({</span>
+    <span class="s">&quot;WIFI_PHY_STANDARD_holland&quot;</span><span class="p">:</span> <span class="mi">5</span><span class="p">,</span>
+    <span class="s">&quot;WIFI_PHY_STANDARD_80211p_SCH&quot;</span><span class="p">:</span> <span class="mi">7</span><span class="p">,</span>
+    <span class="s">&quot;WIFI_PHY_STANDARD_80211_5Mhz&quot;</span><span class="p">:</span> <span class="mi">4</span><span class="p">,</span>
+    <span class="s">&quot;WIFI_PHY_UNKNOWN&quot;</span><span class="p">:</span> <span class="mi">8</span><span class="p">,</span>
+    <span class="s">&quot;WIFI_PHY_STANDARD_80211_10Mhz&quot;</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span>
+    <span class="s">&quot;WIFI_PHY_STANDARD_80211g&quot;</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span>
+    <span class="s">&quot;WIFI_PHY_STANDARD_80211p_CCH&quot;</span><span class="p">:</span> <span class="mi">6</span><span class="p">,</span>
+    <span class="s">&quot;WIFI_PHY_STANDARD_80211a&quot;</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
+    <span class="s">&quot;WIFI_PHY_STANDARD_80211b&quot;</span><span class="p">:</span> <span class="mi">1</span>
+<span class="p">})</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3BaseWifiNetDevice"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wifinetdevice.NS3BaseWifiNetDevice">[docs]</a><span class="k">class</span> <span class="nc">NS3BaseWifiNetDevice</span><span class="p">(</span><span class="n">NS3BaseNetDevice</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;abstract::ns3::WifiNetDevice&quot;</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_rms_to_wait</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">rms</span> <span class="o">=</span> <span class="nb">set</span><span class="p">([</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="p">])</span>
+        <span class="k">return</span> <span class="n">rms</span>
+
+    <span class="k">def</span> <span class="nf">_configure_mac_address</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="c"># The wifimac is the one responsible for</span>
+        <span class="c"># configuring the MAC address</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">_connect_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span>
+        <span class="k">if</span> <span class="n">node</span> <span class="ow">and</span> <span class="n">node</span><span class="o">.</span><span class="n">uuid</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">connected</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;AddDevice&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_connected</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3wifiphy.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3wifiphy.html
new file mode 100644 (file)
index 0000000..acff23b
--- /dev/null
@@ -0,0 +1,178 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.ns3wifiphy &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.ns3wifiphy</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3base</span> <span class="kn">import</span> <span class="n">NS3Base</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3wifinetdevice</span> <span class="kn">import</span> <span class="n">WIFI_STANDARDS</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3BaseWifiPhy"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wifiphy.NS3BaseWifiPhy">[docs]</a><span class="k">class</span> <span class="nc">NS3BaseWifiPhy</span><span class="p">(</span><span class="n">NS3Base</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;abstract::ns3::WifiPhy&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">standard</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;Standard&quot;</span><span class="p">,</span> <span class="s">&quot;Wireless standard&quot;</span><span class="p">,</span>
+                <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;WIFI_PHY_STANDARD_80211a&quot;</span><span class="p">,</span>
+                <span class="n">allowed</span> <span class="o">=</span> <span class="n">WIFI_STANDARDS</span><span class="o">.</span><span class="n">keys</span><span class="p">(),</span>
+                <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Enumerate</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">standard</span><span class="p">)</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BaseWifiPhy.node"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wifiphy.NS3BaseWifiPhy.node">[docs]</a>    <span class="k">def</span> <span class="nf">node</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">device</span><span class="o">.</span><span class="n">node</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BaseWifiPhy.device"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wifiphy.NS3BaseWifiPhy.device">[docs]</a>    <span class="k">def</span> <span class="nf">device</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3wifinetdevice</span> <span class="kn">import</span> <span class="n">NS3BaseWifiNetDevice</span>
+        <span class="n">devices</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">NS3BaseWifiNetDevice</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">devices</span><span class="p">:</span> 
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;WifiPhy not connected to device&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">return</span> <span class="n">devices</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BaseWifiPhy.channel"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wifiphy.NS3BaseWifiPhy.channel">[docs]</a>    <span class="k">def</span> <span class="nf">channel</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3wifichannel</span> <span class="kn">import</span> <span class="n">NS3BaseWifiChannel</span>
+        <span class="n">channels</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">NS3BaseWifiChannel</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">channels</span><span class="p">:</span> 
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;WifiPhy not connected to channel&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">return</span> <span class="n">channels</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_rms_to_wait</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">rms</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+        <span class="n">rms</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">device</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">rms</span>
+
+    <span class="k">def</span> <span class="nf">_connect_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">device</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">device</span>
+        <span class="k">if</span> <span class="n">device</span><span class="o">.</span><span class="n">uuid</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">connected</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_connected</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">device</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;SetMobility&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+
+            <span class="n">standard</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;Standard&quot;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;ConfigureStandard&quot;</span><span class="p">,</span> <span class="n">WIFI_STANDARDS</span><span class="p">[</span><span class="n">standard</span><span class="p">])</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;SetDevice&quot;</span><span class="p">,</span> <span class="n">device</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;SetChannel&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">channel</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+            
+            <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">device</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;SetPhy&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3wifiremotestationmanager.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3wifiremotestationmanager.html
new file mode 100644 (file)
index 0000000..edb85a3
--- /dev/null
@@ -0,0 +1,145 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.ns3wifiremotestationmanager &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.ns3wifiremotestationmanager</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3base</span> <span class="kn">import</span> <span class="n">NS3Base</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3netdevice</span> <span class="kn">import</span> <span class="n">NS3BaseNetDevice</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="NS3BaseWifiRemoteStationManager"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager">[docs]</a><span class="k">class</span> <span class="nc">NS3BaseWifiRemoteStationManager</span><span class="p">(</span><span class="n">NS3Base</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;abstract::ns3::WifiRemoteStationManager&quot;</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BaseWifiRemoteStationManager.node"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager.node">[docs]</a>    <span class="k">def</span> <span class="nf">node</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">device</span><span class="o">.</span><span class="n">node</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3BaseWifiRemoteStationManager.device"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager.device">[docs]</a>    <span class="k">def</span> <span class="nf">device</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3wifinetdevice</span> <span class="kn">import</span> <span class="n">NS3BaseWifiNetDevice</span>
+        <span class="n">devices</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">NS3BaseWifiNetDevice</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">devices</span><span class="p">:</span> 
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;WifiRemoteStationManager not connected to device&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">return</span> <span class="n">devices</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_rms_to_wait</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">rms</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+        <span class="n">rms</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">device</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">rms</span>
+
+    <span class="k">def</span> <span class="nf">_connect_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">device</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">device</span>
+        <span class="k">if</span> <span class="n">device</span><span class="o">.</span><span class="n">uuid</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">connected</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">simulation</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="n">device</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="s">&quot;SetRemoteStationManager&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_connected</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">device</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3wrapper.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3wrapper.html
new file mode 100644 (file)
index 0000000..6a5723b
--- /dev/null
@@ -0,0 +1,795 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.ns3wrapper &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.ns3wrapper</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">import</span> <span class="nn">logging</span>
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">sys</span>
+<span class="kn">import</span> <span class="nn">threading</span>
+<span class="kn">import</span> <span class="nn">time</span>
+<span class="kn">import</span> <span class="nn">uuid</span>
+
+<span class="n">SINGLETON</span> <span class="o">=</span> <span class="s">&quot;singleton::&quot;</span>
+<span class="n">SIMULATOR_UUID</span> <span class="o">=</span> <span class="s">&quot;singleton::Simulator&quot;</span>
+<span class="n">CONFIG_UUID</span> <span class="o">=</span> <span class="s">&quot;singleton::Config&quot;</span>
+<span class="n">GLOBAL_VALUE_UUID</span> <span class="o">=</span> <span class="s">&quot;singleton::GlobalValue&quot;</span>
+<span class="n">IPV4_GLOBAL_ROUTING_HELPER_UUID</span> <span class="o">=</span> <span class="s">&quot;singleton::Ipv4GlobalRoutingHelper&quot;</span>
+
+<div class="viewcode-block" id="load_ns3_libraries"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.load_ns3_libraries">[docs]</a><span class="k">def</span> <span class="nf">load_ns3_libraries</span><span class="p">():</span>
+    <span class="kn">import</span> <span class="nn">ctypes</span>
+    <span class="kn">import</span> <span class="nn">re</span>
+
+    <span class="n">libdir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;NS3LIBRARIES&quot;</span><span class="p">)</span>
+
+    <span class="c"># Load the ns-3 modules shared libraries</span>
+    <span class="k">if</span> <span class="n">libdir</span><span class="p">:</span>
+        <span class="n">files</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">listdir</span><span class="p">(</span><span class="n">libdir</span><span class="p">)</span>
+        <span class="n">regex</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s">&quot;(.*\.so)$&quot;</span><span class="p">)</span>
+        <span class="n">libs</span> <span class="o">=</span> <span class="p">[</span><span class="n">m</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="k">for</span> <span class="n">filename</span> <span class="ow">in</span> <span class="n">files</span> <span class="k">for</span> <span class="n">m</span> <span class="ow">in</span> <span class="p">[</span><span class="n">regex</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">filename</span><span class="p">)]</span> <span class="k">if</span> <span class="n">m</span><span class="p">]</span>
+
+        <span class="n">initial_size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">libs</span><span class="p">)</span>
+        <span class="c"># Try to load the libraries in the right order by trial and error.</span>
+        <span class="c"># Loop until all libraries are loaded.</span>
+        <span class="k">while</span> <span class="nb">len</span><span class="p">(</span><span class="n">libs</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+            <span class="k">for</span> <span class="n">lib</span> <span class="ow">in</span> <span class="n">libs</span><span class="p">:</span>
+                <span class="n">libfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">libdir</span><span class="p">,</span> <span class="n">lib</span><span class="p">)</span>
+                <span class="k">try</span><span class="p">:</span>
+                    <span class="n">ctypes</span><span class="o">.</span><span class="n">CDLL</span><span class="p">(</span><span class="n">libfile</span><span class="p">,</span> <span class="n">ctypes</span><span class="o">.</span><span class="n">RTLD_GLOBAL</span><span class="p">)</span>
+                    <span class="n">libs</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">lib</span><span class="p">)</span>
+                <span class="k">except</span><span class="p">:</span>
+                    <span class="c">#import traceback</span>
+                    <span class="c">#err = traceback.format_exc()</span>
+                    <span class="c">#print err</span>
+                    <span class="k">pass</span>
+
+            <span class="c"># if did not load any libraries in the last iteration break</span>
+            <span class="c"># to prevent infinit loop</span>
+            <span class="k">if</span> <span class="n">initial_size</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">libs</span><span class="p">):</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s">&quot;Imposible to load shared libraries </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="n">libs</span><span class="p">))</span>
+            <span class="n">initial_size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">libs</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="load_ns3_module"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.load_ns3_module">[docs]</a><span class="k">def</span> <span class="nf">load_ns3_module</span><span class="p">():</span>
+    <span class="n">load_ns3_libraries</span><span class="p">()</span>
+
+    <span class="c"># import the python bindings for the ns-3 modules</span>
+    <span class="n">bindings</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;NS3BINDINGS&quot;</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">bindings</span><span class="p">:</span>
+        <span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">bindings</span><span class="p">)</span>
+
+    <span class="kn">import</span> <span class="nn">pkgutil</span>
+    <span class="kn">import</span> <span class="nn">imp</span>
+    <span class="kn">import</span> <span class="nn">ns</span>
+
+    <span class="c"># create a Python module to add all ns3 classes</span>
+    <span class="n">ns3mod</span> <span class="o">=</span> <span class="n">imp</span><span class="o">.</span><span class="n">new_module</span><span class="p">(</span><span class="s">&quot;ns3&quot;</span><span class="p">)</span>
+    <span class="n">sys</span><span class="o">.</span><span class="n">modules</span><span class="p">[</span><span class="s">&quot;ns3&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">ns3mod</span>
+
+    <span class="k">for</span> <span class="n">importer</span><span class="p">,</span> <span class="n">modname</span><span class="p">,</span> <span class="n">ispkg</span> <span class="ow">in</span> <span class="n">pkgutil</span><span class="o">.</span><span class="n">iter_modules</span><span class="p">(</span><span class="n">ns</span><span class="o">.</span><span class="n">__path__</span><span class="p">):</span>
+        <span class="k">if</span> <span class="n">modname</span> <span class="ow">in</span> <span class="p">[</span> <span class="s">&quot;visualizer&quot;</span> <span class="p">]:</span>
+            <span class="k">continue</span>
+
+        <span class="n">fullmodname</span> <span class="o">=</span> <span class="s">&quot;ns.</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">modname</span>
+        <span class="n">module</span> <span class="o">=</span> <span class="nb">__import__</span><span class="p">(</span><span class="n">fullmodname</span><span class="p">,</span> <span class="nb">globals</span><span class="p">(),</span> <span class="nb">locals</span><span class="p">(),</span> <span class="p">[</span><span class="s">&#39;*&#39;</span><span class="p">])</span>
+
+        <span class="k">for</span> <span class="n">sattr</span> <span class="ow">in</span> <span class="nb">dir</span><span class="p">(</span><span class="n">module</span><span class="p">):</span>
+            <span class="k">if</span> <span class="n">sattr</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&quot;_&quot;</span><span class="p">):</span>
+                <span class="k">continue</span>
+
+            <span class="n">attr</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">module</span><span class="p">,</span> <span class="n">sattr</span><span class="p">)</span>
+
+            <span class="c"># netanim.Config and lte.Config singleton overrides ns3::Config</span>
+            <span class="k">if</span> <span class="n">sattr</span> <span class="o">==</span> <span class="s">&quot;Config&quot;</span> <span class="ow">and</span> <span class="n">modname</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&#39;netanim&#39;</span><span class="p">,</span> <span class="s">&#39;lte&#39;</span><span class="p">]:</span>
+                <span class="n">sattr</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">.</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">modname</span><span class="p">,</span> <span class="n">sattr</span><span class="p">)</span>
+
+            <span class="nb">setattr</span><span class="p">(</span><span class="n">ns3mod</span><span class="p">,</span> <span class="n">sattr</span><span class="p">,</span> <span class="n">attr</span><span class="p">)</span>
+
+    <span class="k">return</span> <span class="n">ns3mod</span>
+</div>
+<div class="viewcode-block" id="NS3Wrapper"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.NS3Wrapper">[docs]</a><span class="k">class</span> <span class="nc">NS3Wrapper</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">loglevel</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">INFO</span><span class="p">,</span> <span class="n">enable_dump</span> <span class="o">=</span> <span class="bp">False</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3Wrapper</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+        <span class="c"># Thread used to run the simulation</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_simulation_thread</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_condition</span> <span class="o">=</span> <span class="bp">None</span>
+
+        <span class="c"># True if Simulator::Run was invoked</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_started</span> <span class="o">=</span> <span class="bp">False</span>
+
+        <span class="c"># holds reference to all C++ objects and variables in the simulation</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_objects</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
+
+        <span class="c"># Logging</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s">&quot;ns3wrapper&quot;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_logger</span><span class="o">.</span><span class="n">setLevel</span><span class="p">(</span><span class="n">loglevel</span><span class="p">)</span>
+
+        <span class="c">## NOTE that the reason to create a handler to the ns3 module,</span>
+        <span class="c"># that is re-loaded each time a ns-3 wrapper is instantiated,</span>
+        <span class="c"># is that else each unit test for the ns3wrapper class would need</span>
+        <span class="c"># a separate file. Several ns3wrappers would be created in the </span>
+        <span class="c"># same unit test (single process), leading to inchorences in the </span>
+        <span class="c"># state of ns-3 global objects</span>
+        <span class="c">#</span>
+        <span class="c"># Handler to ns3 classes</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_ns3</span> <span class="o">=</span> <span class="bp">None</span>
+
+        <span class="c"># Collection of allowed ns3 classes</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_allowed_types</span> <span class="o">=</span> <span class="bp">None</span>
+
+        <span class="c"># Object to dump instructions to reproduce and debug experiment</span>
+        <span class="kn">from</span> <span class="nn">ns3wrapper_debug</span> <span class="kn">import</span> <span class="n">NS3WrapperDebuger</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_debuger</span> <span class="o">=</span> <span class="n">NS3WrapperDebuger</span><span class="p">(</span><span class="n">enabled</span> <span class="o">=</span> <span class="n">enable_dump</span><span class="p">)</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3Wrapper.debuger"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.NS3Wrapper.debuger">[docs]</a>    <span class="k">def</span> <span class="nf">debuger</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_debuger</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3Wrapper.ns3"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.NS3Wrapper.ns3">[docs]</a>    <span class="k">def</span> <span class="nf">ns3</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ns3</span><span class="p">:</span>
+            <span class="c"># load ns-3 libraries and bindings</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_ns3</span> <span class="o">=</span> <span class="n">load_ns3_module</span><span class="p">()</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ns3</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3Wrapper.allowed_types"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.NS3Wrapper.allowed_types">[docs]</a>    <span class="k">def</span> <span class="nf">allowed_types</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_allowed_types</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_allowed_types</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+            <span class="n">type_id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ns3</span><span class="o">.</span><span class="n">TypeId</span><span class="p">()</span>
+            
+            <span class="n">tid_count</span> <span class="o">=</span> <span class="n">type_id</span><span class="o">.</span><span class="n">GetRegisteredN</span><span class="p">()</span>
+            <span class="n">base</span> <span class="o">=</span> <span class="n">type_id</span><span class="o">.</span><span class="n">LookupByName</span><span class="p">(</span><span class="s">&quot;ns3::Object&quot;</span><span class="p">)</span>
+
+            <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="n">tid_count</span><span class="p">):</span>
+                <span class="n">tid</span> <span class="o">=</span> <span class="n">type_id</span><span class="o">.</span><span class="n">GetRegistered</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
+                
+                <span class="k">if</span> <span class="n">tid</span><span class="o">.</span><span class="n">MustHideFromDocumentation</span><span class="p">()</span> <span class="ow">or</span> \
+                        <span class="ow">not</span> <span class="n">tid</span><span class="o">.</span><span class="n">HasConstructor</span><span class="p">()</span> <span class="ow">or</span> \
+                        <span class="ow">not</span> <span class="n">tid</span><span class="o">.</span><span class="n">IsChildOf</span><span class="p">(</span><span class="n">base</span><span class="p">):</span> 
+                    <span class="k">continue</span>
+
+                <span class="n">type_name</span> <span class="o">=</span> <span class="n">tid</span><span class="o">.</span><span class="n">GetName</span><span class="p">()</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_allowed_types</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">type_name</span><span class="p">)</span>
+        
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_allowed_types</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3Wrapper.logger"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.NS3Wrapper.logger">[docs]</a>    <span class="k">def</span> <span class="nf">logger</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_logger</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3Wrapper.is_running"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.NS3Wrapper.is_running">[docs]</a>    <span class="k">def</span> <span class="nf">is_running</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_started</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">ns3</span><span class="o">.</span><span class="n">Simulator</span><span class="o">.</span><span class="n">IsFinished</span><span class="p">()</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3Wrapper.is_started"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.NS3Wrapper.is_started">[docs]</a>    <span class="k">def</span> <span class="nf">is_started</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_started</span><span class="p">:</span>
+            <span class="n">now</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ns3</span><span class="o">.</span><span class="n">Simulator</span><span class="o">.</span><span class="n">Now</span><span class="p">()</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="n">now</span><span class="o">.</span><span class="n">IsZero</span><span class="p">():</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_started</span> <span class="o">=</span> <span class="bp">True</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_started</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3Wrapper.is_finished"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.NS3Wrapper.is_finished">[docs]</a>    <span class="k">def</span> <span class="nf">is_finished</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">ns3</span><span class="o">.</span><span class="n">Simulator</span><span class="o">.</span><span class="n">IsFinished</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="NS3Wrapper.make_uuid"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.NS3Wrapper.make_uuid">[docs]</a>    <span class="k">def</span> <span class="nf">make_uuid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s">&quot;uuid</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">uuid</span><span class="o">.</span><span class="n">uuid4</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="NS3Wrapper.get_object"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.NS3Wrapper.get_object">[docs]</a>    <span class="k">def</span> <span class="nf">get_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">uuid</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_objects</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">uuid</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NS3Wrapper.factory"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.NS3Wrapper.factory">[docs]</a>    <span class="k">def</span> <span class="nf">factory</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">type_name</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; This method should be used to construct ns-3 objects</span>
+<span class="sd">        that have a TypeId and related introspection information &quot;&quot;&quot;</span>
+
+        <span class="k">if</span> <span class="n">type_name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">allowed_types</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Type </span><span class="si">%s</span><span class="s"> not supported&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">type_name</span><span class="p">)</span> 
+            <span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+
+        <span class="n">uuid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">make_uuid</span><span class="p">()</span>
+        
+        <span class="c">### DEBUG</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;FACTORY </span><span class="si">%s</span><span class="s">( </span><span class="si">%s</span><span class="s"> )&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">type_name</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">kwargs</span><span class="p">)))</span>
+        
+        <span class="c">### DUMP</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">debuger</span><span class="o">.</span><span class="n">dump_factory</span><span class="p">(</span><span class="n">uuid</span><span class="p">,</span> <span class="n">type_name</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">)</span>
+
+        <span class="n">factory</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ns3</span><span class="o">.</span><span class="n">ObjectFactory</span><span class="p">()</span>
+        <span class="n">factory</span><span class="o">.</span><span class="n">SetTypeId</span><span class="p">(</span><span class="n">type_name</span><span class="p">)</span>
+
+        <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">iteritems</span><span class="p">():</span>
+            <span class="n">ns3_value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_from_string_to_ns3_value</span><span class="p">(</span><span class="n">type_name</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
+            <span class="n">factory</span><span class="o">.</span><span class="n">Set</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">ns3_value</span><span class="p">)</span>
+
+        <span class="n">obj</span> <span class="o">=</span> <span class="n">factory</span><span class="o">.</span><span class="n">Create</span><span class="p">()</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">_objects</span><span class="p">[</span><span class="n">uuid</span><span class="p">]</span> <span class="o">=</span> <span class="n">obj</span>
+
+        <span class="c">### DEBUG</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;RET FACTORY ( uuid </span><span class="si">%s</span><span class="s"> ) </span><span class="si">%s</span><span class="s"> = </span><span class="si">%s</span><span class="s">( </span><span class="si">%s</span><span class="s"> )&quot;</span> <span class="o">%</span> <span class="p">(</span>
+            <span class="nb">str</span><span class="p">(</span><span class="n">uuid</span><span class="p">),</span> <span class="nb">str</span><span class="p">(</span><span class="n">obj</span><span class="p">),</span> <span class="n">type_name</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">kwargs</span><span class="p">)))</span>
+        <span class="k">return</span> <span class="n">uuid</span>
+</div>
+<div class="viewcode-block" id="NS3Wrapper.create"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.NS3Wrapper.create">[docs]</a>    <span class="k">def</span> <span class="nf">create</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">clazzname</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; This method should be used to construct ns-3 objects that</span>
+<span class="sd">        do not have a TypeId (e.g. Values) &quot;&quot;&quot;</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ns3</span><span class="p">,</span> <span class="n">clazzname</span><span class="p">):</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Type </span><span class="si">%s</span><span class="s"> not supported&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">clazzname</span><span class="p">)</span> 
+            <span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+
+        <span class="n">uuid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">make_uuid</span><span class="p">()</span>
+        
+        <span class="c">### DEBUG</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;CREATE </span><span class="si">%s</span><span class="s">( </span><span class="si">%s</span><span class="s"> )&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">clazzname</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">args</span><span class="p">)))</span>
+    
+        <span class="c">### DUMP</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">debuger</span><span class="o">.</span><span class="n">dump_create</span><span class="p">(</span><span class="n">uuid</span><span class="p">,</span> <span class="n">clazzname</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
+
+        <span class="n">clazz</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ns3</span><span class="p">,</span> <span class="n">clazzname</span><span class="p">)</span>
+        <span class="c"># arguments starting with &#39;uuid&#39; identify ns-3 C++</span>
+        <span class="c"># objects and must be replaced by the actual object</span>
+        <span class="n">realargs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_args</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
+       
+        <span class="n">obj</span> <span class="o">=</span> <span class="n">clazz</span><span class="p">(</span><span class="o">*</span><span class="n">realargs</span><span class="p">)</span>
+        
+        <span class="bp">self</span><span class="o">.</span><span class="n">_objects</span><span class="p">[</span><span class="n">uuid</span><span class="p">]</span> <span class="o">=</span> <span class="n">obj</span>
+
+        <span class="c">### DEBUG</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;RET CREATE ( uuid </span><span class="si">%s</span><span class="s"> ) </span><span class="si">%s</span><span class="s"> = </span><span class="si">%s</span><span class="s">( </span><span class="si">%s</span><span class="s"> )&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">uuid</span><span class="p">),</span> 
+            <span class="nb">str</span><span class="p">(</span><span class="n">obj</span><span class="p">),</span> <span class="n">clazzname</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">args</span><span class="p">)))</span>
+
+        <span class="k">return</span> <span class="n">uuid</span>
+</div>
+<div class="viewcode-block" id="NS3Wrapper.invoke"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.NS3Wrapper.invoke">[docs]</a>    <span class="k">def</span> <span class="nf">invoke</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">uuid</span><span class="p">,</span> <span class="n">operation</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="c">### DEBUG</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;INVOKE </span><span class="si">%s</span><span class="s"> -&gt; </span><span class="si">%s</span><span class="s">( </span><span class="si">%s</span><span class="s">, </span><span class="si">%s</span><span class="s"> ) &quot;</span> <span class="o">%</span> <span class="p">(</span>
+            <span class="n">uuid</span><span class="p">,</span> <span class="n">operation</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="nb">str</span><span class="p">(</span><span class="n">kwargs</span><span class="p">)))</span>
+        <span class="c">########</span>
+
+        <span class="n">result</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="n">newuuid</span> <span class="o">=</span> <span class="bp">None</span>
+
+        <span class="k">if</span> <span class="n">operation</span> <span class="o">==</span> <span class="s">&quot;isRunning&quot;</span><span class="p">:</span>
+            <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_running</span>
+
+        <span class="k">elif</span> <span class="n">operation</span> <span class="o">==</span> <span class="s">&quot;isStarted&quot;</span><span class="p">:</span>
+            <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_started</span>
+
+        <span class="k">elif</span> <span class="n">operation</span> <span class="o">==</span> <span class="s">&quot;isFinished&quot;</span><span class="p">:</span>
+            <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_finished</span>
+
+        <span class="k">elif</span> <span class="n">operation</span> <span class="o">==</span> <span class="s">&quot;isAppRunning&quot;</span><span class="p">:</span>
+            <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_is_app_running</span><span class="p">(</span><span class="n">uuid</span><span class="p">)</span>
+
+        <span class="k">elif</span> <span class="n">operation</span> <span class="o">==</span> <span class="s">&quot;isAppStarted&quot;</span><span class="p">:</span>
+            <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_is_app_started</span><span class="p">(</span><span class="n">uuid</span><span class="p">)</span>
+
+        <span class="k">elif</span> <span class="n">operation</span> <span class="o">==</span> <span class="s">&quot;recvFD&quot;</span><span class="p">:</span>
+            <span class="c">### passFD operation binds to a different random socket </span>
+            <span class="c">### en every execution, so the socket name that could be</span>
+            <span class="c">### dumped to the debug script using dump_invoke is</span>
+            <span class="c">### not be valid accross debug executions.</span>
+            <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_recv_fd</span><span class="p">(</span><span class="n">uuid</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+
+        <span class="k">elif</span> <span class="n">operation</span> <span class="o">==</span> <span class="s">&quot;addStaticRoute&quot;</span><span class="p">:</span>
+            <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_static_route</span><span class="p">(</span><span class="n">uuid</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
+            
+            <span class="c">### DUMP - result is static, so will be dumped as plain text</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debuger</span><span class="o">.</span><span class="n">dump_invoke</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">uuid</span><span class="p">,</span> <span class="n">operation</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">)</span>
+
+        <span class="k">elif</span> <span class="n">operation</span> <span class="o">==</span> <span class="s">&quot;retrieveObject&quot;</span><span class="p">:</span>
+            <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_retrieve_object</span><span class="p">(</span><span class="n">uuid</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+       
+            <span class="c">### DUMP - result is static, so will be dumped as plain text</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debuger</span><span class="o">.</span><span class="n">dump_invoke</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">uuid</span><span class="p">,</span> <span class="n">operation</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">)</span>
+       
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">newuuid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">make_uuid</span><span class="p">()</span>
+
+            <span class="c">### DUMP - result is a uuid that encoded an dynamically generated </span>
+            <span class="c">### object</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debuger</span><span class="o">.</span><span class="n">dump_invoke</span><span class="p">(</span><span class="n">newuuid</span><span class="p">,</span> <span class="n">uuid</span><span class="p">,</span> <span class="n">operation</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="n">uuid</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">SINGLETON</span><span class="p">):</span>
+                <span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_singleton</span><span class="p">(</span><span class="n">uuid</span><span class="p">)</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_object</span><span class="p">(</span><span class="n">uuid</span><span class="p">)</span>
+            
+            <span class="n">method</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">operation</span><span class="p">)</span>
+
+            <span class="c"># arguments starting with &#39;uuid&#39; identify ns-3 C++</span>
+            <span class="c"># objects and must be replaced by the actual object</span>
+            <span class="n">realargs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_args</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
+            <span class="n">realkwargs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_kwargs</span><span class="p">(</span><span class="n">kwargs</span><span class="p">)</span>
+
+            <span class="n">result</span> <span class="o">=</span> <span class="n">method</span><span class="p">(</span><span class="o">*</span><span class="n">realargs</span><span class="p">,</span> <span class="o">**</span><span class="n">realkwargs</span><span class="p">)</span>
+
+            <span class="c"># If the result is an object (not a base value),</span>
+            <span class="c"># then keep track of the object a return the object</span>
+            <span class="c"># reference (newuuid)</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">result</span> <span class="ow">is</span> <span class="bp">None</span> <span class="ow">or</span> <span class="nb">type</span><span class="p">(</span><span class="n">result</span><span class="p">)</span> <span class="ow">in</span> <span class="p">[</span>
+                    <span class="nb">bool</span><span class="p">,</span> <span class="nb">float</span><span class="p">,</span> <span class="nb">long</span><span class="p">,</span> <span class="nb">str</span><span class="p">,</span> <span class="nb">int</span><span class="p">]):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_objects</span><span class="p">[</span><span class="n">newuuid</span><span class="p">]</span> <span class="o">=</span> <span class="n">result</span>
+                <span class="n">result</span> <span class="o">=</span> <span class="n">newuuid</span>
+
+        <span class="c">### DEBUG</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;RET INVOKE </span><span class="si">%s%s</span><span class="s"> = </span><span class="si">%s</span><span class="s"> -&gt; </span><span class="si">%s</span><span class="s">(</span><span class="si">%s</span><span class="s">, </span><span class="si">%s</span><span class="s">) &quot;</span> <span class="o">%</span> <span class="p">(</span>
+            <span class="s">&quot;(uuid </span><span class="si">%s</span><span class="s">) &quot;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="n">newuuid</span><span class="p">)</span> <span class="k">if</span> <span class="n">newuuid</span> <span class="k">else</span> <span class="s">&quot;&quot;</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">result</span><span class="p">),</span> <span class="n">uuid</span><span class="p">,</span> 
+            <span class="n">operation</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="nb">str</span><span class="p">(</span><span class="n">kwargs</span><span class="p">)))</span>
+        <span class="c">########</span>
+
+        <span class="k">return</span> <span class="n">result</span>
+</div>
+    <span class="k">def</span> <span class="nf">_set_attr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">ns3_value</span><span class="p">):</span>
+        <span class="n">obj</span><span class="o">.</span><span class="n">SetAttribute</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">ns3_value</span><span class="p">)</span>
+
+<div class="viewcode-block" id="NS3Wrapper.set"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.NS3Wrapper.set">[docs]</a>    <span class="k">def</span> <span class="nf">set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">uuid</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
+        <span class="c">### DEBUG</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;SET </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">uuid</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">value</span><span class="p">)))</span>
+    
+        <span class="c">### DUMP</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">debuger</span><span class="o">.</span><span class="n">dump_set</span><span class="p">(</span><span class="n">uuid</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
+
+        <span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_object</span><span class="p">(</span><span class="n">uuid</span><span class="p">)</span>
+        <span class="n">type_name</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">GetInstanceTypeId</span><span class="p">()</span><span class="o">.</span><span class="n">GetName</span><span class="p">()</span>
+        <span class="n">ns3_value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_from_string_to_ns3_value</span><span class="p">(</span><span class="n">type_name</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
+
+        <span class="c"># If the Simulation thread is not running,</span>
+        <span class="c"># then there will be no thread-safety problems</span>
+        <span class="c"># in changing the value of an attribute directly.</span>
+        <span class="c"># However, if the simulation is running we need</span>
+        <span class="c"># to set the value by scheduling an event, else</span>
+        <span class="c"># we risk to corrupt the state of the</span>
+        <span class="c"># simulation.</span>
+        
+        <span class="n">event_executed</span> <span class="o">=</span> <span class="p">[</span><span class="bp">False</span><span class="p">]</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_running</span><span class="p">:</span>
+            <span class="c"># schedule the event in the Simulator</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_schedule_event</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_condition</span><span class="p">,</span> <span class="n">event_executed</span><span class="p">,</span> 
+                    <span class="bp">self</span><span class="o">.</span><span class="n">_set_attr</span><span class="p">,</span> <span class="n">obj</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">ns3_value</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">event_executed</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_set_attr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">ns3_value</span><span class="p">)</span>
+
+        <span class="c">### DEBUG</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;RET SET </span><span class="si">%s</span><span class="s"> = </span><span class="si">%s</span><span class="s"> -&gt; set(</span><span class="si">%s</span><span class="s">, </span><span class="si">%s</span><span class="s">)&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">value</span><span class="p">),</span> <span class="n">uuid</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> 
+            <span class="nb">str</span><span class="p">(</span><span class="n">value</span><span class="p">)))</span>
+
+        <span class="k">return</span> <span class="n">value</span>
+</div>
+    <span class="k">def</span> <span class="nf">_get_attr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">ns3_value</span><span class="p">):</span>
+        <span class="n">obj</span><span class="o">.</span><span class="n">GetAttribute</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">ns3_value</span><span class="p">)</span>
+
+<div class="viewcode-block" id="NS3Wrapper.get"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.NS3Wrapper.get">[docs]</a>    <span class="k">def</span> <span class="nf">get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">uuid</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
+        <span class="c">### DEBUG</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;GET </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">uuid</span><span class="p">,</span> <span class="n">name</span><span class="p">))</span>
+        
+        <span class="c">### DUMP</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">debuger</span><span class="o">.</span><span class="n">dump_get</span><span class="p">(</span><span class="n">uuid</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
+
+        <span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_object</span><span class="p">(</span><span class="n">uuid</span><span class="p">)</span>
+        <span class="n">type_name</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">GetInstanceTypeId</span><span class="p">()</span><span class="o">.</span><span class="n">GetName</span><span class="p">()</span>
+        <span class="n">ns3_value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_attr_ns3_value</span><span class="p">(</span><span class="n">type_name</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
+
+        <span class="n">event_executed</span> <span class="o">=</span> <span class="p">[</span><span class="bp">False</span><span class="p">]</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_running</span><span class="p">:</span>
+            <span class="c"># schedule the event in the Simulator</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_schedule_event</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_condition</span><span class="p">,</span> <span class="n">event_executed</span><span class="p">,</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">_get_attr</span><span class="p">,</span> <span class="n">obj</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">ns3_value</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">event_executed</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_get_attr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">ns3_value</span><span class="p">)</span>
+
+        <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_from_ns3_value_to_string</span><span class="p">(</span><span class="n">type_name</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">ns3_value</span><span class="p">)</span>
+
+        <span class="c">### DEBUG</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;RET GET </span><span class="si">%s</span><span class="s"> = </span><span class="si">%s</span><span class="s"> -&gt; get(</span><span class="si">%s</span><span class="s">)&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">result</span><span class="p">),</span> <span class="n">uuid</span><span class="p">,</span> <span class="n">name</span><span class="p">))</span>
+
+        <span class="k">return</span> <span class="n">result</span>
+</div>
+<div class="viewcode-block" id="NS3Wrapper.start"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.NS3Wrapper.start">[docs]</a>    <span class="k">def</span> <span class="nf">start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="c">### DUMP</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">debuger</span><span class="o">.</span><span class="n">dump_start</span><span class="p">()</span>
+
+        <span class="c"># Launch the simulator thread and Start the</span>
+        <span class="c"># simulator in that thread</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_condition</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Condition</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_simulator_thread</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Thread</span><span class="p">(</span>
+                <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_simulator_run</span><span class="p">,</span>
+                <span class="n">args</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_condition</span><span class="p">])</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_simulator_thread</span><span class="o">.</span><span class="n">setDaemon</span><span class="p">(</span><span class="bp">True</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_simulator_thread</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
+        
+        <span class="c">### DEBUG</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;START&quot;</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NS3Wrapper.stop"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.NS3Wrapper.stop">[docs]</a>    <span class="k">def</span> <span class="nf">stop</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">time</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="c">### DUMP</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">debuger</span><span class="o">.</span><span class="n">dump_stop</span><span class="p">(</span><span class="n">time</span><span class="o">=</span><span class="n">time</span><span class="p">)</span>
+        
+        <span class="k">if</span> <span class="n">time</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ns3</span><span class="o">.</span><span class="n">Simulator</span><span class="o">.</span><span class="n">Stop</span><span class="p">()</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ns3</span><span class="o">.</span><span class="n">Simulator</span><span class="o">.</span><span class="n">Stop</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ns3</span><span class="o">.</span><span class="n">Time</span><span class="p">(</span><span class="n">time</span><span class="p">))</span>
+
+        <span class="c">### DEBUG</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;STOP time=</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="n">time</span><span class="p">))</span>
+</div>
+<div class="viewcode-block" id="NS3Wrapper.shutdown"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.NS3Wrapper.shutdown">[docs]</a>    <span class="k">def</span> <span class="nf">shutdown</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="c">### DUMP</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">debuger</span><span class="o">.</span><span class="n">dump_shutdown</span><span class="p">()</span>
+
+        <span class="k">while</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">ns3</span><span class="o">.</span><span class="n">Simulator</span><span class="o">.</span><span class="n">IsFinished</span><span class="p">():</span>
+            <span class="c">#self.logger.debug(&quot;Waiting for simulation to finish&quot;)</span>
+            <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mf">0.5</span><span class="p">)</span>
+        
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_simulator_thread</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_simulator_thread</span><span class="o">.</span><span class="n">join</span><span class="p">()</span>
+       
+        <span class="bp">self</span><span class="o">.</span><span class="n">ns3</span><span class="o">.</span><span class="n">Simulator</span><span class="o">.</span><span class="n">Destroy</span><span class="p">()</span>
+        
+        <span class="c"># Remove all references to ns-3 objects</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_objects</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
+        
+        <span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">flush</span><span class="p">()</span>
+        <span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">flush</span><span class="p">()</span>
+
+        <span class="c">### DEBUG</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;SHUTDOWN&quot;</span><span class="p">)</span>
+</div>
+    <span class="k">def</span> <span class="nf">_simulator_run</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">condition</span><span class="p">):</span>
+        <span class="c"># Run simulation</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">ns3</span><span class="o">.</span><span class="n">Simulator</span><span class="o">.</span><span class="n">Run</span><span class="p">()</span>
+        <span class="c"># Signal condition to indicate simulation ended and</span>
+        <span class="c"># notify waiting threads</span>
+        <span class="n">condition</span><span class="o">.</span><span class="n">acquire</span><span class="p">()</span>
+        <span class="n">condition</span><span class="o">.</span><span class="n">notifyAll</span><span class="p">()</span>
+        <span class="n">condition</span><span class="o">.</span><span class="n">release</span><span class="p">()</span>
+
+    <span class="k">def</span> <span class="nf">_schedule_event</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">condition</span><span class="p">,</span> <span class="n">event_executed</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Schedules event on running simulation, and wait until</span>
+<span class="sd">            event is executed&quot;&quot;&quot;</span>
+
+        <span class="k">def</span> <span class="nf">execute_event</span><span class="p">(</span><span class="n">contextId</span><span class="p">,</span> <span class="n">condition</span><span class="p">,</span> <span class="n">event_executed</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
+            <span class="k">try</span><span class="p">:</span>
+                <span class="n">func</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span>
+                <span class="n">event_executed</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="bp">True</span>
+            <span class="k">finally</span><span class="p">:</span>
+                <span class="c"># notify condition indicating event was executed</span>
+                <span class="n">condition</span><span class="o">.</span><span class="n">acquire</span><span class="p">()</span>
+                <span class="n">condition</span><span class="o">.</span><span class="n">notifyAll</span><span class="p">()</span>
+                <span class="n">condition</span><span class="o">.</span><span class="n">release</span><span class="p">()</span>
+
+        <span class="c"># contextId is defined as general context</span>
+        <span class="n">contextId</span> <span class="o">=</span> <span class="nb">long</span><span class="p">(</span><span class="mh">0xffffffff</span><span class="p">)</span>
+
+        <span class="c"># delay 0 means that the event is expected to execute inmediately</span>
+        <span class="n">delay</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ns3</span><span class="o">.</span><span class="n">Seconds</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+    
+        <span class="c"># Mark event as not executed</span>
+        <span class="n">event_executed</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="bp">False</span>
+
+        <span class="n">condition</span><span class="o">.</span><span class="n">acquire</span><span class="p">()</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ns3</span><span class="o">.</span><span class="n">Simulator</span><span class="o">.</span><span class="n">ScheduleWithContext</span><span class="p">(</span><span class="n">contextId</span><span class="p">,</span> <span class="n">delay</span><span class="p">,</span> <span class="n">execute_event</span><span class="p">,</span> 
+                    <span class="n">condition</span><span class="p">,</span> <span class="n">event_executed</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">ns3</span><span class="o">.</span><span class="n">Simulator</span><span class="o">.</span><span class="n">IsFinished</span><span class="p">():</span>
+                <span class="n">condition</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span>
+        <span class="k">finally</span><span class="p">:</span>
+            <span class="n">condition</span><span class="o">.</span><span class="n">release</span><span class="p">()</span>
+
+    <span class="k">def</span> <span class="nf">_create_attr_ns3_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">type_name</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
+        <span class="n">TypeId</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ns3</span><span class="o">.</span><span class="n">TypeId</span><span class="p">()</span>
+        <span class="n">tid</span> <span class="o">=</span> <span class="n">TypeId</span><span class="o">.</span><span class="n">LookupByName</span><span class="p">(</span><span class="n">type_name</span><span class="p">)</span>
+        <span class="n">info</span> <span class="o">=</span> <span class="n">TypeId</span><span class="o">.</span><span class="n">AttributeInformation</span><span class="p">()</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">tid</span><span class="o">.</span><span class="n">LookupAttributeByName</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">info</span><span class="p">):</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;TypeId </span><span class="si">%s</span><span class="s"> has no attribute </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">type_name</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span> 
+            <span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+
+        <span class="n">checker</span> <span class="o">=</span> <span class="n">info</span><span class="o">.</span><span class="n">checker</span>
+        <span class="n">ns3_value</span> <span class="o">=</span> <span class="n">checker</span><span class="o">.</span><span class="n">Create</span><span class="p">()</span> 
+        <span class="k">return</span> <span class="n">ns3_value</span>
+
+    <span class="k">def</span> <span class="nf">_attr_from_ns3_value_to_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">type_name</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">ns3_value</span><span class="p">):</span>
+        <span class="n">TypeId</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ns3</span><span class="o">.</span><span class="n">TypeId</span><span class="p">()</span>
+        <span class="n">tid</span> <span class="o">=</span> <span class="n">TypeId</span><span class="o">.</span><span class="n">LookupByName</span><span class="p">(</span><span class="n">type_name</span><span class="p">)</span>
+        <span class="n">info</span> <span class="o">=</span> <span class="n">TypeId</span><span class="o">.</span><span class="n">AttributeInformation</span><span class="p">()</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">tid</span><span class="o">.</span><span class="n">LookupAttributeByName</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">info</span><span class="p">):</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;TypeId </span><span class="si">%s</span><span class="s"> has no attribute </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">type_name</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span> 
+            <span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+
+        <span class="n">checker</span> <span class="o">=</span> <span class="n">info</span><span class="o">.</span><span class="n">checker</span>
+        <span class="n">value</span> <span class="o">=</span> <span class="n">ns3_value</span><span class="o">.</span><span class="n">SerializeToString</span><span class="p">(</span><span class="n">checker</span><span class="p">)</span>
+
+        <span class="n">type_name</span> <span class="o">=</span> <span class="n">checker</span><span class="o">.</span><span class="n">GetValueTypeName</span><span class="p">()</span>
+        <span class="k">if</span> <span class="n">type_name</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&quot;ns3::UintegerValue&quot;</span><span class="p">,</span> <span class="s">&quot;ns3::IntegerValue&quot;</span><span class="p">]:</span>
+            <span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">type_name</span> <span class="o">==</span> <span class="s">&quot;ns3::DoubleValue&quot;</span><span class="p">:</span>
+            <span class="k">return</span> <span class="nb">float</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">type_name</span> <span class="o">==</span> <span class="s">&quot;ns3::BooleanValue&quot;</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">value</span> <span class="o">==</span> <span class="s">&quot;true&quot;</span>
+
+        <span class="k">return</span> <span class="n">value</span>
+
+    <span class="k">def</span> <span class="nf">_attr_from_string_to_ns3_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">type_name</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
+        <span class="n">TypeId</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ns3</span><span class="o">.</span><span class="n">TypeId</span><span class="p">()</span>
+        <span class="n">tid</span> <span class="o">=</span> <span class="n">TypeId</span><span class="o">.</span><span class="n">LookupByName</span><span class="p">(</span><span class="n">type_name</span><span class="p">)</span>
+        <span class="n">info</span> <span class="o">=</span> <span class="n">TypeId</span><span class="o">.</span><span class="n">AttributeInformation</span><span class="p">()</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">tid</span><span class="o">.</span><span class="n">LookupAttributeByName</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">info</span><span class="p">):</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;TypeId </span><span class="si">%s</span><span class="s"> has no attribute </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">type_name</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span> 
+            <span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+
+        <span class="n">str_value</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
+        <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">bool</span><span class="p">):</span>
+            <span class="n">str_value</span> <span class="o">=</span> <span class="n">str_value</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
+
+        <span class="n">checker</span> <span class="o">=</span> <span class="n">info</span><span class="o">.</span><span class="n">checker</span>
+        <span class="n">ns3_value</span> <span class="o">=</span> <span class="n">checker</span><span class="o">.</span><span class="n">Create</span><span class="p">()</span>
+        <span class="n">ns3_value</span><span class="o">.</span><span class="n">DeserializeFromString</span><span class="p">(</span><span class="n">str_value</span><span class="p">,</span> <span class="n">checker</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">ns3_value</span>
+
+    <span class="c"># singletons are identified as &quot;ns3::ClassName&quot;</span>
+    <span class="k">def</span> <span class="nf">_singleton</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ident</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">ident</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">SINGLETON</span><span class="p">):</span>
+            <span class="k">return</span> <span class="bp">None</span>
+
+        <span class="n">clazzname</span> <span class="o">=</span> <span class="n">ident</span><span class="p">[</span><span class="n">ident</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&quot;::&quot;</span><span class="p">)</span><span class="o">+</span><span class="mi">2</span><span class="p">:]</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ns3</span><span class="p">,</span> <span class="n">clazzname</span><span class="p">):</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Type </span><span class="si">%s</span><span class="s"> not supported&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">clazzname</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ns3</span><span class="p">,</span> <span class="n">clazzname</span><span class="p">)</span>
+
+    <span class="c"># replace uuids and singleton references for the real objects</span>
+<div class="viewcode-block" id="NS3Wrapper.replace_args"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.NS3Wrapper.replace_args">[docs]</a>    <span class="k">def</span> <span class="nf">replace_args</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
+        <span class="n">realargs</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">get_object</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span> <span class="k">if</span> \
+                <span class="nb">str</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&quot;uuid&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="n">arg</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">args</span><span class="p">]</span>
+        <span class="n">realargs</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_singleton</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span> <span class="k">if</span> \
+                <span class="nb">str</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">SINGLETON</span><span class="p">)</span> <span class="k">else</span> <span class="n">arg</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">realargs</span><span class="p">]</span>
+
+        <span class="k">return</span> <span class="n">realargs</span>
+
+    <span class="c"># replace uuids and singleton references for the real objects</span></div>
+<div class="viewcode-block" id="NS3Wrapper.replace_kwargs"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.NS3Wrapper.replace_kwargs">[docs]</a>    <span class="k">def</span> <span class="nf">replace_kwargs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">):</span>
+        <span class="n">realkwargs</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">([(</span><span class="n">k</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_object</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> \
+                <span class="k">if</span> <span class="nb">str</span><span class="p">(</span><span class="n">v</span><span class="p">)</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&quot;uuid&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="n">v</span><span class="p">)</span> \
+                <span class="k">for</span> <span class="n">k</span><span class="p">,</span><span class="n">v</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">iteritems</span><span class="p">()])</span>
+        <span class="n">realkwargs</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">([(</span><span class="n">k</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_singleton</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> \
+                <span class="k">if</span> <span class="nb">str</span><span class="p">(</span><span class="n">v</span><span class="p">)</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">SINGLETON</span><span class="p">)</span> <span class="k">else</span> <span class="n">v</span> <span class="p">)</span>\
+                <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">realkwargs</span><span class="o">.</span><span class="n">iteritems</span><span class="p">()])</span>
+
+        <span class="k">return</span> <span class="n">realkwargs</span>
+</div>
+    <span class="k">def</span> <span class="nf">_is_app_running</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">uuid</span><span class="p">):</span>
+        <span class="n">now</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ns3</span><span class="o">.</span><span class="n">Simulator</span><span class="o">.</span><span class="n">Now</span><span class="p">()</span>
+        <span class="k">if</span> <span class="n">now</span><span class="o">.</span><span class="n">IsZero</span><span class="p">():</span>
+            <span class="k">return</span> <span class="bp">False</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ns3</span><span class="o">.</span><span class="n">Simulator</span><span class="o">.</span><span class="n">IsFinished</span><span class="p">():</span>
+            <span class="k">return</span> <span class="bp">False</span>
+
+        <span class="n">app</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_object</span><span class="p">(</span><span class="n">uuid</span><span class="p">)</span>
+        <span class="n">stop_time_value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ns3</span><span class="o">.</span><span class="n">TimeValue</span><span class="p">()</span>
+        <span class="n">app</span><span class="o">.</span><span class="n">GetAttribute</span><span class="p">(</span><span class="s">&quot;StopTime&quot;</span><span class="p">,</span> <span class="n">stop_time_value</span><span class="p">)</span>
+        <span class="n">stop_time</span> <span class="o">=</span> <span class="n">stop_time_value</span><span class="o">.</span><span class="n">Get</span><span class="p">()</span>
+
+        <span class="n">start_time_value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ns3</span><span class="o">.</span><span class="n">TimeValue</span><span class="p">()</span>
+        <span class="n">app</span><span class="o">.</span><span class="n">GetAttribute</span><span class="p">(</span><span class="s">&quot;StartTime&quot;</span><span class="p">,</span> <span class="n">start_time_value</span><span class="p">)</span>
+        <span class="n">start_time</span> <span class="o">=</span> <span class="n">start_time_value</span><span class="o">.</span><span class="n">Get</span><span class="p">()</span>
+        
+        <span class="k">if</span> <span class="n">now</span><span class="o">.</span><span class="n">Compare</span><span class="p">(</span><span class="n">start_time</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mi">0</span><span class="p">:</span>
+            <span class="k">if</span> <span class="n">stop_time</span><span class="o">.</span><span class="n">IsZero</span><span class="p">()</span> <span class="ow">or</span> <span class="n">now</span><span class="o">.</span><span class="n">Compare</span><span class="p">(</span><span class="n">stop_time</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">:</span>
+                <span class="k">return</span> <span class="bp">True</span>
+
+        <span class="k">return</span> <span class="bp">False</span>
+    
+    <span class="k">def</span> <span class="nf">_is_app_started</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">uuid</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_is_app_running</span><span class="p">(</span><span class="n">uuid</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_finished</span>
+
+    <span class="k">def</span> <span class="nf">_add_static_route</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ipv4_uuid</span><span class="p">,</span> <span class="n">network</span><span class="p">,</span> <span class="n">prefix</span><span class="p">,</span> <span class="n">nexthop</span><span class="p">):</span>
+        <span class="n">ipv4</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_object</span><span class="p">(</span><span class="n">ipv4_uuid</span><span class="p">)</span>
+
+        <span class="n">list_routing</span> <span class="o">=</span> <span class="n">ipv4</span><span class="o">.</span><span class="n">GetRoutingProtocol</span><span class="p">()</span>
+        <span class="p">(</span><span class="n">static_routing</span><span class="p">,</span> <span class="n">priority</span><span class="p">)</span> <span class="o">=</span> <span class="n">list_routing</span><span class="o">.</span><span class="n">GetRoutingProtocol</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+
+        <span class="n">ifindex</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_ifindex</span><span class="p">(</span><span class="n">ipv4</span><span class="p">,</span> <span class="n">nexthop</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">ifindex</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
+            <span class="k">return</span> <span class="bp">False</span>
+        
+        <span class="n">nexthop</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ns3</span><span class="o">.</span><span class="n">Ipv4Address</span><span class="p">(</span><span class="n">nexthop</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">network</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&quot;0.0.0.0&quot;</span><span class="p">,</span> <span class="s">&quot;0&quot;</span><span class="p">,</span> <span class="bp">None</span><span class="p">]:</span>
+            <span class="c"># Default route: 0.0.0.0/0</span>
+            <span class="n">static_routing</span><span class="o">.</span><span class="n">SetDefaultRoute</span><span class="p">(</span><span class="n">nexthop</span><span class="p">,</span> <span class="n">ifindex</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">mask</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ns3</span><span class="o">.</span><span class="n">Ipv4Mask</span><span class="p">(</span><span class="s">&quot;/</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">prefix</span><span class="p">)</span> 
+            <span class="n">network</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ns3</span><span class="o">.</span><span class="n">Ipv4Address</span><span class="p">(</span><span class="n">network</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="n">prefix</span> <span class="o">==</span> <span class="mi">32</span><span class="p">:</span>
+                <span class="c"># Host route: x.y.z.w/32</span>
+                <span class="n">static_routing</span><span class="o">.</span><span class="n">AddHostRouteTo</span><span class="p">(</span><span class="n">network</span><span class="p">,</span> <span class="n">nexthop</span><span class="p">,</span> <span class="n">ifindex</span><span class="p">)</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="c"># Network route: x.y.z.w/n</span>
+                <span class="n">static_routing</span><span class="o">.</span><span class="n">AddNetworkRouteTo</span><span class="p">(</span><span class="n">network</span><span class="p">,</span> <span class="n">mask</span><span class="p">,</span> <span class="n">nexthop</span><span class="p">,</span> 
+                        <span class="n">ifindex</span><span class="p">)</span> 
+        <span class="k">return</span> <span class="bp">True</span>
+
+    <span class="k">def</span> <span class="nf">_find_ifindex</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ipv4</span><span class="p">,</span> <span class="n">nexthop</span><span class="p">):</span>
+        <span class="n">ifindex</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
+
+        <span class="n">nexthop</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ns3</span><span class="o">.</span><span class="n">Ipv4Address</span><span class="p">(</span><span class="n">nexthop</span><span class="p">)</span>
+
+        <span class="c"># For all the interfaces registered with the ipv4 object, find</span>
+        <span class="c"># the one that matches the network of the nexthop</span>
+        <span class="n">nifaces</span> <span class="o">=</span> <span class="n">ipv4</span><span class="o">.</span><span class="n">GetNInterfaces</span><span class="p">()</span>
+        <span class="k">for</span> <span class="n">ifidx</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="n">nifaces</span><span class="p">):</span>
+            <span class="n">iface</span> <span class="o">=</span> <span class="n">ipv4</span><span class="o">.</span><span class="n">GetInterface</span><span class="p">(</span><span class="n">ifidx</span><span class="p">)</span>
+            <span class="n">naddress</span> <span class="o">=</span> <span class="n">iface</span><span class="o">.</span><span class="n">GetNAddresses</span><span class="p">()</span>
+            <span class="k">for</span> <span class="n">addridx</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="n">naddress</span><span class="p">):</span>
+                <span class="n">ifaddr</span> <span class="o">=</span> <span class="n">iface</span><span class="o">.</span><span class="n">GetAddress</span><span class="p">(</span><span class="n">addridx</span><span class="p">)</span>
+                <span class="n">ifmask</span> <span class="o">=</span> <span class="n">ifaddr</span><span class="o">.</span><span class="n">GetMask</span><span class="p">()</span>
+                
+                <span class="n">ifindex</span> <span class="o">=</span> <span class="n">ipv4</span><span class="o">.</span><span class="n">GetInterfaceForPrefix</span><span class="p">(</span><span class="n">nexthop</span><span class="p">,</span> <span class="n">ifmask</span><span class="p">)</span>
+
+                <span class="k">if</span> <span class="n">ifindex</span> <span class="o">==</span> <span class="n">ifidx</span><span class="p">:</span>
+                    <span class="k">return</span> <span class="n">ifindex</span>
+        <span class="k">return</span> <span class="n">ifindex</span>
+
+    <span class="k">def</span> <span class="nf">_retrieve_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">uuid</span><span class="p">,</span> <span class="n">typeid</span><span class="p">,</span> <span class="n">search</span> <span class="o">=</span> <span class="bp">False</span><span class="p">):</span>
+        <span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_object</span><span class="p">(</span><span class="n">uuid</span><span class="p">)</span>
+
+        <span class="n">type_id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ns3</span><span class="o">.</span><span class="n">TypeId</span><span class="p">()</span>
+        <span class="n">tid</span> <span class="o">=</span> <span class="n">type_id</span><span class="o">.</span><span class="n">LookupByName</span><span class="p">(</span><span class="n">typeid</span><span class="p">)</span>
+        <span class="n">nobj</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">GetObject</span><span class="p">(</span><span class="n">tid</span><span class="p">)</span>
+
+        <span class="n">newuuid</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="k">if</span> <span class="n">search</span><span class="p">:</span>
+            <span class="c"># search object</span>
+            <span class="k">for</span> <span class="n">ouuid</span><span class="p">,</span> <span class="n">oobj</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_objects</span><span class="o">.</span><span class="n">iteritems</span><span class="p">():</span>
+                <span class="k">if</span> <span class="n">nobj</span> <span class="o">==</span> <span class="n">oobj</span><span class="p">:</span>
+                    <span class="n">newuuid</span> <span class="o">=</span> <span class="n">ouuid</span>
+                    <span class="k">break</span>
+        <span class="k">else</span><span class="p">:</span> 
+            <span class="n">newuuid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">make_uuid</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_objects</span><span class="p">[</span><span class="n">newuuid</span><span class="p">]</span> <span class="o">=</span> <span class="n">nobj</span>
+
+        <span class="k">return</span> <span class="n">newuuid</span>
+
+    <span class="k">def</span> <span class="nf">_recv_fd</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">uuid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Waits on a local address to receive a file descriptor</span>
+<span class="sd">        from a local process. The file descriptor is associated</span>
+<span class="sd">        to a FdNetDevice to stablish communication between the</span>
+<span class="sd">        simulation and what ever process writes on that file descriptor</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+
+        <span class="k">def</span> <span class="nf">recvfd</span><span class="p">(</span><span class="n">sock</span><span class="p">,</span> <span class="n">fdnd</span><span class="p">):</span>
+            <span class="p">(</span><span class="n">fd</span><span class="p">,</span> <span class="n">msg</span><span class="p">)</span> <span class="o">=</span> <span class="n">passfd</span><span class="o">.</span><span class="n">recvfd</span><span class="p">(</span><span class="n">sock</span><span class="p">)</span>
+            <span class="c"># Store a reference to the endpoint to keep the socket alive</span>
+            <span class="n">fdnd</span><span class="o">.</span><span class="n">SetFileDescriptor</span><span class="p">(</span><span class="n">fd</span><span class="p">)</span>
+        
+        <span class="kn">import</span> <span class="nn">passfd</span>
+        <span class="kn">import</span> <span class="nn">socket</span>
+        <span class="n">sock</span> <span class="o">=</span> <span class="n">socket</span><span class="o">.</span><span class="n">socket</span><span class="p">(</span><span class="n">socket</span><span class="o">.</span><span class="n">AF_UNIX</span><span class="p">,</span> <span class="n">socket</span><span class="o">.</span><span class="n">SOCK_DGRAM</span><span class="p">)</span>
+        <span class="n">sock</span><span class="o">.</span><span class="n">bind</span><span class="p">(</span><span class="s">&quot;&quot;</span><span class="p">)</span>
+        <span class="n">address</span> <span class="o">=</span> <span class="n">sock</span><span class="o">.</span><span class="n">getsockname</span><span class="p">()</span>
+        
+        <span class="n">fdnd</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_object</span><span class="p">(</span><span class="n">uuid</span><span class="p">)</span>
+        <span class="n">t</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Thread</span><span class="p">(</span><span class="n">target</span><span class="o">=</span><span class="n">recvfd</span><span class="p">,</span> <span class="n">args</span><span class="o">=</span><span class="p">(</span><span class="n">sock</span><span class="p">,</span><span class="n">fdnd</span><span class="p">))</span>
+        <span class="n">t</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
+
+        <span class="k">return</span> <span class="n">address</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3wrapper_debug.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/ns3wrapper_debug.html
new file mode 100644 (file)
index 0000000..fe27b39
--- /dev/null
@@ -0,0 +1,271 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.ns3wrapper_debug &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.ns3wrapper_debug</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+
+<span class="c">############ METHODS DEBUG NS3WRAPPER EXECUTION</span>
+<span class="c">##</span>
+<span class="c">## The ns3wrapper works in ditributed mode, receiving instructions from</span>
+<span class="c">## a remote client. This makes it very hard to debug scripting errors </span>
+<span class="c">## in the client side. To simplify error debugging, when set to debug mode,</span>
+<span class="c">## the ns3wrapper dumps every executed line to a script that can be then</span>
+<span class="c">## executed locally to reproduce and debug the experiment.</span>
+<span class="c">##</span>
+<span class="c">###########################################################################</span>
+
+<span class="kn">import</span> <span class="nn">logging</span>
+
+<span class="n">SINGLETON</span> <span class="o">=</span> <span class="s">&quot;singleton::&quot;</span>
+
+<div class="viewcode-block" id="NS3WrapperDebuger"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger">[docs]</a><span class="k">class</span> <span class="nc">NS3WrapperDebuger</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">enabled</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">NS3WrapperDebuger</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_enabled</span> <span class="o">=</span> <span class="n">enabled</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_script_path</span> <span class="o">=</span> <span class="s">&quot;debug.py&quot;</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">dump_header</span><span class="p">()</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3WrapperDebuger.enabled"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.enabled">[docs]</a>    <span class="k">def</span> <span class="nf">enabled</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_enabled</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NS3WrapperDebuger.script_path"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.script_path">[docs]</a>    <span class="k">def</span> <span class="nf">script_path</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_script_path</span>
+</div>
+<div class="viewcode-block" id="NS3WrapperDebuger.dump_to_script"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.dump_to_script">[docs]</a>    <span class="k">def</span> <span class="nf">dump_to_script</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">command</span><span class="p">):</span>
+        <span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">script_path</span><span class="p">,</span> <span class="s">&quot;a&quot;</span><span class="p">)</span>
+        <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s">&quot;</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
+        <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="NS3WrapperDebuger.dump_header"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.dump_header">[docs]</a>    <span class="k">def</span> <span class="nf">dump_header</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">enabled</span><span class="p">:</span>
+            <span class="k">return</span>
+
+        <span class="n">header</span> <span class="o">=</span> <span class="s">&quot;&quot;&quot;</span>
+<span class="s">from ns3wrapper import NS3Wrapper</span>
+
+<span class="s">wrapper = NS3Wrapper()</span>
+
+<span class="s">&quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">dump_to_script</span><span class="p">(</span><span class="n">header</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NS3WrapperDebuger.dump_factory"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.dump_factory">[docs]</a>    <span class="k">def</span> <span class="nf">dump_factory</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">uuid</span><span class="p">,</span> <span class="n">type_name</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">enabled</span><span class="p">:</span>
+            <span class="k">return</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="p">(</span><span class="s">&quot;kwargs = </span><span class="si">%(kwargs)s</span><span class="se">\n</span><span class="s">&quot;</span>
+                <span class="s">&quot;</span><span class="si">%(uuid)s</span><span class="s"> = wrapper.factory(</span><span class="si">%(type_name)s</span><span class="s">, **kwargs)</span><span class="se">\n\n</span><span class="s">&quot;</span> 
+                <span class="p">)</span> <span class="o">%</span> <span class="nb">dict</span><span class="p">({</span>
+                 <span class="s">&quot;uuid&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_value</span><span class="p">(</span><span class="n">uuid</span><span class="p">),</span>
+                 <span class="s">&quot;type_name&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_value</span><span class="p">(</span><span class="n">type_name</span><span class="p">),</span>
+                 <span class="s">&quot;kwargs&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_kwargs</span><span class="p">(</span><span class="n">kwargs</span><span class="p">)</span>
+                <span class="p">})</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">dump_to_script</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NS3WrapperDebuger.dump_create"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.dump_create">[docs]</a>    <span class="k">def</span> <span class="nf">dump_create</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">uuid</span><span class="p">,</span> <span class="n">clazzname</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">enabled</span><span class="p">:</span>
+            <span class="k">return</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="p">(</span><span class="s">&quot;args = </span><span class="si">%(args)s</span><span class="se">\n</span><span class="s">&quot;</span>
+                <span class="s">&quot;</span><span class="si">%(uuid)s</span><span class="s"> = wrapper.create(</span><span class="si">%(clazzname)s</span><span class="s">, *args)</span><span class="se">\n\n</span><span class="s">&quot;</span> 
+                <span class="p">)</span> <span class="o">%</span> <span class="nb">dict</span><span class="p">({</span>
+                 <span class="s">&quot;uuid&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_value</span><span class="p">(</span><span class="n">uuid</span><span class="p">),</span>
+                 <span class="s">&quot;clazzname&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_value</span><span class="p">(</span><span class="n">clazzname</span><span class="p">),</span>
+                 <span class="s">&quot;args&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">args</span><span class="p">),</span>
+                <span class="p">})</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">dump_to_script</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NS3WrapperDebuger.dump_invoke"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.dump_invoke">[docs]</a>    <span class="k">def</span> <span class="nf">dump_invoke</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">newuuid</span><span class="p">,</span> <span class="n">uuid</span><span class="p">,</span> <span class="n">operation</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">enabled</span><span class="p">:</span>
+            <span class="k">return</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="p">(</span><span class="s">&quot;args = </span><span class="si">%(args)s</span><span class="se">\n</span><span class="s">&quot;</span>
+                   <span class="s">&quot;kwargs = </span><span class="si">%(kwargs)s</span><span class="se">\n</span><span class="s">&quot;</span>
+                   <span class="s">&quot;</span><span class="si">%(newuuid)s</span><span class="s"> = wrapper.invoke(</span><span class="si">%(uuid)s</span><span class="s">, </span><span class="si">%(operation)s</span><span class="s">, *args, **kwargs)</span><span class="se">\n\n</span><span class="s">&quot;</span> 
+                <span class="p">)</span> <span class="o">%</span> <span class="nb">dict</span><span class="p">({</span>
+                 <span class="s">&quot;newuuid&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_value</span><span class="p">(</span><span class="n">newuuid</span><span class="p">)</span> <span class="k">if</span> <span class="n">newuuid</span> <span class="k">else</span> <span class="s">&quot;nothing&quot;</span><span class="p">,</span>
+                 <span class="s">&quot;uuid&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_value</span><span class="p">(</span><span class="n">uuid</span><span class="p">),</span>
+                 <span class="s">&quot;operation&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_value</span><span class="p">(</span><span class="n">operation</span><span class="p">),</span>
+                 <span class="s">&quot;args&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">args</span><span class="p">),</span>
+                 <span class="s">&quot;kwargs&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_kwargs</span><span class="p">(</span><span class="n">kwargs</span><span class="p">),</span>
+                <span class="p">})</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">dump_to_script</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NS3WrapperDebuger.dump_set"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.dump_set">[docs]</a>    <span class="k">def</span> <span class="nf">dump_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">uuid</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">enabled</span><span class="p">:</span>
+            <span class="k">return</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="p">(</span><span class="s">&quot;wrapper.set(</span><span class="si">%(uuid)s</span><span class="s">, </span><span class="si">%(name)s</span><span class="s">, </span><span class="si">%(value)s</span><span class="s">)</span><span class="se">\n\n</span><span class="s">&quot;</span> 
+                <span class="p">)</span> <span class="o">%</span> <span class="nb">dict</span><span class="p">({</span>
+                 <span class="s">&quot;uuid&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_value</span><span class="p">(</span><span class="n">uuid</span><span class="p">),</span>
+                 <span class="s">&quot;name&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_value</span><span class="p">(</span><span class="n">name</span><span class="p">),</span>
+                 <span class="s">&quot;value&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_value</span><span class="p">(</span><span class="n">value</span><span class="p">),</span>
+                <span class="p">})</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">dump_to_script</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NS3WrapperDebuger.dump_get"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.dump_get">[docs]</a>    <span class="k">def</span> <span class="nf">dump_get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">uuid</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">enabled</span><span class="p">:</span>
+            <span class="k">return</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="p">(</span><span class="s">&quot;wrapper.get(</span><span class="si">%(uuid)s</span><span class="s">, </span><span class="si">%(name)s</span><span class="s">)</span><span class="se">\n\n</span><span class="s">&quot;</span> 
+                <span class="p">)</span> <span class="o">%</span> <span class="nb">dict</span><span class="p">({</span>
+                 <span class="s">&quot;uuid&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_value</span><span class="p">(</span><span class="n">uuid</span><span class="p">),</span>
+                 <span class="s">&quot;name&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_value</span><span class="p">(</span><span class="n">name</span><span class="p">),</span>
+                <span class="p">})</span>
+        
+        <span class="bp">self</span><span class="o">.</span><span class="n">dump_to_script</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NS3WrapperDebuger.dump_start"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.dump_start">[docs]</a>    <span class="k">def</span> <span class="nf">dump_start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">enabled</span><span class="p">:</span>
+            <span class="k">return</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot;wrapper.start()</span><span class="se">\n\n</span><span class="s">&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">dump_to_script</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NS3WrapperDebuger.dump_stop"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.dump_stop">[docs]</a>    <span class="k">def</span> <span class="nf">dump_stop</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">time</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">enabled</span><span class="p">:</span>
+            <span class="k">return</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="p">(</span><span class="s">&quot;wrapper.stop(time=</span><span class="si">%(time)s</span><span class="s">)</span><span class="se">\n\n</span><span class="s">&quot;</span> 
+                <span class="p">)</span> <span class="o">%</span> <span class="nb">dict</span><span class="p">({</span>
+                 <span class="s">&quot;time&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_value</span><span class="p">(</span><span class="n">time</span><span class="p">)</span> <span class="k">if</span> <span class="n">time</span> <span class="k">else</span> <span class="s">&quot;None&quot;</span><span class="p">,</span>
+                <span class="p">})</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">dump_to_script</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NS3WrapperDebuger.dump_shutdown"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.dump_shutdown">[docs]</a>    <span class="k">def</span> <span class="nf">dump_shutdown</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">enabled</span><span class="p">:</span>
+            <span class="k">return</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot;wrapper.shutdown()</span><span class="se">\n\n</span><span class="s">&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">dump_to_script</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NS3WrapperDebuger.format_value"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.format_value">[docs]</a>    <span class="k">def</span> <span class="nf">format_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
+        <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="ow">and</span> <span class="n">value</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&quot;uuid&quot;</span><span class="p">):</span>
+            <span class="k">return</span> <span class="n">value</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;-&quot;</span><span class="p">,</span> <span class="s">&quot;&quot;</span><span class="p">)</span>
+
+        <span class="kn">import</span> <span class="nn">pprint</span> 
+        <span class="k">return</span> <span class="n">pprint</span><span class="o">.</span><span class="n">pformat</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NS3WrapperDebuger.format_args"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.format_args">[docs]</a>    <span class="k">def</span> <span class="nf">format_args</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
+        <span class="n">fargs</span> <span class="o">=</span> <span class="nb">map</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">format_value</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
+        <span class="k">return</span> <span class="s">&quot;[</span><span class="si">%s</span><span class="s">]&quot;</span> <span class="o">%</span> <span class="s">&quot;,&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">fargs</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NS3WrapperDebuger.format_kwargs"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.format_kwargs">[docs]</a>    <span class="k">def</span> <span class="nf">format_kwargs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">):</span>
+        <span class="n">fkwargs</span> <span class="o">=</span> <span class="nb">map</span><span class="p">(</span><span class="k">lambda</span> <span class="p">(</span><span class="n">k</span><span class="p">,</span><span class="n">w</span><span class="p">):</span> 
+               <span class="s">&quot;</span><span class="si">%s</span><span class="s">: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">format_value</span><span class="p">(</span><span class="n">k</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_value</span><span class="p">(</span><span class="n">w</span><span class="p">)),</span> 
+            <span class="n">kwargs</span><span class="o">.</span><span class="n">iteritems</span><span class="p">())</span>
+        
+        <span class="k">return</span>  <span class="s">&quot;dict({</span><span class="si">%s</span><span class="s">})&quot;</span> <span class="o">%</span> <span class="s">&quot;,&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">fkwargs</span><span class="p">)</span>
+        </div></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/ns3/resource_manager_generator.html b/doc/sphinx/_build/html/_modules/nepi/resources/ns3/resource_manager_generator.html
new file mode 100644 (file)
index 0000000..b47faba
--- /dev/null
@@ -0,0 +1,330 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.ns3.resource_manager_generator &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.ns3.resource_manager_generator</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="c">#</span>
+<span class="c"># Instructions to automatically generate ns-3 ResourceManagers</span>
+<span class="c"># </span>
+<span class="c"># Configure the ns-3 enviorment (e.g.):</span>
+<span class="c">#</span>
+<span class="c">#  export PYTHONPATH=~/.nepi/nepi-usr/bin/ns-3/ns-3.20/optimized/build/lib/python/site-packages</span>
+<span class="c">#  export LD_LIBRARY_PATH=~/.nepi/nepi-usr/bin/ns-3/ns-3.20/optimized/build/lib</span>
+<span class="c">#</span>
+<span class="c"># Run the RM generator:</span>
+<span class="c">#</span>
+<span class="c">#  PYTHONPATH=$PYTHONPATH:~/repos/nepi/src python src/nepi/resources/ns3/resource_manager_generator.py</span>
+<span class="c">#</span>
+
+<span class="c"># Force the load of ns3 libraries</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3wrapper</span> <span class="kn">import</span> <span class="n">load_ns3_module</span>
+
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">re</span>
+
+<span class="n">adapted_types</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;ns3::Node&quot;</span><span class="p">,</span>
+        <span class="s">&quot;ns3::Icmpv4L4Protocol&quot;</span><span class="p">,</span>
+        <span class="s">&quot;ns3::ArpL3Protocol&quot;</span><span class="p">,</span>
+        <span class="s">&quot;ns3::Ipv4L3Protocol&quot;</span><span class="p">,</span>
+        <span class="s">&quot;ns3::PropagationLossModel&quot;</span><span class="p">,</span>
+        <span class="s">&quot;ns3::MobilityModel&quot;</span><span class="p">,</span>
+        <span class="s">&quot;ns3::PropagationDelayModel&quot;</span><span class="p">,</span>
+        <span class="s">&quot;ns3::WifiRemoteStationManager&quot;</span><span class="p">,</span>
+        <span class="s">&quot;ns3::WifiNetDevice&quot;</span><span class="p">,</span>
+        <span class="s">&quot;ns3::WifiChannel&quot;</span><span class="p">,</span>
+        <span class="s">&quot;ns3::WifiPhy&quot;</span><span class="p">,</span>
+        <span class="s">&quot;ns3::WifiMac&quot;</span><span class="p">,</span>
+        <span class="s">&quot;ns3::ErrorModel&quot;</span><span class="p">,</span>
+        <span class="s">&quot;ns3::ErrorRateModel&quot;</span><span class="p">,</span>
+        <span class="s">&quot;ns3::Application&quot;</span><span class="p">,</span> 
+        <span class="s">&quot;ns3::FdNetDevice&quot;</span><span class="p">,</span>
+        <span class="c">#&quot;ns3::DceApplication&quot;, </span>
+        <span class="s">&quot;ns3::NetDevice&quot;</span><span class="p">,</span>
+        <span class="s">&quot;ns3::Channel&quot;</span><span class="p">,</span>
+        <span class="s">&quot;ns3::Queue&quot;</span><span class="p">]</span>
+
+<span class="n">base_types</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;ns3::IpL4Protocol&quot;</span><span class="p">]</span>
+
+<div class="viewcode-block" id="select_base_class"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.resource_manager_generator.select_base_class">[docs]</a><span class="k">def</span> <span class="nf">select_base_class</span><span class="p">(</span><span class="n">ns3</span><span class="p">,</span> <span class="n">tid</span><span class="p">):</span> 
+    <span class="n">base_class_import</span> <span class="o">=</span> <span class="bp">None</span>
+    <span class="n">base_class</span> <span class="o">=</span> <span class="bp">None</span>
+   
+    <span class="n">rtype</span> <span class="o">=</span> <span class="n">tid</span><span class="o">.</span><span class="n">GetName</span><span class="p">()</span>
+
+    <span class="n">type_id</span> <span class="o">=</span> <span class="n">ns3</span><span class="o">.</span><span class="n">TypeId</span><span class="p">()</span>
+
+    <span class="k">for</span> <span class="n">type_name</span> <span class="ow">in</span> <span class="n">adapted_types</span><span class="p">:</span>
+        <span class="n">tid_base</span> <span class="o">=</span> <span class="n">type_id</span><span class="o">.</span><span class="n">LookupByName</span><span class="p">(</span><span class="n">type_name</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">type_name</span> <span class="o">==</span> <span class="n">rtype</span> <span class="ow">or</span> <span class="n">tid</span><span class="o">.</span><span class="n">IsChildOf</span><span class="p">(</span><span class="n">tid_base</span><span class="p">):</span>
+            <span class="n">base_class</span> <span class="o">=</span> <span class="s">&quot;NS3Base&quot;</span> <span class="o">+</span> <span class="n">type_name</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;ns3::&quot;</span><span class="p">,</span> <span class="s">&quot;&quot;</span><span class="p">)</span>
+            <span class="n">base_module</span> <span class="o">=</span> <span class="s">&quot;ns3&quot;</span> <span class="o">+</span> <span class="n">type_name</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;ns3::&quot;</span><span class="p">,</span> <span class="s">&quot;&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
+            <span class="n">base_class_import</span> <span class="o">=</span> <span class="s">&quot;from nepi.resources.ns3.</span><span class="si">%s</span><span class="s"> import </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="p">(</span>
+                    <span class="n">base_module</span><span class="p">,</span> <span class="n">base_class</span><span class="p">)</span>
+            <span class="k">return</span> <span class="p">(</span><span class="n">base_class_import</span><span class="p">,</span> <span class="n">base_class</span><span class="p">)</span>
+
+    <span class="n">base_class_import</span> <span class="o">=</span> <span class="s">&quot;from nepi.resources.ns3.ns3base import NS3Base&quot;</span>
+    <span class="n">base_class</span> <span class="o">=</span> <span class="s">&quot;NS3Base&quot;</span>
+
+    <span class="k">for</span> <span class="n">type_name</span> <span class="ow">in</span> <span class="n">base_types</span><span class="p">:</span>
+        <span class="n">tid_base</span> <span class="o">=</span> <span class="n">type_id</span><span class="o">.</span><span class="n">LookupByName</span><span class="p">(</span><span class="n">type_name</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">type_name</span> <span class="o">==</span> <span class="n">rtype</span> <span class="ow">or</span> <span class="n">tid</span><span class="o">.</span><span class="n">IsChildOf</span><span class="p">(</span><span class="n">tid_base</span><span class="p">):</span>
+            <span class="k">return</span> <span class="p">(</span><span class="n">base_class_import</span><span class="p">,</span> <span class="n">base_class</span><span class="p">)</span>
+
+    <span class="k">return</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="create_ns3_rms"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.resource_manager_generator.create_ns3_rms">[docs]</a><span class="k">def</span> <span class="nf">create_ns3_rms</span><span class="p">():</span>
+    <span class="n">ns3</span> <span class="o">=</span> <span class="n">load_ns3_module</span><span class="p">()</span>
+
+    <span class="n">type_id</span> <span class="o">=</span> <span class="n">ns3</span><span class="o">.</span><span class="n">TypeId</span><span class="p">()</span>
+    
+    <span class="n">tid_count</span> <span class="o">=</span> <span class="n">type_id</span><span class="o">.</span><span class="n">GetRegisteredN</span><span class="p">()</span>
+    <span class="n">base</span> <span class="o">=</span> <span class="n">type_id</span><span class="o">.</span><span class="n">LookupByName</span><span class="p">(</span><span class="s">&quot;ns3::Object&quot;</span><span class="p">)</span>
+
+    <span class="c"># Create a .py file using the ns-3 RM template for each ns-3 TypeId</span>
+    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="n">tid_count</span><span class="p">):</span>
+        <span class="n">tid</span> <span class="o">=</span> <span class="n">type_id</span><span class="o">.</span><span class="n">GetRegistered</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
+        
+        <span class="p">(</span><span class="n">base_class_import</span><span class="p">,</span> <span class="n">base_class</span><span class="p">)</span> <span class="o">=</span> <span class="n">select_base_class</span><span class="p">(</span><span class="n">ns3</span><span class="p">,</span> <span class="n">tid</span><span class="p">)</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">base_class</span><span class="p">:</span>
+            <span class="k">continue</span>
+        
+        <span class="k">if</span> <span class="n">tid</span><span class="o">.</span><span class="n">MustHideFromDocumentation</span><span class="p">()</span> <span class="ow">or</span> \
+                <span class="ow">not</span> <span class="n">tid</span><span class="o">.</span><span class="n">HasConstructor</span><span class="p">()</span> <span class="ow">or</span> \
+                <span class="ow">not</span> <span class="n">tid</span><span class="o">.</span><span class="n">IsChildOf</span><span class="p">(</span><span class="n">base</span><span class="p">):</span> 
+            <span class="k">continue</span>
+       
+        <span class="n">attributes</span> <span class="o">=</span> <span class="n">template_attributes</span><span class="p">(</span><span class="n">ns3</span><span class="p">,</span> <span class="n">tid</span><span class="p">)</span>
+        <span class="n">traces</span> <span class="o">=</span> <span class="n">template_traces</span><span class="p">(</span><span class="n">ns3</span><span class="p">,</span> <span class="n">tid</span><span class="p">)</span>
+        <span class="n">ptid</span> <span class="o">=</span> <span class="n">tid</span>
+        <span class="k">while</span> <span class="n">ptid</span><span class="o">.</span><span class="n">HasParent</span><span class="p">():</span>
+            <span class="n">ptid</span> <span class="o">=</span> <span class="n">ptid</span><span class="o">.</span><span class="n">GetParent</span><span class="p">()</span>
+            <span class="n">attributes</span> <span class="o">+=</span> <span class="n">template_attributes</span><span class="p">(</span><span class="n">ns3</span><span class="p">,</span> <span class="n">ptid</span><span class="p">)</span>
+            <span class="n">traces</span> <span class="o">+=</span> <span class="n">template_traces</span><span class="p">(</span><span class="n">ns3</span><span class="p">,</span> <span class="n">ptid</span><span class="p">)</span>
+
+        <span class="n">attributes</span> <span class="o">=</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">+</span> <span class="n">attributes</span> <span class="k">if</span> <span class="n">attributes</span> <span class="k">else</span> <span class="s">&quot;pass&quot;</span>
+        <span class="n">traces</span> <span class="o">=</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">+</span> <span class="n">traces</span> <span class="k">if</span> <span class="n">traces</span> <span class="k">else</span> <span class="s">&quot;pass&quot;</span>
+
+        <span class="n">category</span> <span class="o">=</span> <span class="n">tid</span><span class="o">.</span><span class="n">GetGroupName</span><span class="p">()</span>
+
+        <span class="n">rtype</span> <span class="o">=</span> <span class="n">tid</span><span class="o">.</span><span class="n">GetName</span><span class="p">()</span>
+        <span class="n">classname</span> <span class="o">=</span> <span class="n">rtype</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;ns3::&quot;</span><span class="p">,</span> <span class="s">&quot;NS3&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;::&quot;</span><span class="p">,</span><span class="s">&quot;&quot;</span><span class="p">)</span>
+        <span class="n">uncamm_rtype</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s">&#39;([a-z])([A-Z])&#39;</span><span class="p">,</span> <span class="s">r&#39;\1-\2&#39;</span><span class="p">,</span> <span class="n">rtype</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
+        <span class="n">short_rtype</span> <span class="o">=</span> <span class="n">uncamm_rtype</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;::&quot;</span><span class="p">,</span><span class="s">&quot;-&quot;</span><span class="p">)</span>
+
+        <span class="n">d</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">realpath</span><span class="p">(</span><span class="n">__file__</span><span class="p">))</span>
+        <span class="n">ftemp</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="s">&quot;templates&quot;</span><span class="p">,</span> <span class="s">&quot;resource_manager_template.txt&quot;</span><span class="p">),</span> <span class="s">&quot;r&quot;</span><span class="p">)</span>
+        <span class="n">template</span> <span class="o">=</span> <span class="n">ftemp</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
+        <span class="n">ftemp</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+        <span class="n">template</span> <span class="o">=</span> <span class="n">template</span><span class="o">.</span> \
+                <span class="n">replace</span><span class="p">(</span><span class="s">&quot;&lt;CLASS_NAME&gt;&quot;</span><span class="p">,</span> <span class="n">classname</span><span class="p">)</span><span class="o">.</span> \
+                <span class="n">replace</span><span class="p">(</span><span class="s">&quot;&lt;RTYPE&gt;&quot;</span><span class="p">,</span> <span class="n">rtype</span><span class="p">)</span><span class="o">.</span> \
+                <span class="n">replace</span><span class="p">(</span><span class="s">&quot;&lt;ATTRIBUTES&gt;&quot;</span><span class="p">,</span> <span class="n">attributes</span><span class="p">)</span><span class="o">.</span> \
+                <span class="n">replace</span><span class="p">(</span><span class="s">&quot;&lt;TRACES&gt;&quot;</span><span class="p">,</span> <span class="n">traces</span><span class="p">)</span><span class="o">.</span> \
+                <span class="n">replace</span><span class="p">(</span><span class="s">&quot;&lt;BASE_CLASS_IMPORT&gt;&quot;</span><span class="p">,</span> <span class="n">base_class_import</span><span class="p">)</span><span class="o">.</span> \
+                <span class="n">replace</span><span class="p">(</span><span class="s">&quot;&lt;BASE_CLASS&gt;&quot;</span><span class="p">,</span> <span class="n">base_class</span><span class="p">)</span><span class="o">.</span> \
+                <span class="n">replace</span><span class="p">(</span><span class="s">&quot;&lt;SHORT-RTYPE&gt;&quot;</span><span class="p">,</span> <span class="n">short_rtype</span><span class="p">)</span>
+
+        <span class="n">fname</span> <span class="o">=</span> <span class="n">uncamm_rtype</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;ns3::&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">)</span><span class="o">.</span> \
+                <span class="n">replace</span><span class="p">(</span><span class="s">&#39;::&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">)</span><span class="o">.</span> \
+                <span class="n">replace</span><span class="p">(</span><span class="s">&quot;-&quot;</span><span class="p">,</span><span class="s">&quot;_&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">+</span> <span class="s">&quot;.py&quot;</span>
+
+        <span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="s">&quot;classes&quot;</span><span class="p">,</span> <span class="n">fname</span><span class="p">),</span> <span class="s">&quot;w&quot;</span><span class="p">)</span>
+        <span class="k">print</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="n">fname</span><span class="p">)</span>
+        <span class="k">print</span> <span class="n">template</span>
+        <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">template</span><span class="p">)</span>
+        <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="template_attributes"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.resource_manager_generator.template_attributes">[docs]</a><span class="k">def</span> <span class="nf">template_attributes</span><span class="p">(</span><span class="n">ns3</span><span class="p">,</span> <span class="n">tid</span><span class="p">):</span> 
+    <span class="n">d</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">realpath</span><span class="p">(</span><span class="n">__file__</span><span class="p">))</span>
+    <span class="n">ftemp</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="s">&quot;templates&quot;</span><span class="p">,</span> <span class="s">&quot;attribute_template.txt&quot;</span><span class="p">),</span> <span class="s">&quot;r&quot;</span><span class="p">)</span>
+    <span class="n">template</span> <span class="o">=</span> <span class="n">ftemp</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
+    <span class="n">ftemp</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+    <span class="n">attributes</span> <span class="o">=</span> <span class="s">&quot;&quot;</span>
+
+    <span class="n">attr_count</span> <span class="o">=</span> <span class="n">tid</span><span class="o">.</span><span class="n">GetAttributeN</span><span class="p">()</span>
+    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="n">attr_count</span><span class="p">):</span>
+        <span class="n">attr_info</span> <span class="o">=</span> <span class="n">tid</span><span class="o">.</span><span class="n">GetAttribute</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">attr_info</span><span class="o">.</span><span class="n">accessor</span><span class="o">.</span><span class="n">HasGetter</span><span class="p">():</span>
+            <span class="k">continue</span>
+
+        <span class="n">attr_flags</span> <span class="o">=</span> <span class="s">&quot;Flags.Reserved&quot;</span>
+        <span class="n">flags</span> <span class="o">=</span> <span class="n">attr_info</span><span class="o">.</span><span class="n">flags</span>
+        <span class="k">if</span> <span class="p">(</span><span class="n">flags</span> <span class="o">&amp;</span> <span class="n">ns3</span><span class="o">.</span><span class="n">TypeId</span><span class="o">.</span><span class="n">ATTR_CONSTRUCT</span><span class="p">)</span> <span class="o">==</span> <span class="n">ns3</span><span class="o">.</span><span class="n">TypeId</span><span class="o">.</span><span class="n">ATTR_CONSTRUCT</span><span class="p">:</span>
+            <span class="n">attr_flags</span> <span class="o">+=</span> <span class="s">&quot; | Flags.Construct&quot;</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">if</span> <span class="p">(</span><span class="n">flags</span> <span class="o">&amp;</span> <span class="n">ns3</span><span class="o">.</span><span class="n">TypeId</span><span class="o">.</span><span class="n">ATTR_GET</span><span class="p">)</span> <span class="o">!=</span> <span class="n">ns3</span><span class="o">.</span><span class="n">TypeId</span><span class="o">.</span><span class="n">ATTR_GET</span><span class="p">:</span>
+                <span class="n">attr_flags</span> <span class="o">+=</span> <span class="s">&quot; | Flags.NoRead&quot;</span>
+            <span class="k">elif</span> <span class="p">(</span><span class="n">flags</span> <span class="o">&amp;</span> <span class="n">ns3</span><span class="o">.</span><span class="n">TypeId</span><span class="o">.</span><span class="n">ATTR_SET</span><span class="p">)</span> <span class="o">!=</span> <span class="n">ns3</span><span class="o">.</span><span class="n">TypeId</span><span class="o">.</span><span class="n">ATTR_SET</span><span class="p">:</span>
+                <span class="n">attr_flags</span> <span class="o">+=</span> <span class="s">&quot; | Flags.NoWrite&quot;</span>
+
+        <span class="n">attr_name</span> <span class="o">=</span> <span class="n">attr_info</span><span class="o">.</span><span class="n">name</span>
+        <span class="n">checker</span> <span class="o">=</span> <span class="n">attr_info</span><span class="o">.</span><span class="n">checker</span>
+        <span class="n">attr_help</span> <span class="o">=</span> <span class="n">attr_info</span><span class="o">.</span><span class="n">help</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;&quot;&#39;</span><span class="p">,</span> <span class="s">&#39;</span><span class="se">\\</span><span class="s">&quot;&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s">&quot;</span><span class="se">\\</span><span class="s">&#39;&quot;</span><span class="p">)</span>
+        <span class="n">value</span> <span class="o">=</span> <span class="n">attr_info</span><span class="o">.</span><span class="n">initialValue</span>
+        <span class="n">attr_value</span> <span class="o">=</span> <span class="n">value</span><span class="o">.</span><span class="n">SerializeToString</span><span class="p">(</span><span class="n">checker</span><span class="p">)</span>
+        <span class="n">attr_allowed</span> <span class="o">=</span> <span class="s">&quot;None&quot;</span>
+        <span class="n">attr_range</span> <span class="o">=</span> <span class="s">&quot;None&quot;</span>
+        <span class="n">attr_type</span> <span class="o">=</span> <span class="s">&quot;Types.String&quot;</span>
+
+        <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">ns3</span><span class="o">.</span><span class="n">ObjectVectorValue</span><span class="p">):</span>
+            <span class="k">continue</span>
+        <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">ns3</span><span class="o">.</span><span class="n">PointerValue</span><span class="p">):</span>
+            <span class="k">continue</span>
+        <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">ns3</span><span class="o">.</span><span class="n">WaypointValue</span><span class="p">):</span>
+            <span class="k">continue</span>
+        <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">ns3</span><span class="o">.</span><span class="n">BooleanValue</span><span class="p">):</span>
+            <span class="n">attr_type</span> <span class="o">=</span> <span class="s">&quot;Types.Bool&quot;</span>
+            <span class="n">attr_value</span> <span class="o">=</span> <span class="s">&quot;True&quot;</span> <span class="k">if</span> <span class="n">attr_value</span> <span class="o">==</span> <span class="s">&quot;true&quot;</span> <span class="k">else</span> <span class="s">&quot;False&quot;</span>
+        <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">ns3</span><span class="o">.</span><span class="n">EnumValue</span><span class="p">):</span>
+            <span class="n">attr_type</span> <span class="o">=</span> <span class="s">&quot;Types.Enumerate&quot;</span>
+            <span class="n">allowed</span> <span class="o">=</span> <span class="n">checker</span><span class="o">.</span><span class="n">GetUnderlyingTypeInformation</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;|&quot;</span><span class="p">)</span>
+            <span class="n">attr_allowed</span> <span class="o">=</span> <span class="s">&quot;[</span><span class="si">%s</span><span class="s">]&quot;</span> <span class="o">%</span> <span class="s">&quot;,&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="s">&quot;</span><span class="se">\&quot;</span><span class="si">%s</span><span class="se">\&quot;</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">x</span><span class="p">,</span> <span class="n">allowed</span><span class="p">))</span>
+        <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">ns3</span><span class="o">.</span><span class="n">DoubleValue</span><span class="p">):</span>
+            <span class="n">attr_type</span> <span class="o">=</span> <span class="s">&quot;Types.Double&quot;</span>
+            <span class="c"># TODO: range</span>
+        <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">ns3</span><span class="o">.</span><span class="n">UintegerValue</span><span class="p">):</span>
+            <span class="n">attr_type</span> <span class="o">=</span> <span class="s">&quot;Types.Integer&quot;</span>
+            <span class="c"># TODO: range</span>
+
+        <span class="n">attr_id</span> <span class="o">=</span> <span class="s">&quot;attr_&quot;</span> <span class="o">+</span> <span class="n">attr_name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;-&quot;</span><span class="p">,</span> <span class="s">&quot;_&quot;</span><span class="p">)</span>
+        <span class="n">attributes</span> <span class="o">+=</span> <span class="n">template</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;&lt;ATTR_ID&gt;&quot;</span><span class="p">,</span> <span class="n">attr_id</span><span class="p">)</span> \
+                <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;&lt;ATTR_NAME&gt;&quot;</span><span class="p">,</span> <span class="n">attr_name</span><span class="p">)</span> \
+                <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;&lt;ATTR_HELP&gt;&quot;</span><span class="p">,</span> <span class="n">attr_help</span><span class="p">)</span> \
+                <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;&lt;ATTR_TYPE&gt;&quot;</span><span class="p">,</span> <span class="n">attr_type</span><span class="p">)</span> \
+                <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;&lt;ATTR_DEFAULT&gt;&quot;</span><span class="p">,</span> <span class="n">attr_value</span><span class="p">)</span> \
+                <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;&lt;ATTR_ALLOWED&gt;&quot;</span><span class="p">,</span> <span class="n">attr_allowed</span><span class="p">)</span> \
+                <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;&lt;ATTR_RANGE&gt;&quot;</span><span class="p">,</span> <span class="n">attr_range</span><span class="p">)</span> \
+                <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;&lt;ATTR_FLAGS&gt;&quot;</span><span class="p">,</span> <span class="n">attr_flags</span><span class="p">)</span> 
+
+    <span class="k">return</span> <span class="n">attributes</span>
+</div>
+<div class="viewcode-block" id="template_traces"><a class="viewcode-back" href="../../../../_layout/nepi.resources.ns3.html#nepi.resources.ns3.resource_manager_generator.template_traces">[docs]</a><span class="k">def</span> <span class="nf">template_traces</span><span class="p">(</span><span class="n">ns3</span><span class="p">,</span> <span class="n">tid</span><span class="p">):</span> 
+    <span class="n">d</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">realpath</span><span class="p">(</span><span class="n">__file__</span><span class="p">))</span>
+    <span class="n">ftemp</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="s">&quot;templates&quot;</span><span class="p">,</span> <span class="s">&quot;trace_template.txt&quot;</span><span class="p">),</span> <span class="s">&quot;r&quot;</span><span class="p">)</span>
+    <span class="n">template</span> <span class="o">=</span> <span class="n">ftemp</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
+    <span class="n">ftemp</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+    <span class="n">traces</span> <span class="o">=</span> <span class="s">&quot;&quot;</span>
+
+    <span class="n">trace_count</span> <span class="o">=</span> <span class="n">tid</span><span class="o">.</span><span class="n">GetTraceSourceN</span><span class="p">()</span>
+    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="n">trace_count</span><span class="p">):</span>
+        <span class="n">trace_info</span> <span class="o">=</span> <span class="n">tid</span><span class="o">.</span><span class="n">GetTraceSource</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
+        <span class="n">trace_name</span> <span class="o">=</span> <span class="n">trace_info</span><span class="o">.</span><span class="n">name</span>
+        <span class="n">trace_help</span> <span class="o">=</span> <span class="n">trace_info</span><span class="o">.</span><span class="n">help</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;&quot;&#39;</span><span class="p">,</span> <span class="s">&#39;</span><span class="se">\\</span><span class="s">&quot;&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s">&quot;</span><span class="se">\\</span><span class="s">&#39;&quot;</span><span class="p">)</span>
+
+        <span class="n">trace_id</span> <span class="o">=</span> <span class="n">trace_name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
+        <span class="n">traces</span> <span class="o">+=</span> <span class="n">template</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;&lt;TRACE_ID&gt;&quot;</span><span class="p">,</span> <span class="n">trace_id</span><span class="p">)</span> \
+                <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;&lt;TRACE_NAME&gt;&quot;</span><span class="p">,</span> <span class="n">trace_name</span><span class="p">)</span> \
+                <span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;&lt;TRACE_HELP&gt;&quot;</span><span class="p">,</span> <span class="n">trace_help</span><span class="p">)</span> 
+
+    <span class="k">return</span> <span class="n">traces</span>
+</div>
+<span class="k">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s">&quot;__main__&quot;</span><span class="p">:</span>
+    <span class="n">create_ns3_rms</span><span class="p">()</span>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/omf/application.html b/doc/sphinx/_build/html/_modules/nepi/resources/omf/application.html
new file mode 100644 (file)
index 0000000..d5e6865
--- /dev/null
@@ -0,0 +1,510 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.omf.application &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.omf.application</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+<span class="c">#         Julien Tribino &lt;julien.tribino@inria.fr&gt;</span>
+
+<span class="kn">import</span> <span class="nn">os</span>
+
+<span class="kn">from</span> <span class="nn">nepi.util.timefuncs</span> <span class="kn">import</span> <span class="n">tnow</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.trace</span> <span class="kn">import</span> <span class="n">Trace</span><span class="p">,</span> <span class="n">TraceAttr</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span> 
+<span class="kn">from</span> <span class="nn">nepi.resources.omf.omf_resource</span> <span class="kn">import</span> <span class="n">ResourceGateway</span><span class="p">,</span> <span class="n">OMFResource</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.omf.node</span> <span class="kn">import</span> <span class="n">OMFNode</span><span class="p">,</span> <span class="n">confirmation_counter</span><span class="p">,</span> <span class="n">reschedule_check</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.omf.omf_api_factory</span> <span class="kn">import</span> <span class="n">OMFAPIFactory</span>
+
+<span class="kn">from</span> <span class="nn">nepi.util</span> <span class="kn">import</span> <span class="n">sshfuncs</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="OMFApplication"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.application.OMFApplication">[docs]</a><span class="k">class</span> <span class="nc">OMFApplication</span><span class="p">(</span><span class="n">OMFResource</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    .. class:: Class Args :</span>
+<span class="sd">      </span>
+<span class="sd">        :param ec: The Experiment controller</span>
+<span class="sd">        :type ec: ExperimentController</span>
+<span class="sd">        :param guid: guid of the RM</span>
+<span class="sd">        :type guid: int</span>
+
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;omf::Application&quot;</span>
+    <span class="n">_authorized_connections</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;omf::Node&quot;</span><span class="p">,</span> <span class="s">&quot;wilabt::sfa::Node&quot;</span><span class="p">]</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Register the attributes of an OMF application</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">,</span> <span class="s">&quot;Command to execute&quot;</span><span class="p">)</span>
+        <span class="n">env</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;env&quot;</span><span class="p">,</span> <span class="s">&quot;Environnement variable of the application&quot;</span><span class="p">)</span>
+
+        <span class="c"># For OMF 5:</span>
+        <span class="n">appid</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;appid&quot;</span><span class="p">,</span> <span class="s">&quot;Name of the application&quot;</span><span class="p">)</span>
+        <span class="n">stdin</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;stdin&quot;</span><span class="p">,</span> <span class="s">&quot;Input of the application&quot;</span><span class="p">,</span> <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;&quot;</span><span class="p">)</span>
+        <span class="n">sources</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;sources&quot;</span><span class="p">,</span> <span class="s">&quot;Sources of the application&quot;</span><span class="p">,</span> 
+                     <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+        <span class="n">sshuser</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;sshUser&quot;</span><span class="p">,</span> <span class="s">&quot;user to connect with ssh&quot;</span><span class="p">,</span> 
+                     <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+        <span class="n">sshkey</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;sshKey&quot;</span><span class="p">,</span> <span class="s">&quot;key to use for ssh&quot;</span><span class="p">,</span> 
+                     <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">appid</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">env</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">stdin</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">sources</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">sshuser</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">sshkey</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        :param ec: The Experiment controller</span>
+<span class="sd">        :type ec: ExperimentController</span>
+<span class="sd">        :param guid: guid of the RM</span>
+<span class="sd">        :type guid: int</span>
+<span class="sd">        :param creds: Credentials to communicate with the rm (XmppClient for OMF)</span>
+<span class="sd">        :type creds: dict</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">OMFApplication</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&#39;command&#39;</span><span class="p">,</span> <span class="s">&quot;&quot;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&#39;appid&#39;</span><span class="p">,</span> <span class="s">&quot;&quot;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_path</span><span class="o">=</span> <span class="s">&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_args</span> <span class="o">=</span> <span class="s">&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&#39;env&#39;</span><span class="p">,</span> <span class="s">&quot;&quot;</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">_node</span> <span class="o">=</span> <span class="bp">None</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">_omf_api</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_topic_app</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">create_id</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_create_cnt</span> <span class="o">=</span> <span class="mi">0</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_start_cnt</span> <span class="o">=</span> <span class="mi">0</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">release_id</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_release_cnt</span> <span class="o">=</span> <span class="mi">0</span>
+
+        <span class="c"># For performance tests</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">begin_deploy_time</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">begin_start_time</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">begin_release_time</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">dperf</span> <span class="o">=</span> <span class="bp">True</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">sperf</span> <span class="o">=</span> <span class="bp">True</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">rperf</span> <span class="o">=</span> <span class="bp">True</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">add_set_hook</span><span class="p">()</span>
+
+    <span class="k">def</span> <span class="nf">_init_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">comm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;command&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39; &#39;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_path</span><span class="o">=</span> <span class="n">comm</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">comm</span><span class="p">)</span><span class="o">&gt;</span><span class="mi">1</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_args</span> <span class="o">=</span> <span class="s">&#39; &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">comm</span><span class="p">[</span><span class="mi">1</span><span class="p">:])</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="OMFApplication.exp_id"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.application.OMFApplication.exp_id">[docs]</a>    <span class="k">def</span> <span class="nf">exp_id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">exp_id</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="OMFApplication.node"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.application.OMFApplication.node">[docs]</a>    <span class="k">def</span> <span class="nf">node</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">rm_list</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">OMFNode</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+        <span class="k">if</span> <span class="n">rm_list</span><span class="p">:</span> <span class="k">return</span> <span class="n">rm_list</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+        <span class="k">return</span> <span class="bp">None</span>
+</div>
+<div class="viewcode-block" id="OMFApplication.stdin_hook"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.application.OMFApplication.stdin_hook">[docs]</a>    <span class="k">def</span> <span class="nf">stdin_hook</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">old_value</span><span class="p">,</span> <span class="n">new_value</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Set a hook to the stdin attribute in order to send a message at each time</span>
+<span class="sd">        the value of this parameter is changed. Used ofr OMF 5.4 only</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_omf_api</span><span class="o">.</span><span class="n">send_stdin</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;hostname&#39;</span><span class="p">),</span> <span class="n">new_value</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;appid&#39;</span><span class="p">))</span>
+        <span class="k">return</span> <span class="n">new_value</span>
+</div>
+<div class="viewcode-block" id="OMFApplication.add_set_hook"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.application.OMFApplication.add_set_hook">[docs]</a>    <span class="k">def</span> <span class="nf">add_set_hook</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Initialize the hooks for OMF 5.4 only</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">attr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attrs</span><span class="p">[</span><span class="s">&quot;stdin&quot;</span><span class="p">]</span>
+        <span class="n">attr</span><span class="o">.</span><span class="n">set_hook</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">stdin_hook</span>
+</div>
+<div class="viewcode-block" id="OMFApplication.valid_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.application.OMFApplication.valid_connection">[docs]</a>    <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Check if the connection with the guid in parameter is possible. </span>
+<span class="sd">        Only meaningful connections are allowed.</span>
+
+<span class="sd">        :param guid: Guid of RM it will be connected</span>
+<span class="sd">        :type guid: int</span>
+<span class="sd">        :rtype:  Boolean</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">rm</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">()</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_authorized_connections</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="p">(</span><span class="s">&quot;Connection between </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s"> and </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s"> refused: &quot;</span>
+                    <span class="s">&quot;An Application can be connected only to a Node&quot;</span> <span class="p">)</span> <span class="o">%</span> \
+                <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_guid</span><span class="p">,</span> <span class="n">rm</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">(),</span> <span class="n">guid</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+
+            <span class="k">return</span> <span class="bp">False</span>
+
+        <span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">connections</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span> <span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="p">(</span><span class="s">&quot;Connection between </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s"> and </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s"> refused: &quot;</span>
+                    <span class="s">&quot;This Application is already connected&quot;</span> <span class="p">)</span> <span class="o">%</span> \
+                <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_guid</span><span class="p">,</span> <span class="n">rm</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">(),</span> <span class="n">guid</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+
+            <span class="k">return</span> <span class="bp">False</span>
+
+        <span class="k">else</span> <span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Connection between </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s"> and </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s"> accepted&quot;</span> <span class="o">%</span> <span class="p">(</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_guid</span><span class="p">,</span> <span class="n">rm</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">(),</span> <span class="n">guid</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+
+            <span class="k">return</span> <span class="bp">True</span>
+</div>
+<div class="viewcode-block" id="OMFApplication.do_deploy"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.application.OMFApplication.do_deploy">[docs]</a>    <span class="k">def</span> <span class="nf">do_deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Deploy the RM. It means nothing special for an application </span>
+<span class="sd">        for now (later it will be upload sources, ...)</span>
+<span class="sd">        It becomes DEPLOYED after the topic for the application has been created</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;---- RESCHEDULING DEPLOY ---- node state </span><span class="si">%s</span><span class="s"> &quot;</span>
+                       <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">state</span> <span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">deploy</span><span class="p">)</span>
+            <span class="k">return</span>
+
+        <span class="c">## For performance test</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dperf</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">begin_deploy_time</span> <span class="o">=</span> <span class="n">tnow</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">dperf</span> <span class="o">=</span> <span class="bp">False</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">_init_command</span><span class="p">()</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&#39;xmppUser&#39;</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppUser&#39;</span><span class="p">))</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&#39;xmppServer&#39;</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppServer&#39;</span><span class="p">))</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&#39;xmppPort&#39;</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppPort&#39;</span><span class="p">))</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&#39;xmppPassword&#39;</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppPassword&#39;</span><span class="p">))</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&#39;version&#39;</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version&#39;</span><span class="p">))</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppServer&#39;</span><span class="p">):</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;XmppServer is not initialzed. XMPP Connections impossible&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppUser&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppPort&#39;</span><span class="p">)</span> 
+                   <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppPassword&#39;</span><span class="p">)):</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Credentials are not all initialzed. Default values will be used&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;command&#39;</span><span class="p">)</span> <span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Application&#39;s Command is not initialized&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_omf_api</span> <span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_omf_api</span> <span class="o">=</span> <span class="n">OMFAPIFactory</span><span class="o">.</span><span class="n">get_api</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version&#39;</span><span class="p">),</span> 
+              <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppServer&#39;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppUser&#39;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppPort&#39;</span><span class="p">),</span>
+               <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppPassword&#39;</span><span class="p">),</span> <span class="n">exp_id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">exp_id</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version&#39;</span><span class="p">)</span> <span class="o">==</span> <span class="s">&quot;5&quot;</span><span class="p">:</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">begin_deploy_time</span> <span class="o">=</span> <span class="n">tnow</span><span class="p">()</span>
+
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;sources&#39;</span><span class="p">):</span>
+                <span class="n">gateway</span> <span class="o">=</span> <span class="n">ResourceGateway</span><span class="o">.</span><span class="n">AMtoGateway</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppServer&#39;</span><span class="p">)]</span>
+                <span class="n">user</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;sshUser&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppUser&#39;</span><span class="p">)</span>
+                <span class="n">dst</span> <span class="o">=</span> <span class="n">user</span> <span class="o">+</span> <span class="s">&quot;@&quot;</span><span class="o">+</span> <span class="n">gateway</span> <span class="o">+</span> <span class="s">&quot;:&quot;</span>
+                <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="n">sshfuncs</span><span class="o">.</span><span class="n">rcopy</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;sources&#39;</span><span class="p">),</span> <span class="n">dst</span><span class="p">)</span>
+        <span class="k">else</span> <span class="p">:</span>
+            <span class="c"># For OMF 6 :</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">create_id</span><span class="p">:</span>
+                <span class="n">props</span> <span class="o">=</span> <span class="p">{}</span>
+                <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;command&#39;</span><span class="p">):</span>
+                    <span class="n">props</span><span class="p">[</span><span class="s">&#39;application:binary_path&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;command&#39;</span><span class="p">)</span>
+                    <span class="n">props</span><span class="p">[</span><span class="s">&#39;application:hrn&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;command&#39;</span><span class="p">)</span>
+                    <span class="n">props</span><span class="p">[</span><span class="s">&#39;application:membership&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_topic_app</span>
+                <span class="n">props</span><span class="p">[</span><span class="s">&#39;application:type&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&quot;application&quot;</span>
+    
+                <span class="bp">self</span><span class="o">.</span><span class="n">create_id</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">urandom</span><span class="p">(</span><span class="mi">16</span><span class="p">)</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s">&#39;hex&#39;</span><span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_omf_api</span><span class="o">.</span><span class="n">frcp_create</span><span class="p">(</span> <span class="bp">self</span><span class="o">.</span><span class="n">create_id</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;hostname&#39;</span><span class="p">),</span> <span class="s">&quot;application&quot;</span><span class="p">,</span> <span class="n">props</span> <span class="o">=</span> <span class="n">props</span><span class="p">)</span>
+   
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_cnt</span> <span class="o">&gt;</span> <span class="n">confirmation_counter</span><span class="p">:</span>
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Couldn&#39;t retrieve the confirmation of the creation&quot;</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+            <span class="n">uid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">check_deploy</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">create_id</span><span class="p">)</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="n">uid</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_create_cnt</span> <span class="o">+=</span><span class="mi">1</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="n">reschedule_check</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">deploy</span><span class="p">)</span>
+                <span class="k">return</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">_topic_app</span> <span class="o">=</span> <span class="n">uid</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_omf_api</span><span class="o">.</span><span class="n">enroll_topic</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_topic_app</span><span class="p">)</span>
+
+        <span class="nb">super</span><span class="p">(</span><span class="n">OMFApplication</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_deploy</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="OMFApplication.check_deploy"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.application.OMFApplication.check_deploy">[docs]</a>    <span class="k">def</span> <span class="nf">check_deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Check, through the mail box in the parser, </span>
+<span class="sd">        if the confirmation of the creation has been received</span>
+
+<span class="sd">        :param cid: the id of the original message</span>
+<span class="sd">        :type guid: string</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">uid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_omf_api</span><span class="o">.</span><span class="n">check_mailbox</span><span class="p">(</span><span class="s">&quot;create&quot;</span><span class="p">,</span> <span class="n">cid</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">uid</span> <span class="p">:</span> 
+            <span class="k">return</span> <span class="n">uid</span>
+        <span class="k">return</span> <span class="bp">False</span>
+</div>
+<div class="viewcode-block" id="OMFApplication.trace"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.application.OMFApplication.trace">[docs]</a>    <span class="k">def</span> <span class="nf">trace</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">attr</span> <span class="o">=</span> <span class="n">TraceAttr</span><span class="o">.</span><span class="n">ALL</span><span class="p">,</span> <span class="n">block</span> <span class="o">=</span> <span class="mi">512</span><span class="p">,</span> <span class="n">offset</span> <span class="o">=</span> <span class="mi">0</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Retrieving &#39;</span><span class="si">%s</span><span class="s">&#39; trace </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">attr</span><span class="p">))</span>
+        <span class="k">if</span> <span class="n">name</span> <span class="o">==</span> <span class="s">&#39;stdout&#39;</span> <span class="p">:</span>
+            <span class="n">suffix</span> <span class="o">=</span> <span class="s">&#39;.out&#39;</span>
+        <span class="k">elif</span> <span class="n">name</span> <span class="o">==</span> <span class="s">&#39;stderr&#39;</span> <span class="p">:</span>
+            <span class="n">suffix</span> <span class="o">=</span> <span class="s">&#39;.err&#39;</span>
+        <span class="k">else</span> <span class="p">:</span>
+            <span class="n">suffix</span> <span class="o">=</span> <span class="s">&#39;.misc&#39;</span>
+
+        <span class="n">trace_path</span> <span class="o">=</span> <span class="s">&#39;/tmp/&#39;</span><span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">_topic_app</span> <span class="o">+</span> <span class="n">suffix</span>
+
+        <span class="k">if</span> <span class="n">attr</span> <span class="o">==</span> <span class="n">TraceAttr</span><span class="o">.</span><span class="n">PATH</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">trace_path</span>
+
+        <span class="k">if</span> <span class="n">attr</span> <span class="o">==</span> <span class="n">TraceAttr</span><span class="o">.</span><span class="n">ALL</span><span class="p">:</span>
+            <span class="k">try</span><span class="p">:</span>
+                <span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">trace_path</span> <span class="p">,</span><span class="s">&#39;r&#39;</span><span class="p">)</span>
+            <span class="k">except</span> <span class="ne">IOError</span><span class="p">:</span>
+                <span class="k">print</span> <span class="s">&quot;File with traces has not been found&quot;</span>
+                <span class="k">return</span> <span class="bp">False</span>
+            <span class="n">out</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
+            <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+        <span class="k">return</span> <span class="n">out</span>
+
+</div>
+<div class="viewcode-block" id="OMFApplication.do_start"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.application.OMFApplication.do_start">[docs]</a>    <span class="k">def</span> <span class="nf">do_start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Start the RM. It means : Send Xmpp Message Using OMF protocol </span>
+<span class="sd">         to execute the application. </span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="c">## For performance test</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">sperf</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">begin_start_time</span> <span class="o">=</span> <span class="n">tnow</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">sperf</span> <span class="o">=</span> <span class="bp">False</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;env&#39;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&#39;env&#39;</span><span class="p">,</span> <span class="s">&quot; &quot;</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version&#39;</span><span class="p">)</span> <span class="o">==</span> <span class="s">&quot;5&quot;</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">begin_start_time</span> <span class="o">=</span> <span class="n">tnow</span><span class="p">()</span>
+            <span class="c"># Some information to check the command for OMF5</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; &quot;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">()</span> <span class="o">+</span> <span class="s">&quot; ( Guid : &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_guid</span><span class="p">)</span> <span class="o">+</span><span class="s">&quot;) : &quot;</span> <span class="o">+</span> \
+                <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;appid&#39;</span><span class="p">)</span> <span class="o">+</span> <span class="s">&quot; : &quot;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">_path</span> <span class="o">+</span> <span class="s">&quot; : &quot;</span> <span class="o">+</span> \
+                <span class="bp">self</span><span class="o">.</span><span class="n">_args</span> <span class="o">+</span> <span class="s">&quot; : &quot;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;env&#39;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">_omf_api</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;hostname&#39;</span><span class="p">),</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;appid&#39;</span><span class="p">),</span> \
+                <span class="bp">self</span><span class="o">.</span><span class="n">_args</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_path</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;env&#39;</span><span class="p">))</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="c">#For OMF 6</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_start_cnt</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+                <span class="n">props</span> <span class="o">=</span> <span class="p">{}</span>
+                <span class="n">props</span><span class="p">[</span><span class="s">&#39;state&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&quot;running&quot;</span>
+    
+                <span class="n">guards</span> <span class="o">=</span> <span class="p">{}</span>
+                <span class="n">guards</span><span class="p">[</span><span class="s">&#39;type&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&quot;application&quot;</span>
+                <span class="n">guards</span><span class="p">[</span><span class="s">&#39;name&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;command&#39;</span><span class="p">)</span>
+
+                <span class="bp">self</span><span class="o">.</span><span class="n">_omf_api</span><span class="o">.</span><span class="n">frcp_configure</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_topic_app</span><span class="p">,</span> <span class="n">props</span> <span class="o">=</span> <span class="n">props</span><span class="p">,</span> <span class="n">guards</span> <span class="o">=</span> <span class="n">guards</span> <span class="p">)</span>
+
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_start_cnt</span> <span class="o">&gt;</span> <span class="n">confirmation_counter</span><span class="p">:</span>
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Couldn&#39;t retrieve the confirmation that the application started&quot;</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+            <span class="n">res</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">check_start</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_topic_app</span><span class="p">)</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="n">res</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_start_cnt</span> <span class="o">+=</span><span class="mi">1</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="n">reschedule_check</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">start</span><span class="p">)</span>
+                <span class="k">return</span>
+
+        <span class="nb">super</span><span class="p">(</span><span class="n">OMFApplication</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_start</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="OMFApplication.check_start"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.application.OMFApplication.check_start">[docs]</a>    <span class="k">def</span> <span class="nf">check_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">uid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Check, through the mail box in the parser, </span>
+<span class="sd">        if the confirmation of the start has been received</span>
+
+<span class="sd">        :param uid: the id of the original message</span>
+<span class="sd">        :type guid: string</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">res</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_omf_api</span><span class="o">.</span><span class="n">check_mailbox</span><span class="p">(</span><span class="s">&quot;started&quot;</span><span class="p">,</span> <span class="n">uid</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">res</span> <span class="p">:</span> 
+            <span class="k">return</span> <span class="bp">True</span>
+        <span class="k">return</span> <span class="bp">False</span>
+</div>
+<div class="viewcode-block" id="OMFApplication.do_stop"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.application.OMFApplication.do_stop">[docs]</a>    <span class="k">def</span> <span class="nf">do_stop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Stop the RM. It means : Send Xmpp Message Using OMF protocol to </span>
+<span class="sd">        kill the application. </span>
+<span class="sd">        State is set to STOPPED after the message is sent.</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version&#39;</span><span class="p">)</span> <span class="o">==</span> <span class="mi">5</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_omf_api</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;hostname&#39;</span><span class="p">),</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;appid&#39;</span><span class="p">))</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">OMFApplication</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_stop</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="OMFApplication.check_release"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.application.OMFApplication.check_release">[docs]</a>    <span class="k">def</span> <span class="nf">check_release</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Check, through the mail box in the parser, </span>
+<span class="sd">        if the confirmation of the release has been received</span>
+
+<span class="sd">        :param cid: the id of the original message</span>
+<span class="sd">        :type guid: string</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">res</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_omf_api</span><span class="o">.</span><span class="n">check_mailbox</span><span class="p">(</span><span class="s">&quot;release&quot;</span><span class="p">,</span> <span class="n">cid</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">res</span> <span class="p">:</span> 
+            <span class="k">return</span> <span class="n">res</span>
+        <span class="k">return</span> <span class="bp">False</span>
+</div>
+<div class="viewcode-block" id="OMFApplication.do_release"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.application.OMFApplication.do_release">[docs]</a>    <span class="k">def</span> <span class="nf">do_release</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Clean the RM at the end of the experiment and release the API.</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="c">## For performance test</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">rperf</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">begin_release_time</span> <span class="o">=</span> <span class="n">tnow</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">rperf</span> <span class="o">=</span> <span class="bp">False</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_omf_api</span><span class="p">:</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version&#39;</span><span class="p">)</span> <span class="o">==</span> <span class="s">&quot;6&quot;</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_topic_app</span><span class="p">:</span>
+                <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">release_id</span><span class="p">:</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">release_id</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">urandom</span><span class="p">(</span><span class="mi">16</span><span class="p">)</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s">&#39;hex&#39;</span><span class="p">)</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">_omf_api</span><span class="o">.</span><span class="n">frcp_release</span><span class="p">(</span> <span class="bp">self</span><span class="o">.</span><span class="n">release_id</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;hostname&#39;</span><span class="p">),</span><span class="bp">self</span><span class="o">.</span><span class="n">_topic_app</span><span class="p">,</span> <span class="n">res_id</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_topic_app</span><span class="p">)</span>
+    
+                <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_release_cnt</span> <span class="o">&lt;</span> <span class="n">confirmation_counter</span><span class="p">:</span>
+                    <span class="n">cid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">check_release</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">release_id</span><span class="p">)</span>
+                    <span class="k">if</span> <span class="ow">not</span> <span class="n">cid</span><span class="p">:</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">_release_cnt</span> <span class="o">+=</span><span class="mi">1</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="n">reschedule_check</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">release</span><span class="p">)</span>
+                        <span class="k">return</span>
+                <span class="k">else</span><span class="p">:</span>
+                    <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Couldn&#39;t retrieve the confirmation of the release&quot;</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+
+                <span class="c"># Remove the stdout and stderr of the application</span>
+                <span class="k">try</span><span class="p">:</span>
+                    <span class="n">os</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="s">&#39;/tmp/&#39;</span><span class="o">+</span><span class="bp">self</span><span class="o">.</span><span class="n">_topic_app</span> <span class="o">+</span><span class="s">&#39;.out&#39;</span><span class="p">)</span>
+                    <span class="n">os</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="s">&#39;/tmp/&#39;</span><span class="o">+</span><span class="bp">self</span><span class="o">.</span><span class="n">_topic_app</span> <span class="o">+</span><span class="s">&#39;.err&#39;</span><span class="p">)</span>
+                <span class="k">except</span> <span class="ne">OSError</span><span class="p">:</span>
+                    <span class="k">pass</span>
+
+            <span class="n">OMFAPIFactory</span><span class="o">.</span><span class="n">release_api</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version&#39;</span><span class="p">),</span> 
+              <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppServer&#39;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppUser&#39;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppPort&#39;</span><span class="p">),</span>
+               <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppPassword&#39;</span><span class="p">),</span> <span class="n">exp_id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">exp_id</span><span class="p">)</span>
+
+        <span class="nb">super</span><span class="p">(</span><span class="n">OMFApplication</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_release</span><span class="p">()</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/omf/channel.html b/doc/sphinx/_build/html/_modules/nepi/resources/omf/channel.html
new file mode 100644 (file)
index 0000000..6ee1dc4
--- /dev/null
@@ -0,0 +1,291 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.omf.channel &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.omf.channel</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+<span class="c">#         Julien Tribino &lt;julien.tribino@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.util.timefuncs</span> <span class="kn">import</span> <span class="n">tnow</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span> 
+
+<span class="kn">from</span> <span class="nn">nepi.resources.omf.omf_resource</span> <span class="kn">import</span> <span class="n">ResourceGateway</span><span class="p">,</span> <span class="n">OMFResource</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.omf.omf_api_factory</span> <span class="kn">import</span> <span class="n">OMFAPIFactory</span>
+
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="OMFChannel"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.channel.OMFChannel">[docs]</a><span class="k">class</span> <span class="nc">OMFChannel</span><span class="p">(</span><span class="n">OMFResource</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    .. class:: Class Args :</span>
+<span class="sd">      </span>
+<span class="sd">        :param ec: The Experiment controller</span>
+<span class="sd">        :type ec: ExperimentController</span>
+<span class="sd">        :param guid: guid of the RM</span>
+<span class="sd">        :type guid: int</span>
+<span class="sd">        :param creds: Credentials to communicate with the rm (XmppClient for OMF)</span>
+<span class="sd">        :type creds: dict</span>
+
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;omf::Channel&quot;</span>
+    <span class="n">_authorized_connections</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;omf::WifiInterface&quot;</span><span class="p">,</span> <span class="s">&quot;omf::Node&quot;</span><span class="p">]</span>
+
+    <span class="n">ChannelToFreq</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">({</span>
+             <span class="s">&quot;1&quot;</span> <span class="p">:</span> <span class="s">&quot;2412&quot;</span><span class="p">,</span>
+             <span class="s">&quot;2&quot;</span> <span class="p">:</span> <span class="s">&quot;2417&quot;</span><span class="p">,</span>
+             <span class="s">&quot;3&quot;</span> <span class="p">:</span> <span class="s">&quot;2422&quot;</span><span class="p">,</span>
+             <span class="s">&quot;4&quot;</span> <span class="p">:</span> <span class="s">&quot;2427&quot;</span><span class="p">,</span>
+             <span class="s">&quot;5&quot;</span> <span class="p">:</span> <span class="s">&quot;2432&quot;</span><span class="p">,</span>
+             <span class="s">&quot;6&quot;</span> <span class="p">:</span> <span class="s">&quot;2437&quot;</span><span class="p">,</span>
+             <span class="s">&quot;7&quot;</span> <span class="p">:</span> <span class="s">&quot;2442&quot;</span><span class="p">,</span>
+             <span class="s">&quot;8&quot;</span> <span class="p">:</span> <span class="s">&quot;2447&quot;</span><span class="p">,</span>
+             <span class="s">&quot;9&quot;</span> <span class="p">:</span> <span class="s">&quot;2452&quot;</span><span class="p">,</span>
+             <span class="s">&quot;10&quot;</span> <span class="p">:</span> <span class="s">&quot;2457&quot;</span><span class="p">,</span>
+             <span class="s">&quot;11&quot;</span> <span class="p">:</span> <span class="s">&quot;2462&quot;</span><span class="p">,</span>
+             <span class="s">&quot;12&quot;</span> <span class="p">:</span> <span class="s">&quot;2467&quot;</span><span class="p">,</span>
+             <span class="s">&quot;13&quot;</span> <span class="p">:</span> <span class="s">&quot;2472&quot;</span><span class="p">,</span>
+    <span class="p">})</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;Register the attributes of an OMF channel</span>
+<span class="sd">        </span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">channel</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;channel&quot;</span><span class="p">,</span> <span class="s">&quot;Name of the application&quot;</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">channel</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        :param ec: The Experiment controller</span>
+<span class="sd">        :type ec: ExperimentController</span>
+<span class="sd">        :param guid: guid of the RM</span>
+<span class="sd">        :type guid: int</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">OMFChannel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">_nodes_guid</span> <span class="o">=</span> <span class="nb">list</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">frequency</span> <span class="o">=</span> <span class="bp">None</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">_omf_api</span> <span class="o">=</span> <span class="bp">None</span>
+
+        <span class="c"># For performance tests</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">perf</span> <span class="o">=</span> <span class="bp">True</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">begin_deploy_time</span> <span class="o">=</span> <span class="bp">None</span>
+
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="OMFChannel.exp_id"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.channel.OMFChannel.exp_id">[docs]</a>    <span class="k">def</span> <span class="nf">exp_id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">exp_id</span>
+</div>
+<div class="viewcode-block" id="OMFChannel.valid_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.channel.OMFChannel.valid_connection">[docs]</a>    <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Check if the connection with the guid in parameter is possible.</span>
+<span class="sd">        Only meaningful connections are allowed.</span>
+
+<span class="sd">        :param guid: Guid of the current RM</span>
+<span class="sd">        :type guid: int</span>
+<span class="sd">        :rtype:  Boolean</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">rm</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">()</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_authorized_connections</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Connection between </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s"> and </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s"> accepted&quot;</span> <span class="o">%</span> <span class="p">(</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_guid</span><span class="p">,</span> <span class="n">rm</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">(),</span> <span class="n">guid</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">return</span> <span class="bp">True</span>
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Connection between </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s"> and </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s"> refused&quot;</span> <span class="o">%</span> <span class="p">(</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_guid</span><span class="p">,</span> <span class="n">rm</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">(),</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+        <span class="k">return</span> <span class="bp">False</span>
+</div>
+    <span class="k">def</span> <span class="nf">_get_target</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">conn_set</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Get the couples (host, interface) that uses this channel</span>
+
+<span class="sd">        :param conn_set: Connections of the current Guid</span>
+<span class="sd">        :type conn_set: set</span>
+<span class="sd">        :rtype: list</span>
+<span class="sd">        :return: self._nodes_guid</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">res</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="k">for</span> <span class="n">elt</span> <span class="ow">in</span> <span class="n">conn_set</span><span class="p">:</span>
+            <span class="n">rm_iface</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">elt</span><span class="p">)</span>
+            <span class="k">for</span> <span class="n">conn</span> <span class="ow">in</span> <span class="n">rm_iface</span><span class="o">.</span><span class="n">connections</span><span class="p">:</span>
+                <span class="n">rm_node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
+                <span class="k">if</span> <span class="n">rm_node</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">()</span> <span class="o">==</span> <span class="s">&quot;omf::Node&quot;</span> <span class="ow">and</span> <span class="n">rm_node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;hostname&#39;</span><span class="p">):</span>
+                    <span class="k">if</span> <span class="n">rm_iface</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">PROVISIONED</span> <span class="ow">or</span> \
+                            <span class="n">rm_node</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+                        <span class="k">return</span> <span class="s">&quot;reschedule&quot;</span>
+                    <span class="n">couple</span> <span class="o">=</span> <span class="p">[</span><span class="n">rm_node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;hostname&#39;</span><span class="p">),</span> <span class="n">rm_iface</span><span class="o">.</span><span class="n">alias</span><span class="p">]</span>
+                    <span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">couple</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">res</span>
+
+<div class="viewcode-block" id="OMFChannel.get_frequency"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.channel.OMFChannel.get_frequency">[docs]</a>    <span class="k">def</span> <span class="nf">get_frequency</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">channel</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the frequency of a specific channel number</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>           
+        <span class="k">return</span> <span class="n">OMFChannel</span><span class="o">.</span><span class="n">ChannelToFreq</span><span class="p">[</span><span class="n">channel</span><span class="p">]</span>
+</div>
+<div class="viewcode-block" id="OMFChannel.do_deploy"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.channel.OMFChannel.do_deploy">[docs]</a>    <span class="k">def</span> <span class="nf">do_deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Deploy the RM. It means : Get the xmpp client and send messages </span>
+<span class="sd">        using OMF 5.4 or 6 protocol to configure the channel.</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>   
+
+      <span class="c">## For performance test</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">perf</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">begin_deploy_time</span> <span class="o">=</span> <span class="n">tnow</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">perf</span> <span class="o">=</span> <span class="bp">False</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;channel&#39;</span><span class="p">):</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Channel&#39;s value is not initialized&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version&#39;</span><span class="p">)</span> <span class="o">==</span> <span class="s">&quot;6&quot;</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">frequency</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_frequency</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;channel&#39;</span><span class="p">))</span>
+            <span class="nb">super</span><span class="p">(</span><span class="n">OMFChannel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_deploy</span><span class="p">()</span>
+            <span class="k">return</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppServer&#39;</span><span class="p">):</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;XmppServer is not initialzed. XMPP Connections impossible&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppUser&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppPort&#39;</span><span class="p">)</span> 
+                   <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppPassword&#39;</span><span class="p">)):</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Credentials are not all initialzed. Default values will be used&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_omf_api</span> <span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_omf_api</span> <span class="o">=</span> <span class="n">OMFAPIFactory</span><span class="o">.</span><span class="n">get_api</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version&#39;</span><span class="p">),</span> 
+              <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppServer&#39;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppUser&#39;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppPort&#39;</span><span class="p">),</span>
+               <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppPassword&#39;</span><span class="p">),</span> <span class="n">exp_id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">exp_id</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">_nodes_guid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_target</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_connections</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_nodes_guid</span> <span class="o">==</span> <span class="s">&quot;reschedule&quot;</span> <span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="s">&quot;1s&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">deploy</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">for</span> <span class="n">couple</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_nodes_guid</span><span class="p">:</span>
+                <span class="n">attrval</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;channel&#39;</span><span class="p">)</span>
+                <span class="n">attrname</span> <span class="o">=</span> <span class="s">&quot;net/</span><span class="si">%s</span><span class="s">/</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">couple</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="s">&#39;channel&#39;</span><span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_omf_api</span><span class="o">.</span><span class="n">configure</span><span class="p">(</span><span class="n">couple</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">attrname</span><span class="p">,</span> <span class="n">attrval</span><span class="p">)</span>
+
+        <span class="nb">super</span><span class="p">(</span><span class="n">OMFChannel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_deploy</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="OMFChannel.do_release"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.channel.OMFChannel.do_release">[docs]</a>    <span class="k">def</span> <span class="nf">do_release</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Clean the RM at the end of the experiment and release the API</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_omf_api</span> <span class="p">:</span>
+            <span class="n">OMFAPIFactory</span><span class="o">.</span><span class="n">release_api</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version&#39;</span><span class="p">),</span> 
+              <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppServer&#39;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppUser&#39;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppPort&#39;</span><span class="p">),</span>
+               <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppPassword&#39;</span><span class="p">),</span> <span class="n">exp_id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">exp_id</span><span class="p">)</span>
+
+        <span class="nb">super</span><span class="p">(</span><span class="n">OMFChannel</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_release</span><span class="p">()</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/omf/interface.html b/doc/sphinx/_build/html/_modules/nepi/resources/omf/interface.html
new file mode 100644 (file)
index 0000000..2d6f044
--- /dev/null
@@ -0,0 +1,430 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.omf.interface &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.omf.interface</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+<span class="c">#         Julien Tribino &lt;julien.tribino@inria.fr&gt;</span>
+
+<span class="kn">import</span> <span class="nn">os</span><span class="o">,</span> <span class="nn">time</span>
+<span class="kn">from</span> <span class="nn">nepi.util.timefuncs</span> <span class="kn">import</span> <span class="n">tnow</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span> 
+
+<span class="kn">from</span> <span class="nn">nepi.resources.omf.node</span> <span class="kn">import</span> <span class="n">OMFNode</span><span class="p">,</span> <span class="n">confirmation_counter</span><span class="p">,</span> <span class="n">reschedule_check</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.omf.omf_resource</span> <span class="kn">import</span> <span class="n">ResourceGateway</span><span class="p">,</span> <span class="n">OMFResource</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.omf.channel</span> <span class="kn">import</span> <span class="n">OMFChannel</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.omf.omf_api_factory</span> <span class="kn">import</span> <span class="n">OMFAPIFactory</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="OMFWifiInterface"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.interface.OMFWifiInterface">[docs]</a><span class="k">class</span> <span class="nc">OMFWifiInterface</span><span class="p">(</span><span class="n">OMFResource</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    .. class:: Class Args :</span>
+<span class="sd">      </span>
+<span class="sd">        :param ec: The Experiment controller</span>
+<span class="sd">        :type ec: ExperimentController</span>
+<span class="sd">        :param guid: guid of the RM</span>
+<span class="sd">        :type guid: int</span>
+
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;omf::WifiInterface&quot;</span>
+    <span class="n">_authorized_connections</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;omf::Node&quot;</span> <span class="p">,</span> <span class="s">&quot;omf::Channel&quot;</span><span class="p">,</span> <span class="s">&quot;wilabt::sfa::Node&quot;</span><span class="p">]</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;Register the attributes of an OMF interface </span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">name</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;name&quot;</span><span class="p">,</span><span class="s">&quot;Alias of the interface : wlan0, wlan1, ..&quot;</span><span class="p">,</span> <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;wlan0&quot;</span><span class="p">)</span>
+        <span class="n">mode</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;mode&quot;</span><span class="p">,</span><span class="s">&quot;Mode of the interface&quot;</span><span class="p">)</span>
+        <span class="n">hw_mode</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;hw_mode&quot;</span><span class="p">,</span><span class="s">&quot;Choose between : a, b, g, n&quot;</span><span class="p">)</span>
+        <span class="n">essid</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;essid&quot;</span><span class="p">,</span><span class="s">&quot;Essid of the interface&quot;</span><span class="p">)</span>
+        <span class="n">ip</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ip&quot;</span><span class="p">,</span><span class="s">&quot;IP of the interface&quot;</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">mode</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">hw_mode</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">essid</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ip</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        :param ec: The Experiment controller</span>
+<span class="sd">        :type ec: ExperimentController</span>
+<span class="sd">        :param guid: guid of the RM</span>
+<span class="sd">        :type guid: int</span>
+<span class="sd">        :param creds: Credentials to communicate with the rm (XmppClient for OMF)</span>
+<span class="sd">        :type creds: dict</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">OMFWifiInterface</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">_conf</span> <span class="o">=</span> <span class="bp">False</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">alias</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_type</span> <span class="o">=</span> <span class="bp">None</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">create_id</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_create_cnt</span> <span class="o">=</span> <span class="mi">0</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">release_id</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_release_cnt</span> <span class="o">=</span> <span class="mi">0</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_topic_iface</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_omf_api</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_type</span> <span class="o">=</span> <span class="s">&quot;&quot;</span>
+
+        <span class="c"># For performance tests</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">perf</span> <span class="o">=</span> <span class="bp">True</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">begin_deploy_time</span> <span class="o">=</span> <span class="bp">None</span>
+
+<div class="viewcode-block" id="OMFWifiInterface.valid_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.interface.OMFWifiInterface.valid_connection">[docs]</a>    <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Check if the connection with the guid in parameter is possible. </span>
+<span class="sd">        Only meaningful connections are allowed.</span>
+
+<span class="sd">        :param guid: Guid of the current RM</span>
+<span class="sd">        :type guid: int</span>
+<span class="sd">        :rtype:  Boolean</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">rm</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">()</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_authorized_connections</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Connection between </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s"> and </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s"> accepted&quot;</span> <span class="o">%</span> \
+                <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_guid</span><span class="p">,</span> <span class="n">rm</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">(),</span> <span class="n">guid</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">return</span> <span class="bp">True</span>
+
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Connection between </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s"> and </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s"> refused&quot;</span> <span class="o">%</span> \
+             <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_guid</span><span class="p">,</span> <span class="n">rm</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">(),</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+        <span class="k">return</span> <span class="bp">False</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="OMFWifiInterface.exp_id"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.interface.OMFWifiInterface.exp_id">[docs]</a>    <span class="k">def</span> <span class="nf">exp_id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">exp_id</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="OMFWifiInterface.node"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.interface.OMFWifiInterface.node">[docs]</a>    <span class="k">def</span> <span class="nf">node</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">rm_list</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">OMFNode</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+        <span class="k">if</span> <span class="n">rm_list</span><span class="p">:</span> <span class="k">return</span> <span class="n">rm_list</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+        <span class="k">return</span> <span class="bp">None</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="OMFWifiInterface.channel"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.interface.OMFWifiInterface.channel">[docs]</a>    <span class="k">def</span> <span class="nf">channel</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">rm_list</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">OMFChannel</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+        <span class="k">if</span> <span class="n">rm_list</span><span class="p">:</span> <span class="k">return</span> <span class="n">rm_list</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+        <span class="k">return</span> <span class="bp">None</span>
+</div>
+<div class="viewcode-block" id="OMFWifiInterface.configure_iface"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.interface.OMFWifiInterface.configure_iface">[docs]</a>    <span class="k">def</span> <span class="nf">configure_iface</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Configure the interface without the ip</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">deploy</span><span class="p">)</span>
+            <span class="k">return</span> <span class="bp">False</span>
+
+        <span class="k">for</span> <span class="n">attrname</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&quot;mode&quot;</span><span class="p">,</span> <span class="s">&quot;type&quot;</span><span class="p">,</span> <span class="s">&quot;essid&quot;</span><span class="p">]:</span>
+            <span class="k">if</span> <span class="n">attrname</span> <span class="o">==</span> <span class="s">&quot;type&quot;</span> <span class="p">:</span>
+                <span class="n">attrval</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_type</span>
+            <span class="k">else</span> <span class="p">:</span>
+                <span class="n">attrval</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">attrname</span><span class="p">)</span>
+            <span class="n">attrname</span> <span class="o">=</span> <span class="s">&quot;net/</span><span class="si">%s</span><span class="s">/</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">alias</span><span class="p">,</span> <span class="n">attrname</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_omf_api</span><span class="o">.</span><span class="n">configure</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;hostname&#39;</span><span class="p">),</span> <span class="n">attrname</span><span class="p">,</span> 
+                        <span class="n">attrval</span><span class="p">)</span>
+        
+        <span class="nb">super</span><span class="p">(</span><span class="n">OMFWifiInterface</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_provision</span><span class="p">()</span>
+        <span class="k">return</span> <span class="bp">True</span>
+</div>
+<div class="viewcode-block" id="OMFWifiInterface.configure_ip"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.interface.OMFWifiInterface.configure_ip">[docs]</a>    <span class="k">def</span> <span class="nf">configure_ip</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Configure the ip of the interface</span>
+
+<span class="sd">        .. note : The ip is separated from the others parameters to avoid </span>
+<span class="sd">        CELL ID shraing problem. By putting th ip at the end of the configuration, </span>
+<span class="sd">        each node use the same channel and can then share the same CELL ID.</span>
+<span class="sd">        In the second case, the channel is defined at the end and the node don&#39;t</span>
+<span class="sd">        share a common CELL ID and can not communicate.</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">channel</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">deploy</span><span class="p">)</span>
+            <span class="k">return</span> <span class="bp">False</span>
+
+        <span class="n">attrval</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ip&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="s">&#39;/&#39;</span> <span class="ow">in</span> <span class="n">attrval</span><span class="p">:</span>
+           <span class="n">attrval</span><span class="p">,</span><span class="n">mask</span> <span class="o">=</span> <span class="n">attrval</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;/&#39;</span><span class="p">)</span>
+        <span class="n">attrname</span> <span class="o">=</span> <span class="s">&quot;net/</span><span class="si">%s</span><span class="s">/</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">alias</span><span class="p">,</span> <span class="s">&quot;ip&quot;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_omf_api</span><span class="o">.</span><span class="n">configure</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;hostname&#39;</span><span class="p">),</span> <span class="n">attrname</span><span class="p">,</span> 
+                    <span class="n">attrval</span><span class="p">)</span>
+        <span class="k">return</span> <span class="bp">True</span>
+
+</div>
+<div class="viewcode-block" id="OMFWifiInterface.configure_on_omf5"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.interface.OMFWifiInterface.configure_on_omf5">[docs]</a>    <span class="k">def</span> <span class="nf">configure_on_omf5</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Method to configure the wifi interface when OMF 5.4 is used.</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>    
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;hw_mode&#39;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;name&#39;</span><span class="p">)</span> <span class="o">==</span> <span class="s">&quot;wlan0&quot;</span> <span class="ow">or</span> <span class="s">&quot;eth0&quot;</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">alias</span> <span class="o">=</span> <span class="s">&quot;w0&quot;</span>
+        <span class="k">else</span><span class="p">:</span>    
+            <span class="bp">self</span><span class="o">.</span><span class="n">alias</span> <span class="o">=</span> <span class="s">&quot;w1&quot;</span>
+        <span class="n">res</span> <span class="o">=</span> <span class="bp">False</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">PROVISIONED</span><span class="p">:</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_conf</span> <span class="o">==</span> <span class="bp">False</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_conf</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">configure_iface</span><span class="p">()</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_conf</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">res</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">configure_ip</span><span class="p">()</span>
+        <span class="k">return</span> <span class="n">res</span>
+</div>
+<div class="viewcode-block" id="OMFWifiInterface.check_deploy"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.interface.OMFWifiInterface.check_deploy">[docs]</a>    <span class="k">def</span> <span class="nf">check_deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Check, through the mail box in the parser, </span>
+<span class="sd">        if the confirmation of the creation has been received</span>
+
+<span class="sd">        :param cid: the id of the original message</span>
+<span class="sd">        :type guid: string</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">uid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_omf_api</span><span class="o">.</span><span class="n">check_mailbox</span><span class="p">(</span><span class="s">&quot;create&quot;</span><span class="p">,</span> <span class="n">cid</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">uid</span> <span class="p">:</span> 
+            <span class="k">return</span> <span class="n">uid</span>
+        <span class="k">return</span> <span class="bp">False</span>
+</div>
+<div class="viewcode-block" id="OMFWifiInterface.do_deploy"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.interface.OMFWifiInterface.do_deploy">[docs]</a>    <span class="k">def</span> <span class="nf">do_deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Deploy the RM. It means : Get the xmpp client and send messages </span>
+<span class="sd">        using OMF 5.4 or 6 protocol to configure the interface.</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;---- RESCHEDULING DEPLOY ---- node state </span><span class="si">%s</span><span class="s"> &quot;</span>
+                       <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">state</span> <span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">deploy</span><span class="p">)</span>
+            <span class="k">return</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">channel</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">channel</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;---- RESCHEDULING DEPLOY ---- channel state </span><span class="si">%s</span><span class="s"> &quot;</span>
+                       <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">channel</span><span class="o">.</span><span class="n">state</span> <span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">deploy</span><span class="p">)</span>
+            <span class="k">return</span>
+
+        <span class="c">## For performance test</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">perf</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">begin_deploy_time</span> <span class="o">=</span> <span class="n">tnow</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">perf</span> <span class="o">=</span> <span class="bp">False</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&#39;xmppUser&#39;</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppUser&#39;</span><span class="p">))</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&#39;xmppServer&#39;</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppServer&#39;</span><span class="p">))</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&#39;xmppPort&#39;</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppPort&#39;</span><span class="p">))</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&#39;xmppPassword&#39;</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppPassword&#39;</span><span class="p">))</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&#39;version&#39;</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version&#39;</span><span class="p">))</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppServer&#39;</span><span class="p">):</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;XmppServer is not initialzed. XMPP Connections impossible&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppUser&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppPort&#39;</span><span class="p">)</span> 
+                   <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppPassword&#39;</span><span class="p">)):</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Credentials are not all initialzed. Default values will be used&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_omf_api</span> <span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_omf_api</span> <span class="o">=</span> <span class="n">OMFAPIFactory</span><span class="o">.</span><span class="n">get_api</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version&#39;</span><span class="p">),</span> 
+              <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppServer&#39;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppUser&#39;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppPort&#39;</span><span class="p">),</span>
+               <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppPassword&#39;</span><span class="p">),</span> <span class="n">exp_id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">exp_id</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;name&#39;</span><span class="p">)):</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Interface&#39;s name is not initialized&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;mode&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;essid&#39;</span><span class="p">)</span> \
+                 <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;hw_mode&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;ip&#39;</span><span class="p">)):</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Interface&#39;s variable are not initialized&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version&#39;</span><span class="p">)</span> <span class="o">==</span> <span class="s">&quot;5&quot;</span><span class="p">:</span>
+            <span class="n">res</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">configure_on_omf5</span><span class="p">()</span>        
+
+        <span class="k">else</span> <span class="p">:</span>
+            <span class="n">res</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">configure_on_omf6</span><span class="p">()</span>
+
+        <span class="k">if</span> <span class="n">res</span><span class="p">:</span>
+            <span class="nb">super</span><span class="p">(</span><span class="n">OMFWifiInterface</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_deploy</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="OMFWifiInterface.configure_on_omf6"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.interface.OMFWifiInterface.configure_on_omf6">[docs]</a>    <span class="k">def</span> <span class="nf">configure_on_omf6</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Method to configure the wifi interface when OMF 6 is used.</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>   
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">create_id</span> <span class="p">:</span>
+            <span class="n">props</span> <span class="o">=</span> <span class="p">{}</span>
+            <span class="n">props</span><span class="p">[</span><span class="s">&#39;wlan:if_name&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;name&#39;</span><span class="p">)</span>
+            <span class="n">props</span><span class="p">[</span><span class="s">&#39;wlan:mode&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
+                <span class="s">&quot;mode&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;mode&#39;</span><span class="p">),</span>
+                <span class="s">&quot;hw_mode&quot;</span> <span class="p">:</span>  <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;hw_mode&#39;</span><span class="p">),</span>
+                <span class="s">&quot;channel&quot;</span> <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">channel</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;channel&#39;</span><span class="p">),</span>
+                <span class="s">&quot;essid&quot;</span> <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;essid&#39;</span><span class="p">),</span>
+                <span class="s">&quot;ip_addr&quot;</span> <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;ip&#39;</span><span class="p">),</span>
+                <span class="s">&quot;frequency&quot;</span> <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">channel</span><span class="o">.</span><span class="n">frequency</span><span class="p">,</span>
+                <span class="s">&quot;phy&quot;</span> <span class="p">:</span> <span class="s">&quot;</span><span class="si">%0%</span><span class="s">&quot;</span>
+               <span class="p">}</span>
+            <span class="n">props</span><span class="p">[</span><span class="s">&#39;wlan:hrn&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;name&#39;</span><span class="p">)</span>
+            <span class="n">props</span><span class="p">[</span><span class="s">&#39;wlan:type&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&quot;wlan&quot;</span>
+    
+            <span class="bp">self</span><span class="o">.</span><span class="n">create_id</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">urandom</span><span class="p">(</span><span class="mi">16</span><span class="p">)</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s">&#39;hex&#39;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_omf_api</span><span class="o">.</span><span class="n">frcp_create</span><span class="p">(</span> <span class="bp">self</span><span class="o">.</span><span class="n">create_id</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;hostname&#39;</span><span class="p">),</span> <span class="s">&quot;wlan&quot;</span><span class="p">,</span> <span class="n">props</span> <span class="o">=</span> <span class="n">props</span><span class="p">)</span>
+    
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_cnt</span> <span class="o">&gt;</span> <span class="n">confirmation_counter</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Couldn&#39;t retrieve the confirmation of the creation&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="n">uid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">check_deploy</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">create_id</span><span class="p">)</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">uid</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_create_cnt</span> <span class="o">+=</span><span class="mi">1</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="n">reschedule_check</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">deploy</span><span class="p">)</span>
+            <span class="k">return</span> <span class="bp">False</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">_topic_iface</span> <span class="o">=</span> <span class="n">uid</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_omf_api</span><span class="o">.</span><span class="n">enroll_topic</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_topic_iface</span><span class="p">)</span>
+        <span class="k">return</span> <span class="bp">True</span>
+</div>
+<div class="viewcode-block" id="OMFWifiInterface.check_release"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.interface.OMFWifiInterface.check_release">[docs]</a>    <span class="k">def</span> <span class="nf">check_release</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Check, through the mail box in the parser, </span>
+<span class="sd">        if the confirmation of the release has been received</span>
+
+<span class="sd">        :param cid: the id of the original message</span>
+<span class="sd">        :type guid: string</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">res</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_omf_api</span><span class="o">.</span><span class="n">check_mailbox</span><span class="p">(</span><span class="s">&quot;release&quot;</span><span class="p">,</span> <span class="n">cid</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">res</span> <span class="p">:</span> 
+            <span class="k">return</span> <span class="n">res</span>
+        <span class="k">return</span> <span class="bp">False</span>
+</div>
+<div class="viewcode-block" id="OMFWifiInterface.do_release"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.interface.OMFWifiInterface.do_release">[docs]</a>    <span class="k">def</span> <span class="nf">do_release</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Clean the RM at the end of the experiment and release the API</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_omf_api</span><span class="p">:</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version&#39;</span><span class="p">)</span> <span class="o">==</span> <span class="s">&quot;6&quot;</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_topic_iface</span> <span class="p">:</span>
+                <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">release_id</span><span class="p">:</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">release_id</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">urandom</span><span class="p">(</span><span class="mi">16</span><span class="p">)</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s">&#39;hex&#39;</span><span class="p">)</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">_omf_api</span><span class="o">.</span><span class="n">frcp_release</span><span class="p">(</span> <span class="bp">self</span><span class="o">.</span><span class="n">release_id</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;hostname&#39;</span><span class="p">),</span><span class="bp">self</span><span class="o">.</span><span class="n">_topic_iface</span><span class="p">,</span> <span class="n">res_id</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_topic_iface</span><span class="p">)</span>
+    
+                <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_release_cnt</span> <span class="o">&lt;</span> <span class="n">confirmation_counter</span><span class="p">:</span>
+                    <span class="n">cid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">check_release</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">release_id</span><span class="p">)</span>
+                    <span class="k">if</span> <span class="ow">not</span> <span class="n">cid</span><span class="p">:</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">_release_cnt</span> <span class="o">+=</span><span class="mi">1</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="n">reschedule_check</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">release</span><span class="p">)</span>
+                        <span class="k">return</span>
+                <span class="k">else</span><span class="p">:</span>
+                    <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Couldn&#39;t retrieve the confirmation of the release&quot;</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+
+
+            <span class="n">OMFAPIFactory</span><span class="o">.</span><span class="n">release_api</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version&#39;</span><span class="p">),</span> 
+              <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppServer&#39;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppUser&#39;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppPort&#39;</span><span class="p">),</span>
+               <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppPassword&#39;</span><span class="p">),</span> <span class="n">exp_id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">exp_id</span><span class="p">)</span>
+
+        <span class="nb">super</span><span class="p">(</span><span class="n">OMFWifiInterface</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_release</span><span class="p">()</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/omf/messages_5_4.html b/doc/sphinx/_build/html/_modules/nepi/resources/omf/messages_5_4.html
new file mode 100644 (file)
index 0000000..96c6513
--- /dev/null
@@ -0,0 +1,345 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.omf.messages_5_4 &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.omf.messages_5_4</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+<span class="c">#         Julien Tribino &lt;julien.tribino@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">xml.etree</span> <span class="kn">import</span> <span class="n">cElementTree</span> <span class="k">as</span> <span class="n">ET</span>
+
+<div class="viewcode-block" id="MessageHandler"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.messages_5_4.MessageHandler">[docs]</a><span class="k">class</span> <span class="nc">MessageHandler</span><span class="p">():</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    .. class:: Class Args :</span>
+<span class="sd">      </span>
+<span class="sd">        :param sliceid: Slice Name (= Xmpp Slice)</span>
+<span class="sd">        :type expid: str</span>
+<span class="sd">        :param expid: Experiment ID (= Xmpp User)</span>
+<span class="sd">        :type expid: str</span>
+
+<span class="sd">    .. note::</span>
+
+<span class="sd">       This class is used only for OMF 5.4 Protocol and is going to become unused</span>
+
+<span class="sd">    &quot;&quot;&quot;</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sliceid</span><span class="p">,</span> <span class="n">expid</span> <span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+
+<span class="sd">        :param sliceid: Slice Name (= Xmpp Slice)</span>
+<span class="sd">        :type expid: str</span>
+<span class="sd">        :param expid: Experiment ID (= Xmpp User)</span>
+<span class="sd">        :type expid: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_slice_id</span> <span class="o">=</span> <span class="n">sliceid</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_exp_id</span> <span class="o">=</span> <span class="n">expid</span>
+
+
+    <span class="k">def</span> <span class="nf">_id_element</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parent</span><span class="p">,</span> <span class="n">markup</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Insert a markup element with an id</span>
+
+<span class="sd">        :param parent: Parent element in an XML point of view</span>
+<span class="sd">        :type parent: ElementTree Element</span>
+<span class="sd">        :param markup: Name of the markup</span>
+<span class="sd">        :type markup: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">elt</span> <span class="o">=</span> <span class="n">ET</span><span class="o">.</span><span class="n">SubElement</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="n">markup</span><span class="p">)</span>
+        <span class="n">elt</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;id&quot;</span><span class="p">,</span> <span class="s">&quot;</span><span class="se">\&#39;</span><span class="s">omf-payload</span><span class="se">\&#39;</span><span class="s">&quot;</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">elt</span>
+
+    <span class="k">def</span> <span class="nf">_attr_element</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parent</span><span class="p">,</span> <span class="n">markup</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Insert a markup element with a text (value)</span>
+
+<span class="sd">        :param parent: Parent element in an XML point of view</span>
+<span class="sd">        :type parent: ElementTree Element</span>
+<span class="sd">        :param markup: Name of the markup</span>
+<span class="sd">        :type markup: str</span>
+<span class="sd">        :param text: Value of the markup element</span>
+<span class="sd">        :type text: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">elt</span> <span class="o">=</span> <span class="n">ET</span><span class="o">.</span><span class="n">SubElement</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="n">markup</span><span class="p">)</span>
+        <span class="n">elt</span><span class="o">.</span><span class="n">text</span> <span class="o">=</span> <span class="n">text</span>
+        <span class="k">return</span> <span class="n">elt</span>
+
+<div class="viewcode-block" id="MessageHandler.execute_function"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.messages_5_4.MessageHandler.execute_function">[docs]</a>    <span class="k">def</span> <span class="nf">execute_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="p">,</span> <span class="n">appid</span><span class="p">,</span> <span class="n">cmdlineargs</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="n">env</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Build an Execute Message</span>
+
+<span class="sd">        :param target: Hrn of the target node (ex : omf.plexus.wlab17)</span>
+<span class="sd">        :type target: str</span>
+<span class="sd">        :param appid: Application id</span>
+<span class="sd">        :type appid: str</span>
+<span class="sd">        :param cmdlineargs: Arguments of the application</span>
+<span class="sd">        :type cmdlineargs: str</span>
+<span class="sd">        :param path: Path of the application</span>
+<span class="sd">        :type path: str</span>
+<span class="sd">        :param env: Environment variables</span>
+<span class="sd">        :type env: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">payload</span> <span class="o">=</span> <span class="n">ET</span><span class="o">.</span><span class="n">Element</span><span class="p">(</span><span class="s">&quot;omf-message&quot;</span><span class="p">)</span>
+        <span class="n">execute</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_id_element</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span><span class="s">&quot;EXECUTE&quot;</span><span class="p">)</span>
+        <span class="n">env</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">execute</span><span class="p">,</span> <span class="s">&quot;ENV&quot;</span><span class="p">,</span> <span class="n">env</span><span class="p">)</span>
+        <span class="n">sliceid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">execute</span><span class="p">,</span><span class="s">&quot;SLICEID&quot;</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">_slice_id</span><span class="p">)</span>
+        <span class="n">expid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">execute</span><span class="p">,</span><span class="s">&quot;EXPID&quot;</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">_exp_id</span><span class="p">)</span>
+        <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">execute</span><span class="p">,</span><span class="s">&quot;TARGET&quot;</span><span class="p">,</span><span class="n">target</span><span class="p">)</span>
+        <span class="n">appid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">execute</span><span class="p">,</span><span class="s">&quot;APPID&quot;</span><span class="p">,</span><span class="n">appid</span><span class="p">)</span>
+        <span class="n">cmdlineargs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">execute</span><span class="p">,</span><span class="s">&quot;CMDLINEARGS&quot;</span><span class="p">,</span><span class="n">cmdlineargs</span><span class="p">)</span>
+        <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">execute</span><span class="p">,</span><span class="s">&quot;PATH&quot;</span><span class="p">,</span><span class="n">path</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">payload</span>
+</div>
+<div class="viewcode-block" id="MessageHandler.stdin_function"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.messages_5_4.MessageHandler.stdin_function">[docs]</a>    <span class="k">def</span> <span class="nf">stdin_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">appid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Build an Execute Message</span>
+
+<span class="sd">        :param value: parameter that go in the stdin</span>
+<span class="sd">        :type value: str</span>
+<span class="sd">        :param target: Hrn of the target node (ex : omf.plexus.wlab17)</span>
+<span class="sd">        :type target: str</span>
+<span class="sd">        :param appid: Application id</span>
+<span class="sd">        :type appid: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">payload</span> <span class="o">=</span> <span class="n">ET</span><span class="o">.</span><span class="n">Element</span><span class="p">(</span><span class="s">&quot;omf-message&quot;</span><span class="p">)</span>
+        <span class="n">stdin</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_id_element</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span><span class="s">&quot;STDIN&quot;</span><span class="p">)</span>
+        <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">stdin</span><span class="p">,</span><span class="s">&quot;VALUE&quot;</span><span class="p">,</span><span class="n">value</span><span class="p">)</span>
+        <span class="n">sliceid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">stdin</span><span class="p">,</span><span class="s">&quot;SLICEID&quot;</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">_slice_id</span><span class="p">)</span>
+        <span class="n">expid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">stdin</span><span class="p">,</span><span class="s">&quot;EXPID&quot;</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">_exp_id</span><span class="p">)</span>
+        <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">stdin</span><span class="p">,</span><span class="s">&quot;TARGET&quot;</span><span class="p">,</span><span class="n">target</span><span class="p">)</span>
+        <span class="n">appid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">stdin</span><span class="p">,</span><span class="s">&quot;APPID&quot;</span><span class="p">,</span><span class="n">appid</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">payload</span>
+</div>
+<div class="viewcode-block" id="MessageHandler.exit_function"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.messages_5_4.MessageHandler.exit_function">[docs]</a>    <span class="k">def</span> <span class="nf">exit_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="p">,</span> <span class="n">appid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Build an Exit Message</span>
+
+<span class="sd">        :param target: Hrn of the target node (ex : omf.plexus.wlab17)</span>
+<span class="sd">        :type target: str</span>
+<span class="sd">        :param appid: Application id (ex : vlc#1)</span>
+<span class="sd">        :type appid: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">payload</span> <span class="o">=</span> <span class="n">ET</span><span class="o">.</span><span class="n">Element</span><span class="p">(</span><span class="s">&quot;omf-message&quot;</span><span class="p">)</span>
+        <span class="n">execute</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_id_element</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span><span class="s">&quot;EXIT&quot;</span><span class="p">)</span>
+        <span class="n">sliceid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">execute</span><span class="p">,</span><span class="s">&quot;SLICEID&quot;</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">_slice_id</span><span class="p">)</span>
+        <span class="n">expid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">execute</span><span class="p">,</span><span class="s">&quot;EXPID&quot;</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">_exp_id</span><span class="p">)</span>
+        <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">execute</span><span class="p">,</span><span class="s">&quot;TARGET&quot;</span><span class="p">,</span><span class="n">target</span><span class="p">)</span>
+        <span class="n">appid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">execute</span><span class="p">,</span><span class="s">&quot;APPID&quot;</span><span class="p">,</span><span class="n">appid</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">payload</span>
+</div>
+<div class="viewcode-block" id="MessageHandler.configure_function"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.messages_5_4.MessageHandler.configure_function">[docs]</a>    <span class="k">def</span> <span class="nf">configure_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">path</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Build a Configure Message</span>
+
+<span class="sd">        :param target: Hrn of the target node (ex : omf.plexus.wlab17)</span>
+<span class="sd">        :type target: str</span>
+<span class="sd">        :param value: guid of the RM</span>
+<span class="sd">        :type value: int</span>
+<span class="sd">        :param path: Path of the element to configure (ex : net/w0/channel)</span>
+<span class="sd">        :type path: dict</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">payload</span> <span class="o">=</span> <span class="n">ET</span><span class="o">.</span><span class="n">Element</span><span class="p">(</span><span class="s">&quot;omf-message&quot;</span><span class="p">)</span>
+        <span class="n">config</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_id_element</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span> <span class="s">&quot;CONFIGURE&quot;</span><span class="p">)</span>
+        <span class="n">sliceid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">config</span><span class="p">,</span><span class="s">&quot;SLICEID&quot;</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">_slice_id</span><span class="p">)</span>
+        <span class="n">expid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">config</span><span class="p">,</span><span class="s">&quot;EXPID&quot;</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">_exp_id</span><span class="p">)</span>
+        <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">config</span><span class="p">,</span><span class="s">&quot;TARGET&quot;</span><span class="p">,</span><span class="n">target</span><span class="p">)</span>
+        <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">config</span><span class="p">,</span><span class="s">&quot;VALUE&quot;</span><span class="p">,</span><span class="n">value</span><span class="p">)</span>
+        <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">config</span><span class="p">,</span><span class="s">&quot;PATH&quot;</span><span class="p">,</span><span class="n">path</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">payload</span>
+</div>
+<div class="viewcode-block" id="MessageHandler.log_function"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.messages_5_4.MessageHandler.log_function">[docs]</a>    <span class="k">def</span> <span class="nf">log_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">level</span><span class="p">,</span> <span class="n">logger</span><span class="p">,</span> <span class="n">level_name</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Build a Log Message</span>
+
+<span class="sd">        :param level: Level of logging</span>
+<span class="sd">        :type level: str</span>
+<span class="sd">        :param logger: Element publishing the log</span>
+<span class="sd">        :type logger: str</span>
+<span class="sd">        :param level_name: Name of the level (ex : INFO)</span>
+<span class="sd">        :type level_name: str</span>
+<span class="sd">        :param data: Content to publish</span>
+<span class="sd">        :type data: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">payload</span> <span class="o">=</span> <span class="n">ET</span><span class="o">.</span><span class="n">Element</span><span class="p">(</span><span class="s">&quot;omf-message&quot;</span><span class="p">)</span>
+        <span class="n">log</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_id_element</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span> <span class="s">&quot;LOGGING&quot;</span><span class="p">)</span>
+        <span class="n">level</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">log</span><span class="p">,</span><span class="s">&quot;LEVEL&quot;</span><span class="p">,</span><span class="n">level</span><span class="p">)</span>
+        <span class="n">sliceid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">log</span><span class="p">,</span><span class="s">&quot;SLICEID&quot;</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">_slice_id</span><span class="p">)</span>
+        <span class="n">logger</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">log</span><span class="p">,</span><span class="s">&quot;LOGGER&quot;</span><span class="p">,</span><span class="n">logger</span><span class="p">)</span>
+        <span class="n">expid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">log</span><span class="p">,</span><span class="s">&quot;EXPID&quot;</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">_exp_id</span><span class="p">)</span>
+        <span class="n">level_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">log</span><span class="p">,</span><span class="s">&quot;LEVEL_NAME&quot;</span><span class="p">,</span><span class="n">level_name</span><span class="p">)</span>
+        <span class="n">data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">log</span><span class="p">,</span><span class="s">&quot;DATA&quot;</span><span class="p">,</span><span class="n">data</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">payload</span>
+</div>
+<div class="viewcode-block" id="MessageHandler.alias_function"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.messages_5_4.MessageHandler.alias_function">[docs]</a>    <span class="k">def</span> <span class="nf">alias_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">target</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Build an Alias Message</span>
+
+<span class="sd">        :param name: Name of the new alias</span>
+<span class="sd">        :type name: str</span>
+<span class="sd">        :param target: Hrn of the target node (ex : omf.plexus.wlab17)</span>
+<span class="sd">        :type target: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">payload</span> <span class="o">=</span> <span class="n">ET</span><span class="o">.</span><span class="n">Element</span><span class="p">(</span><span class="s">&quot;omf-message&quot;</span><span class="p">)</span>
+        <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_id_element</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span><span class="s">&quot;ALIAS&quot;</span><span class="p">)</span>
+        <span class="n">sliceid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">alias</span><span class="p">,</span><span class="s">&quot;SLICEID&quot;</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">_slice_id</span><span class="p">)</span>
+        <span class="n">expid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">alias</span><span class="p">,</span><span class="s">&quot;EXPID&quot;</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">_exp_id</span><span class="p">)</span>
+        <span class="n">name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">alias</span><span class="p">,</span><span class="s">&quot;NAME&quot;</span><span class="p">,</span><span class="n">name</span><span class="p">)</span>
+        <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">alias</span><span class="p">,</span><span class="s">&quot;TARGET&quot;</span><span class="p">,</span><span class="n">target</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">payload</span>
+</div>
+<div class="viewcode-block" id="MessageHandler.enroll_function"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.messages_5_4.MessageHandler.enroll_function">[docs]</a>    <span class="k">def</span> <span class="nf">enroll_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">enrollkey</span><span class="p">,</span> <span class="n">image</span><span class="p">,</span> <span class="n">index</span><span class="p">,</span> <span class="n">target</span> <span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Build an Enroll Message</span>
+
+<span class="sd">        :param enrollkey: Type of enrollment (= 1)</span>
+<span class="sd">        :type enrollkey: str</span>
+<span class="sd">        :param image: Image (= * when all the nodes are concerned)</span>
+<span class="sd">        :type image: str</span>
+<span class="sd">        :param index: Index (= 1 in general)</span>
+<span class="sd">        :type index: str</span>
+<span class="sd">        :param target: Hrn of the target node (ex : omf.plexus.wlab17)</span>
+<span class="sd">        :type target: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">payload</span> <span class="o">=</span> <span class="n">ET</span><span class="o">.</span><span class="n">Element</span><span class="p">(</span><span class="s">&quot;omf-message&quot;</span><span class="p">)</span>
+        <span class="n">enroll</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_id_element</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span><span class="s">&quot;ENROLL&quot;</span><span class="p">)</span>
+        <span class="n">enrollkey</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">enroll</span><span class="p">,</span><span class="s">&quot;ENROLLKEY&quot;</span><span class="p">,</span><span class="n">enrollkey</span><span class="p">)</span>
+        <span class="n">sliceid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">enroll</span><span class="p">,</span><span class="s">&quot;SLICEID&quot;</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">_slice_id</span><span class="p">)</span>
+        <span class="n">image</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">enroll</span><span class="p">,</span><span class="s">&quot;IMAGE&quot;</span><span class="p">,</span><span class="n">image</span><span class="p">)</span>
+        <span class="n">expid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">enroll</span><span class="p">,</span><span class="s">&quot;EXPID&quot;</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">_exp_id</span><span class="p">)</span>
+        <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">enroll</span><span class="p">,</span><span class="s">&quot;INDEX&quot;</span><span class="p">,</span><span class="n">index</span><span class="p">)</span>
+        <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">enroll</span><span class="p">,</span><span class="s">&quot;TARGET&quot;</span><span class="p">,</span><span class="n">target</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">payload</span>
+</div>
+<div class="viewcode-block" id="MessageHandler.noop_function"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.messages_5_4.MessageHandler.noop_function">[docs]</a>    <span class="k">def</span> <span class="nf">noop_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">target</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Build a Noop Message</span>
+
+<span class="sd">        :param target: Hrn of the target node (ex : omf.plexus.wlab17)</span>
+<span class="sd">        :type target: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">payload</span> <span class="o">=</span> <span class="n">ET</span><span class="o">.</span><span class="n">Element</span><span class="p">(</span><span class="s">&quot;omf-message&quot;</span><span class="p">)</span>
+        <span class="n">noop</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_id_element</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span><span class="s">&quot;NOOP&quot;</span><span class="p">)</span>
+        <span class="n">sliceid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">noop</span><span class="p">,</span><span class="s">&quot;SLICEID&quot;</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">_slice_id</span><span class="p">)</span>
+        <span class="n">expid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">noop</span><span class="p">,</span><span class="s">&quot;EXPID&quot;</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">_exp_id</span><span class="p">)</span>
+        <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">noop</span><span class="p">,</span><span class="s">&quot;TARGET&quot;</span><span class="p">,</span><span class="n">target</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">payload</span>
+</div>
+<div class="viewcode-block" id="MessageHandler.newexp_function"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.messages_5_4.MessageHandler.newexp_function">[docs]</a>    <span class="k">def</span> <span class="nf">newexp_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">experimentid</span><span class="p">,</span> <span class="n">address</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Build a NewExp Message</span>
+
+<span class="sd">        :param experimentid: Id of the new experiment</span>
+<span class="sd">        :type experimentid: str</span>
+<span class="sd">        :param address: Adress of the destination set of nodes</span>
+<span class="sd">        :type address: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">payload</span> <span class="o">=</span> <span class="n">ET</span><span class="o">.</span><span class="n">Element</span><span class="p">(</span><span class="s">&quot;omf-message&quot;</span><span class="p">)</span>
+        <span class="n">newexp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_id_element</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span><span class="s">&quot;EXPERIMENT_NEW&quot;</span><span class="p">)</span>
+        <span class="n">experimentid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">newexp</span><span class="p">,</span><span class="s">&quot;EXPERIMENT_ID&quot;</span><span class="p">,</span><span class="n">experimentid</span><span class="p">)</span>
+        <span class="n">sliceid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">newexp</span><span class="p">,</span><span class="s">&quot;SLICEID&quot;</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">_slice_id</span><span class="p">)</span>
+        <span class="n">expid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">newexp</span><span class="p">,</span><span class="s">&quot;EXPID&quot;</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">_exp_id</span><span class="p">)</span>
+        <span class="n">address</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">newexp</span><span class="p">,</span><span class="s">&quot;ADDRESS&quot;</span><span class="p">,</span><span class="n">address</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">payload</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/omf/messages_6.html b/doc/sphinx/_build/html/_modules/nepi/resources/omf/messages_6.html
new file mode 100644 (file)
index 0000000..6e54de8
--- /dev/null
@@ -0,0 +1,343 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.omf.messages_6 &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.omf.messages_6</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+<span class="c">#         Julien Tribino &lt;julien.tribino@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">xml.etree</span> <span class="kn">import</span> <span class="n">cElementTree</span> <span class="k">as</span> <span class="n">ET</span>
+
+<div class="viewcode-block" id="MessageHandler"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.messages_6.MessageHandler">[docs]</a><span class="k">class</span> <span class="nc">MessageHandler</span><span class="p">():</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    .. class:: Class Args :</span>
+<span class="sd">      </span>
+<span class="sd">        :param sliceid: Slice Name (= Xmpp Slice)</span>
+<span class="sd">        :type expid: str</span>
+<span class="sd">        :param expid: Experiment ID (= Xmpp User)</span>
+<span class="sd">        :type expid: str</span>
+
+<span class="sd">    .. note::</span>
+
+<span class="sd">       This class is used only for OMF 5.4 Protocol and is going to become unused</span>
+
+<span class="sd">    &quot;&quot;&quot;</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        </span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">pass</span>
+
+    <span class="k">def</span> <span class="nf">_type_element</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">type_elt</span><span class="p">,</span> <span class="n">xmlns</span><span class="p">,</span> <span class="n">msg_id</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Insert a markup element with an id</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">elt</span> <span class="o">=</span> <span class="n">ET</span><span class="o">.</span><span class="n">Element</span><span class="p">(</span><span class="n">type_elt</span><span class="p">)</span>
+        <span class="n">elt</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;xmlns&quot;</span><span class="p">,</span> <span class="n">xmlns</span><span class="p">)</span>
+        <span class="n">elt</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;mid&quot;</span><span class="p">,</span> <span class="n">msg_id</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">elt</span>
+
+    
+
+    <span class="k">def</span> <span class="nf">_attr_element</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parent</span><span class="p">,</span> <span class="n">markup</span><span class="p">,</span> <span class="n">text</span><span class="p">,</span> <span class="n">type_key</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">type_value</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Insert a markup element with a text (value)</span>
+
+<span class="sd">        :param parent: Parent element in an XML point of view</span>
+<span class="sd">        :type parent: ElementTree Element</span>
+<span class="sd">        :param markup: Name of the markup</span>
+<span class="sd">        :type markup: str</span>
+<span class="sd">        :param text: Value of the markup element</span>
+<span class="sd">        :type text: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">elt</span> <span class="o">=</span> <span class="n">ET</span><span class="o">.</span><span class="n">SubElement</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="n">markup</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">type_key</span> <span class="ow">and</span> <span class="n">type_value</span><span class="p">:</span>
+            <span class="n">elt</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">type_key</span><span class="p">,</span> <span class="n">type_value</span><span class="p">)</span>
+        <span class="n">elt</span><span class="o">.</span><span class="n">text</span> <span class="o">=</span> <span class="n">text</span>
+        <span class="k">return</span> <span class="n">elt</span>
+
+    <span class="k">def</span> <span class="nf">_id_element</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parent</span><span class="p">,</span> <span class="n">markup</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Insert a markup element with a text (value)</span>
+
+<span class="sd">        :param parent: Parent element in an XML point of view</span>
+<span class="sd">        :type parent: ElementTree Element</span>
+<span class="sd">        :param markup: Name of the markup</span>
+<span class="sd">        :type markup: str</span>
+<span class="sd">        :param text: Value of the markup element</span>
+<span class="sd">        :type text: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">elt</span> <span class="o">=</span> <span class="n">ET</span><span class="o">.</span><span class="n">SubElement</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="n">markup</span><span class="p">)</span>
+        <span class="n">elt</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">elt</span>
+
+<div class="viewcode-block" id="MessageHandler.create_function"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.messages_6.MessageHandler.create_function">[docs]</a>    <span class="k">def</span> <span class="nf">create_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg_id</span><span class="p">,</span> <span class="n">src</span><span class="p">,</span> <span class="n">rtype</span><span class="p">,</span> <span class="n">timestamp</span><span class="p">,</span> <span class="n">props</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">guards</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Build a create message</span>
+
+<span class="sd">        :param msg_id: Id of the message</span>
+<span class="sd">        :type msg_id: str</span>
+<span class="sd">        :param src: Src node that send the message (jabber source)</span>
+<span class="sd">        :type src: str</span>
+<span class="sd">        :param rtype: Type of the object</span>
+<span class="sd">        :type rtype: str</span>
+<span class="sd">        :param timestamp: Unix Timestamp</span>
+<span class="sd">        :type timestamp: str</span>
+<span class="sd">        :param props: List of properties</span>
+<span class="sd">        :type props: list</span>
+<span class="sd">        :param guards: list of guards (assertions for properties)</span>
+<span class="sd">        :type guards: list</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">payload</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_type_element</span><span class="p">(</span><span class="s">&quot;create&quot;</span><span class="p">,</span> <span class="s">&quot;http://schema.mytestbed.net/omf/6.0/protocol&quot;</span><span class="p">,</span> <span class="n">msg_id</span> <span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span><span class="s">&quot;src&quot;</span><span class="p">,</span><span class="n">src</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span><span class="s">&quot;ts&quot;</span><span class="p">,</span><span class="n">timestamp</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span><span class="s">&quot;rtype&quot;</span><span class="p">,</span><span class="n">rtype</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">props</span> <span class="p">:</span>
+            <span class="k">if</span> <span class="n">rtype</span> <span class="o">==</span> <span class="s">&quot;application&quot;</span> <span class="p">:</span>
+                <span class="n">properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_id_element</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span><span class="s">&quot;props&quot;</span><span class="p">,</span><span class="s">&quot;xmlns:application&quot;</span><span class="p">,</span>
+                      <span class="s">&quot;http://schema.mytestbed.net/omf/6.0/protocol/application&quot;</span><span class="p">)</span>
+            <span class="k">elif</span> <span class="n">rtype</span> <span class="o">==</span> <span class="s">&quot;wlan&quot;</span> <span class="p">:</span>
+                <span class="n">properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_id_element</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span><span class="s">&quot;props&quot;</span><span class="p">,</span><span class="s">&quot;xmlns:wlan&quot;</span><span class="p">,</span>
+                      <span class="s">&quot;http://schema.mytestbed.net/omf/6.0/protocol/wlan&quot;</span><span class="p">)</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="n">properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span><span class="s">&quot;props&quot;</span><span class="p">,</span><span class="s">&quot;&quot;</span><span class="p">)</span>
+
+            <span class="k">for</span> <span class="n">prop</span> <span class="ow">in</span> <span class="n">props</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
+                <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">props</span><span class="p">[</span><span class="n">prop</span><span class="p">],</span><span class="nb">str</span><span class="p">):</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span><span class="n">prop</span><span class="p">,</span><span class="n">props</span><span class="p">[</span><span class="n">prop</span><span class="p">],</span><span class="n">type_key</span><span class="o">=</span><span class="s">&quot;type&quot;</span><span class="p">,</span> <span class="n">type_value</span> <span class="o">=</span> <span class="s">&quot;string&quot;</span><span class="p">)</span>
+                <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">props</span><span class="p">[</span><span class="n">prop</span><span class="p">],</span><span class="nb">dict</span><span class="p">):</span>
+                    <span class="n">key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span><span class="n">prop</span><span class="p">,</span><span class="s">&quot;&quot;</span><span class="p">,</span><span class="n">type_key</span><span class="o">=</span><span class="s">&quot;type&quot;</span><span class="p">,</span> <span class="n">type_value</span> <span class="o">=</span> <span class="s">&quot;hash&quot;</span><span class="p">)</span>
+                    <span class="k">for</span> <span class="n">comp</span> <span class="ow">in</span> <span class="n">props</span><span class="p">[</span><span class="n">prop</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">key</span><span class="p">,</span><span class="n">comp</span><span class="p">,</span><span class="n">props</span><span class="p">[</span><span class="n">prop</span><span class="p">][</span><span class="n">comp</span><span class="p">],</span><span class="n">type_key</span><span class="o">=</span><span class="s">&quot;type&quot;</span><span class="p">,</span> <span class="n">type_value</span> <span class="o">=</span> <span class="s">&quot;string&quot;</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">guards</span> <span class="p">:</span>
+            <span class="n">guardians</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span><span class="s">&quot;guard&quot;</span><span class="p">,</span><span class="s">&quot;&quot;</span><span class="p">)</span>
+            <span class="k">for</span> <span class="n">guard</span> <span class="ow">in</span> <span class="n">guards</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">guardians</span><span class="p">,</span><span class="n">guard</span><span class="p">,</span><span class="n">guards</span><span class="p">[</span><span class="n">guard</span><span class="p">],</span><span class="n">type_key</span><span class="o">=</span><span class="s">&quot;type&quot;</span><span class="p">,</span> <span class="n">type_value</span> <span class="o">=</span> <span class="s">&quot;string&quot;</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">payload</span>
+</div>
+<div class="viewcode-block" id="MessageHandler.configure_function"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.messages_6.MessageHandler.configure_function">[docs]</a>    <span class="k">def</span> <span class="nf">configure_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg_id</span><span class="p">,</span> <span class="n">src</span><span class="p">,</span> <span class="n">timestamp</span><span class="p">,</span> <span class="n">props</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">guards</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Build a configure message</span>
+
+<span class="sd">        :param msg_id: Id of the message</span>
+<span class="sd">        :type msg_id: str</span>
+<span class="sd">        :param src: Src node that send the message (jabber source)</span>
+<span class="sd">        :type src: str</span>
+<span class="sd">        :param timestamp: Unix Timestamp</span>
+<span class="sd">        :type timestamp: str</span>
+<span class="sd">        :param props: List of properties</span>
+<span class="sd">        :type props: list</span>
+<span class="sd">        :param guards: list of guards (assertions for properties)</span>
+<span class="sd">        :type guards: list</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">payload</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_type_element</span><span class="p">(</span><span class="s">&quot;configure&quot;</span><span class="p">,</span> <span class="s">&quot;http://schema.mytestbed.net/omf/6.0/protocol&quot;</span><span class="p">,</span> <span class="n">msg_id</span> <span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span><span class="s">&quot;src&quot;</span><span class="p">,</span><span class="n">src</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span><span class="s">&quot;ts&quot;</span><span class="p">,</span><span class="n">timestamp</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">props</span> <span class="p">:</span>
+            <span class="n">properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span><span class="s">&quot;props&quot;</span><span class="p">,</span><span class="s">&quot;&quot;</span><span class="p">)</span>
+            <span class="k">for</span> <span class="n">prop</span> <span class="ow">in</span> <span class="n">props</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span><span class="n">prop</span><span class="p">,</span><span class="n">props</span><span class="p">[</span><span class="n">prop</span><span class="p">],</span><span class="n">type_key</span><span class="o">=</span><span class="s">&quot;type&quot;</span><span class="p">,</span> <span class="n">type_value</span> <span class="o">=</span> <span class="s">&quot;symbol&quot;</span><span class="p">)</span>
+           
+        <span class="k">if</span> <span class="n">guards</span> <span class="p">:</span>
+            <span class="n">guardians</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span><span class="s">&quot;guard&quot;</span><span class="p">,</span><span class="s">&quot;&quot;</span><span class="p">)</span>
+            <span class="k">for</span> <span class="n">guard</span> <span class="ow">in</span> <span class="n">guards</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">guardians</span><span class="p">,</span><span class="n">guard</span><span class="p">,</span><span class="n">guards</span><span class="p">[</span><span class="n">guard</span><span class="p">],</span><span class="n">type_key</span><span class="o">=</span><span class="s">&quot;type&quot;</span><span class="p">,</span> <span class="n">type_value</span> <span class="o">=</span> <span class="s">&quot;string&quot;</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">payload</span>
+</div>
+<div class="viewcode-block" id="MessageHandler.request_function"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.messages_6.MessageHandler.request_function">[docs]</a>    <span class="k">def</span> <span class="nf">request_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg_id</span><span class="p">,</span> <span class="n">src</span><span class="p">,</span> <span class="n">timestamp</span><span class="p">,</span>  <span class="n">props</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">guards</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Build a request message</span>
+
+<span class="sd">        :param msg_id: Id of the message</span>
+<span class="sd">        :type msg_id: str</span>
+<span class="sd">        :param src: Src node that send the message (jabber source)</span>
+<span class="sd">        :type src: str</span>
+<span class="sd">        :param timestamp: Unix Timestamp</span>
+<span class="sd">        :type timestamp: str</span>
+<span class="sd">        :param props: List of properties</span>
+<span class="sd">        :type props: list</span>
+<span class="sd">        :param guards: list of guards (assertions for properties)</span>
+<span class="sd">        :type guards: list</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">payload</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_type_element</span><span class="p">(</span><span class="s">&quot;request&quot;</span><span class="p">,</span> <span class="s">&quot;http://schema.mytestbed.net/omf/6.0/protocol&quot;</span><span class="p">,</span> <span class="n">msg_id</span> <span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span><span class="s">&quot;src&quot;</span><span class="p">,</span><span class="n">src</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span><span class="s">&quot;ts&quot;</span><span class="p">,</span><span class="n">timestamp</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">props</span> <span class="p">:</span>
+            <span class="n">properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span><span class="s">&quot;props&quot;</span><span class="p">,</span><span class="s">&quot;&quot;</span><span class="p">)</span>
+            <span class="k">for</span> <span class="n">prop</span> <span class="ow">in</span> <span class="n">props</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span><span class="n">prop</span><span class="p">,</span><span class="n">props</span><span class="p">[</span><span class="n">prop</span><span class="p">])</span>
+
+        <span class="k">if</span> <span class="n">guards</span> <span class="p">:</span>
+            <span class="n">guardians</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span><span class="s">&quot;guard&quot;</span><span class="p">,</span><span class="s">&quot;&quot;</span><span class="p">)</span>
+            <span class="k">for</span> <span class="n">guard</span> <span class="ow">in</span> <span class="n">guards</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">guardians</span><span class="p">,</span><span class="n">guard</span><span class="p">,</span><span class="n">guards</span><span class="p">[</span><span class="n">guard</span><span class="p">])</span>
+        <span class="k">return</span> <span class="n">payload</span>
+
+<span class="c">#  For now, we don&#39;t need the inform message since it is ht RC that send them.</span>
+
+<span class="c">#    def inform_function(self, msg_id, src, timestamp, cid, itype):</span>
+<span class="c">#        &quot;&quot;&quot; Build an inform message</span>
+
+<span class="c">#        :param msg_id: Id of the message</span>
+<span class="c">#        :type msg_id: str</span>
+<span class="c">#        :param src: Src node that send the message (jabber source)</span>
+<span class="c">#        :type src: str</span>
+<span class="c">#        :param rtype: Type of the object</span>
+<span class="c">#        :type rtype: str</span>
+<span class="c">#        :param timestamp: Unix Timestamp</span>
+<span class="c">#        :type timestamp: str</span>
+<span class="c">#        :param cid: Id of the orignial message</span>
+<span class="c">#        :type cid: str</span>
+<span class="c">#        :param itype: type of the object created</span>
+<span class="c">#        :type itype: str</span>
+<span class="c">#        &quot;&quot;&quot;</span>
+
+<span class="c">#        payload = self._type_element(&quot;inform&quot;, &quot;http://schema.mytestbed.net/omf/6.0/protocol&quot;, msg_id )</span>
+<span class="c">#        sliceid = self._attr_element(payload,&quot;src&quot;,src)</span>
+<span class="c">#        expid = self._attr_element(config,&quot;ts&quot;,timestamp)</span>
+<span class="c">#        target = self._attr_element(config,&quot;cid&quot;,cid)</span>
+<span class="c">#        value = self._attr_element(config,&quot;itype&quot;,value)</span>
+<span class="c">#        path = self._attr_element(config,&quot;properties&quot;,path)</span>
+<span class="c">#        return payload</span>
+</div>
+<div class="viewcode-block" id="MessageHandler.release_function"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.messages_6.MessageHandler.release_function">[docs]</a>    <span class="k">def</span> <span class="nf">release_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg_id</span><span class="p">,</span> <span class="n">src</span><span class="p">,</span> <span class="n">timestamp</span><span class="p">,</span> <span class="n">res_id</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">props</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">guards</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Build a release message</span>
+
+<span class="sd">        :param msg_id: Id of the message</span>
+<span class="sd">        :type msg_id: str</span>
+<span class="sd">        :param src: Src node that send the message (jabber source)</span>
+<span class="sd">        :type src: str</span>
+<span class="sd">        :param timestamp: Unix Timestamp</span>
+<span class="sd">        :type timestamp: str</span>
+<span class="sd">        :param res_id: Id of the release resource</span>
+<span class="sd">        :type res_id: str</span>
+<span class="sd">        :param props: List of properties</span>
+<span class="sd">        :type props: list</span>
+<span class="sd">        :param guards: list of guards (assertions for properties)</span>
+<span class="sd">        :type guards: list</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">payload</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_type_element</span><span class="p">(</span><span class="s">&quot;release&quot;</span><span class="p">,</span> <span class="s">&quot;http://schema.mytestbed.net/omf/6.0/protocol&quot;</span><span class="p">,</span> <span class="n">msg_id</span> <span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span><span class="s">&quot;src&quot;</span><span class="p">,</span><span class="n">src</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span><span class="s">&quot;ts&quot;</span><span class="p">,</span><span class="n">timestamp</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">res_id</span> <span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span><span class="s">&quot;res_id&quot;</span><span class="p">,</span><span class="n">res_id</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">props</span> <span class="p">:</span>
+            <span class="n">properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_id_element</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span><span class="s">&quot;props&quot;</span><span class="p">,</span><span class="s">&quot;xmlns:frcp&quot;</span><span class="p">,</span>
+                      <span class="s">&quot;http://schema.mytestbed.net/omf/6.0/protocol&quot;</span><span class="p">)</span>
+            <span class="k">for</span> <span class="n">prop</span> <span class="ow">in</span> <span class="n">props</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span><span class="n">prop</span><span class="p">,</span><span class="n">props</span><span class="p">[</span><span class="n">prop</span><span class="p">])</span>
+
+        <span class="k">if</span> <span class="n">guards</span> <span class="p">:</span>
+            <span class="n">guardians</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span><span class="s">&quot;guard&quot;</span><span class="p">,</span><span class="s">&quot;&quot;</span><span class="p">)</span>
+            <span class="k">for</span> <span class="n">guard</span> <span class="ow">in</span> <span class="n">guards</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_attr_element</span><span class="p">(</span><span class="n">guardians</span><span class="p">,</span><span class="n">guard</span><span class="p">,</span><span class="n">guards</span><span class="p">[</span><span class="n">guard</span><span class="p">])</span>
+
+        <span class="k">return</span> <span class="n">payload</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/omf/node.html b/doc/sphinx/_build/html/_modules/nepi/resources/omf/node.html
new file mode 100644 (file)
index 0000000..8648767
--- /dev/null
@@ -0,0 +1,267 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.omf.node &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.omf.node</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+<span class="c">#         Julien Tribino &lt;julien.tribino@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.util.timefuncs</span> <span class="kn">import</span> <span class="n">tnow</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span> 
+<span class="kn">from</span> <span class="nn">nepi.resources.omf.omf_resource</span> <span class="kn">import</span> <span class="n">ResourceGateway</span><span class="p">,</span> <span class="n">OMFResource</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.omf.omf_api_factory</span> <span class="kn">import</span> <span class="n">OMFAPIFactory</span>
+
+<span class="kn">import</span> <span class="nn">time</span>
+
+<span class="n">reschedule_check</span> <span class="o">=</span> <span class="s">&quot;1s&quot;</span>
+<span class="n">confirmation_counter</span> <span class="o">=</span> <span class="mi">3600</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="OMFNode"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.node.OMFNode">[docs]</a><span class="k">class</span> <span class="nc">OMFNode</span><span class="p">(</span><span class="n">OMFResource</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    .. class:: Class Args :</span>
+<span class="sd">      </span>
+<span class="sd">        :param ec: The Experiment controller</span>
+<span class="sd">        :type ec: ExperimentController</span>
+<span class="sd">        :param guid: guid of the RM</span>
+<span class="sd">        :type guid: int</span>
+<span class="sd">        :param creds: Credentials to communicate with the rm (XmppClient for OMF)</span>
+<span class="sd">        :type creds: dict</span>
+
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;omf::Node&quot;</span>
+    <span class="n">_authorized_connections</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;omf::Application&quot;</span> <span class="p">,</span> <span class="s">&quot;omf::WifiInterface&quot;</span><span class="p">]</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;Register the attributes of an OMF Node</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">hostname</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;hostname&quot;</span><span class="p">,</span> <span class="s">&quot;Hostname of the machine&quot;</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">hostname</span><span class="p">)</span>
+
+    <span class="c"># XXX: We don&#39;t necessary need to have the credentials at the </span>
+    <span class="c"># moment we create the RM</span>
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        :param ec: The Experiment controller</span>
+<span class="sd">        :type ec: ExperimentController</span>
+<span class="sd">        :param guid: guid of the RM</span>
+<span class="sd">        :type guid: int</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">OMFNode</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">_omf_api</span> <span class="o">=</span> <span class="bp">None</span> 
+
+        <span class="c"># For performance tests</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">perf</span> <span class="o">=</span> <span class="bp">True</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">begin_deploy_time</span> <span class="o">=</span> <span class="bp">None</span>
+
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="OMFNode.exp_id"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.node.OMFNode.exp_id">[docs]</a>    <span class="k">def</span> <span class="nf">exp_id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">exp_id</span>
+</div>
+<div class="viewcode-block" id="OMFNode.valid_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.node.OMFNode.valid_connection">[docs]</a>    <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Check if the connection with the guid in parameter is possible. </span>
+<span class="sd">        Only meaningful connections are allowed.</span>
+
+<span class="sd">        :param guid: Guid of the current RM</span>
+<span class="sd">        :type guid: int</span>
+<span class="sd">        :rtype:  Boolean</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">rm</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">()</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_authorized_connections</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Connection between </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s"> and </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s"> accepted&quot;</span> <span class="o">%</span> <span class="p">(</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_guid</span><span class="p">,</span> <span class="n">rm</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">(),</span> <span class="n">guid</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">return</span> <span class="bp">True</span>
+
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Connection between </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s"> and </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s"> refused&quot;</span> <span class="o">%</span> <span class="p">(</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_guid</span><span class="p">,</span> <span class="n">rm</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">(),</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="bp">False</span>
+</div>
+<div class="viewcode-block" id="OMFNode.do_deploy"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.node.OMFNode.do_deploy">[docs]</a>    <span class="k">def</span> <span class="nf">do_deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Deploy the RM. It means : Send Xmpp Message Using OMF protocol </span>
+<span class="sd">            to enroll the node into the experiment.</span>
+
+<span class="sd">        &quot;&quot;&quot;</span> 
+      <span class="c">## For performance test</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">perf</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">begin_deploy_time</span> <span class="o">=</span> <span class="n">tnow</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">perf</span> <span class="o">=</span> <span class="bp">False</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppServer&#39;</span><span class="p">):</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;XmppServer is not initialzed. XMPP Connections impossible&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version&#39;</span><span class="p">):</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Version of OMF is not indicated&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppUser&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppPort&#39;</span><span class="p">)</span> 
+                   <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppPassword&#39;</span><span class="p">)):</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Credentials are not all initialzed. Default values will be used&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_omf_api</span> <span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_omf_api</span> <span class="o">=</span> <span class="n">OMFAPIFactory</span><span class="o">.</span><span class="n">get_api</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version&#39;</span><span class="p">),</span> 
+              <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppServer&#39;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppUser&#39;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppPort&#39;</span><span class="p">),</span>
+               <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppPassword&#39;</span><span class="p">),</span> <span class="n">exp_id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">exp_id</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;hostname&#39;</span><span class="p">)</span> <span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Hostname&#39;s value is not initialized&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version&#39;</span><span class="p">)</span> <span class="o">==</span> <span class="s">&quot;5&quot;</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_omf_api</span><span class="o">.</span><span class="n">enroll_host</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;hostname&#39;</span><span class="p">))</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_omf_api</span><span class="o">.</span><span class="n">enroll_topic</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;hostname&#39;</span><span class="p">))</span>
+
+        <span class="nb">super</span><span class="p">(</span><span class="n">OMFNode</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_deploy</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="OMFNode.do_release"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.node.OMFNode.do_release">[docs]</a>    <span class="k">def</span> <span class="nf">do_release</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Clean the RM at the end of the experiment by unenrolling</span>
+<span class="sd">        the node from the topic</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="kn">from</span> <span class="nn">nepi.resources.omf.application</span> <span class="kn">import</span> <span class="n">OMFApplication</span>
+        <span class="n">rm_list</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">OMFApplication</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+        <span class="k">if</span> <span class="n">rm_list</span><span class="p">:</span>
+            <span class="k">for</span> <span class="n">rm</span> <span class="ow">in</span> <span class="n">rm_list</span><span class="p">:</span>
+                <span class="k">if</span> <span class="n">rm</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span><span class="p">:</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">release</span><span class="p">)</span>
+                    <span class="k">return</span> 
+
+        <span class="kn">from</span> <span class="nn">nepi.resources.omf.interface</span> <span class="kn">import</span> <span class="n">OMFWifiInterface</span>
+        <span class="n">rm_list</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">OMFWifiInterface</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+        <span class="k">if</span> <span class="n">rm_list</span><span class="p">:</span>
+            <span class="k">for</span> <span class="n">rm</span> <span class="ow">in</span> <span class="n">rm_list</span><span class="p">:</span>
+                <span class="k">if</span> <span class="n">rm</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span><span class="p">:</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">release</span><span class="p">)</span>
+                    <span class="k">return</span> 
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_omf_api</span><span class="p">:</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version&#39;</span><span class="p">)</span> <span class="o">==</span> <span class="s">&quot;5&quot;</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_omf_api</span><span class="o">.</span><span class="n">release</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;hostname&#39;</span><span class="p">))</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_omf_api</span><span class="o">.</span><span class="n">unenroll_topic</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;hostname&#39;</span><span class="p">))</span>
+
+            <span class="n">OMFAPIFactory</span><span class="o">.</span><span class="n">release_api</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version&#39;</span><span class="p">),</span> 
+              <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppServer&#39;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppUser&#39;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppPort&#39;</span><span class="p">),</span>
+               <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;xmppPassword&#39;</span><span class="p">),</span> <span class="n">exp_id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">exp_id</span><span class="p">)</span>
+
+        <span class="nb">super</span><span class="p">(</span><span class="n">OMFNode</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_release</span><span class="p">()</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/omf/omf5_api.html b/doc/sphinx/_build/html/_modules/nepi/resources/omf/omf5_api.html
new file mode 100644 (file)
index 0000000..fae34e8
--- /dev/null
@@ -0,0 +1,402 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.omf.omf5_api &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.omf.omf5_api</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+<span class="c">#         Julien Tribino &lt;julien.tribino@inria.fr&gt;</span>
+
+<span class="kn">import</span> <span class="nn">ssl</span>
+<span class="kn">import</span> <span class="nn">sys</span>
+<span class="kn">import</span> <span class="nn">time</span>
+
+<span class="kn">from</span> <span class="nn">nepi.util.logger</span> <span class="kn">import</span> <span class="n">Logger</span>
+
+<span class="kn">from</span> <span class="nn">nepi.resources.omf.omf_client</span> <span class="kn">import</span> <span class="n">OMFClient</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.omf.messages_5_4</span> <span class="kn">import</span> <span class="n">MessageHandler</span>
+
+<div class="viewcode-block" id="OMF5API"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf5_api.OMF5API">[docs]</a><span class="k">class</span> <span class="nc">OMF5API</span><span class="p">(</span><span class="n">Logger</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    .. class:: Class Args :</span>
+<span class="sd">      </span>
+<span class="sd">        :param host: Xmpp Server</span>
+<span class="sd">        :type host: str</span>
+<span class="sd">        :param slice: Xmpp Slice</span>
+<span class="sd">        :type slice: str</span>
+<span class="sd">        :param port: Xmpp Port</span>
+<span class="sd">        :type port: str</span>
+<span class="sd">        :param password: Xmpp password</span>
+<span class="sd">        :type password: str</span>
+<span class="sd">        :param xmpp_root: Root of the Xmpp Topic Architecture</span>
+<span class="sd">        :type xmpp_root: str</span>
+
+<span class="sd">    .. note::</span>
+
+<span class="sd">       This class is the implementation of an OMF 5.4 API. </span>
+<span class="sd">       Since the version 5.4.1, the Topic Architecture start with OMF_5.4 </span>
+<span class="sd">       instead of OMF used for OMF5.3</span>
+
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">host</span><span class="p">,</span> <span class="nb">slice</span><span class="p">,</span> <span class="n">port</span><span class="p">,</span> <span class="n">password</span><span class="p">,</span> <span class="n">xmpp_root</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> 
+            <span class="n">exp_id</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        :param host: Xmpp Server</span>
+<span class="sd">        :type host: str</span>
+<span class="sd">        :param slice: Xmpp Slice</span>
+<span class="sd">        :type slice: str</span>
+<span class="sd">        :param port: Xmpp Port</span>
+<span class="sd">        :type port: str</span>
+<span class="sd">        :param password: Xmpp password</span>
+<span class="sd">        :type password: str</span>
+<span class="sd">        :param xmpp_root: Root of the Xmpp Topic Architecture</span>
+<span class="sd">        :type xmpp_root: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">OMF5API</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="s">&quot;OMF5API&quot;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_exp_id</span> <span class="o">=</span> <span class="n">exp_id</span> 
+        <span class="bp">self</span><span class="o">.</span><span class="n">_user</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="nb">slice</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_exp_id</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_slice</span> <span class="o">=</span> <span class="nb">slice</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_host</span> <span class="o">=</span> <span class="n">host</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_port</span> <span class="o">=</span> <span class="n">port</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_password</span> <span class="o">=</span> <span class="n">password</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_hostnames</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_xmpp_root</span> <span class="o">=</span> <span class="n">xmpp_root</span> <span class="ow">or</span> <span class="s">&quot;OMF_5.4&quot;</span>
+
+        <span class="c"># OMF xmpp client</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_client</span> <span class="o">=</span> <span class="bp">None</span>
+
+        <span class="c"># message handler</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_message</span> <span class="o">=</span> <span class="bp">None</span>
+
+        <span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">version_info</span> <span class="o">&lt;</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">0</span><span class="p">):</span>
+            <span class="nb">reload</span><span class="p">(</span><span class="n">sys</span><span class="p">)</span>
+            <span class="n">sys</span><span class="o">.</span><span class="n">setdefaultencoding</span><span class="p">(</span><span class="s">&#39;utf8&#39;</span><span class="p">)</span>
+
+        <span class="c"># instantiate the xmpp client</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_init_client</span><span class="p">()</span>
+
+        <span class="c"># register xmpp nodes for the experiment</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_enroll_experiment</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_enroll_newexperiment</span><span class="p">()</span>
+
+        <span class="c"># register xmpp logger for the experiment</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_enroll_logger</span><span class="p">()</span>
+
+    <span class="k">def</span> <span class="nf">_init_client</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Initialize XMPP Client</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">jid</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">@</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_user</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_host</span><span class="p">)</span>
+        <span class="n">xmpp</span> <span class="o">=</span> <span class="n">OMFClient</span><span class="p">(</span><span class="n">jid</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_password</span><span class="p">)</span>
+        <span class="c"># PROTOCOL_SSLv3 required for compatibility with OpenFire</span>
+        <span class="n">xmpp</span><span class="o">.</span><span class="n">ssl_version</span> <span class="o">=</span> <span class="n">ssl</span><span class="o">.</span><span class="n">PROTOCOL_SSLv3</span>
+
+        <span class="k">if</span> <span class="n">xmpp</span><span class="o">.</span><span class="n">connect</span><span class="p">((</span><span class="bp">self</span><span class="o">.</span><span class="n">_host</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_port</span><span class="p">)):</span>
+            <span class="n">xmpp</span><span class="o">.</span><span class="n">process</span><span class="p">(</span><span class="n">block</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
+            <span class="k">while</span> <span class="ow">not</span> <span class="n">xmpp</span><span class="o">.</span><span class="n">ready</span><span class="p">:</span>
+                <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_client</span> <span class="o">=</span> <span class="n">xmpp</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_message</span> <span class="o">=</span> <span class="n">MessageHandler</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_slice</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_user</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Unable to connect to the XMPP server.&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_enroll_experiment</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Create and Subscribe to the Session Topic</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">xmpp_node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_exp_session_id</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">xmpp_node</span><span class="p">)</span>
+        <span class="c">#print &quot;Create experiment sesion id topics !!&quot; </span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">subscribe</span><span class="p">(</span><span class="n">xmpp_node</span><span class="p">)</span>
+        <span class="c">#print &quot;Subscribe to experiment sesion id topics !!&quot; </span>
+
+
+    <span class="k">def</span> <span class="nf">_enroll_newexperiment</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Publish New Experiment Message</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">address</span> <span class="o">=</span> <span class="s">&quot;/</span><span class="si">%s</span><span class="s">/</span><span class="si">%s</span><span class="s">/</span><span class="si">%s</span><span class="s">/</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_host</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_xmpp_root</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_slice</span><span class="p">,</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_user</span><span class="p">)</span>
+        <span class="c">#print address</span>
+        <span class="n">payload</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">newexp_function</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_user</span><span class="p">,</span> <span class="n">address</span><span class="p">)</span>
+        <span class="n">slice_sid</span> <span class="o">=</span> <span class="s">&quot;/</span><span class="si">%s</span><span class="s">/</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_xmpp_root</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_slice</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">publish</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span> <span class="n">slice_sid</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_enroll_logger</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Create and Subscribe to the Logger Topic</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">xmpp_node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_logger_session_id</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">xmpp_node</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">subscribe</span><span class="p">(</span><span class="n">xmpp_node</span><span class="p">)</span>
+
+        <span class="n">payload</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">log_function</span><span class="p">(</span><span class="s">&quot;2&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;nodeHandler::NodeHandler&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;INFO&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;OMF Experiment Controller 5.4 (git 529a626)&quot;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">publish</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span> <span class="n">xmpp_node</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_host_session_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">hostname</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Return the Topic Name as /xmpp_root/slice/user/hostname</span>
+
+<span class="sd">        :param hostname: Full hrn of the node</span>
+<span class="sd">        :type hostname: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="s">&quot;/</span><span class="si">%s</span><span class="s">/</span><span class="si">%s</span><span class="s">/</span><span class="si">%s</span><span class="s">/</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_xmpp_root</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_slice</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_user</span><span class="p">,</span> 
+                <span class="n">hostname</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_host_resource_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">hostname</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Return the Topic Name as /xmpp_root/slice/resources/hostname</span>
+
+<span class="sd">        :param hostname: Full hrn of the node</span>
+<span class="sd">        :type hostname: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="s">&quot;/</span><span class="si">%s</span><span class="s">/</span><span class="si">%s</span><span class="s">/resources/</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_xmpp_root</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_slice</span><span class="p">,</span> <span class="n">hostname</span><span class="p">)</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_exp_session_id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Return the Topic Name as /xmpp_root/slice/user</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="s">&quot;/</span><span class="si">%s</span><span class="s">/</span><span class="si">%s</span><span class="s">/</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_xmpp_root</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_slice</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_user</span><span class="p">)</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_logger_session_id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Return the Topic Name as /xmpp_root/slice/LOGGER</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="s">&quot;/</span><span class="si">%s</span><span class="s">/</span><span class="si">%s</span><span class="s">/</span><span class="si">%s</span><span class="s">/LOGGER&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_xmpp_root</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_slice</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_user</span><span class="p">)</span>
+
+<div class="viewcode-block" id="OMF5API.delete"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf5_api.OMF5API.delete">[docs]</a>    <span class="k">def</span> <span class="nf">delete</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">hostname</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Delete the topic corresponding to the hostname for this session</span>
+
+<span class="sd">        :param hostname: Full hrn of the node</span>
+<span class="sd">        :type hostname: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">hostname</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_hostnames</span><span class="p">:</span>
+            <span class="k">return</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">_hostnames</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">hostname</span><span class="p">)</span>
+
+        <span class="n">xmpp_node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_host_session_id</span><span class="p">(</span><span class="n">hostname</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="n">xmpp_node</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="OMF5API.enroll_host"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf5_api.OMF5API.enroll_host">[docs]</a>    <span class="k">def</span> <span class="nf">enroll_host</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">hostname</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Create and Subscribe to the session topic and the resources</span>
+<span class="sd">            corresponding to the hostname</span>
+
+<span class="sd">        :param hostname: Full hrn of the node</span>
+<span class="sd">        :type hostname: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="n">hostname</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_hostnames</span><span class="p">:</span>
+            <span class="k">return</span> 
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">_hostnames</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">hostname</span><span class="p">)</span>
+
+        <span class="n">xmpp_node</span> <span class="o">=</span>  <span class="bp">self</span><span class="o">.</span><span class="n">_host_session_id</span><span class="p">(</span><span class="n">hostname</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">xmpp_node</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">subscribe</span><span class="p">(</span><span class="n">xmpp_node</span><span class="p">)</span>
+
+        <span class="n">xmpp_node</span> <span class="o">=</span>  <span class="bp">self</span><span class="o">.</span><span class="n">_host_resource_id</span><span class="p">(</span><span class="n">hostname</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">subscribe</span><span class="p">(</span><span class="n">xmpp_node</span><span class="p">)</span>
+
+        <span class="n">payload</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">enroll_function</span><span class="p">(</span><span class="s">&quot;1&quot;</span><span class="p">,</span> <span class="s">&quot;*&quot;</span><span class="p">,</span> <span class="s">&quot;1&quot;</span><span class="p">,</span> <span class="n">hostname</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">publish</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span> <span class="n">xmpp_node</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="OMF5API.configure"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf5_api.OMF5API.configure">[docs]</a>    <span class="k">def</span> <span class="nf">configure</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">hostname</span><span class="p">,</span> <span class="n">attribute</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Configure attribute on the node</span>
+
+<span class="sd">        :param hostname: Full hrn of the node</span>
+<span class="sd">        :type hostname: str</span>
+<span class="sd">        :param attribute: Attribute that need to be configured (</span>
+<span class="sd">            often written as /net/wX/attribute, with X the interface number)</span>
+<span class="sd">        :type attribute: str</span>
+<span class="sd">        :param value: Value of the attribute</span>
+<span class="sd">        :type value: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">payload</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">configure_function</span><span class="p">(</span><span class="n">hostname</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">attribute</span><span class="p">)</span>
+        <span class="n">xmpp_node</span> <span class="o">=</span>  <span class="bp">self</span><span class="o">.</span><span class="n">_host_session_id</span><span class="p">(</span><span class="n">hostname</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">publish</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span> <span class="n">xmpp_node</span><span class="p">)</span>
+
+    </div>
+<div class="viewcode-block" id="OMF5API.send_stdin"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf5_api.OMF5API.send_stdin">[docs]</a>    <span class="k">def</span> <span class="nf">send_stdin</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">hostname</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">app_id</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Send to the stdin of the application the value</span>
+
+<span class="sd">        :param hostname: Full hrn of the node</span>
+<span class="sd">        :type hostname: str</span>
+<span class="sd">        :param appid: Application Id (Any id that represents in a unique </span>
+<span class="sd">            way the application)</span>
+<span class="sd">        :type appid: str</span>
+<span class="sd">        :param value: parameter to execute in the stdin of the application</span>
+<span class="sd">        :type value: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">payload</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">stdin_function</span><span class="p">(</span><span class="n">hostname</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">app_id</span><span class="p">)</span>
+        <span class="n">xmpp_node</span> <span class="o">=</span>  <span class="bp">self</span><span class="o">.</span><span class="n">_host_session_id</span><span class="p">(</span><span class="n">hostname</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">publish</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span> <span class="n">xmpp_node</span><span class="p">)</span>
+
+</div>
+<div class="viewcode-block" id="OMF5API.execute"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf5_api.OMF5API.execute">[docs]</a>    <span class="k">def</span> <span class="nf">execute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">hostname</span><span class="p">,</span> <span class="n">app_id</span><span class="p">,</span> <span class="n">arguments</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="n">env</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Execute command on the node</span>
+
+<span class="sd">        :param hostname: Full hrn of the node</span>
+<span class="sd">        :type hostname: str</span>
+<span class="sd">        :param app_id: Application Id (Any id that represents in a unique </span>
+<span class="sd">            way the application)</span>
+<span class="sd">        :type app_id: str</span>
+<span class="sd">        :param arguments: Arguments of the application</span>
+<span class="sd">        :type arguments: str</span>
+<span class="sd">        :param path: Path of the application</span>
+<span class="sd">        :type path: str</span>
+<span class="sd">        :param env: Environnement values for the application</span>
+<span class="sd">        :type env: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">payload</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">execute_function</span><span class="p">(</span><span class="n">hostname</span><span class="p">,</span> <span class="n">app_id</span><span class="p">,</span> <span class="n">arguments</span><span class="p">,</span> 
+                <span class="n">path</span><span class="p">,</span> <span class="n">env</span><span class="p">)</span>
+        <span class="n">xmpp_node</span> <span class="o">=</span>  <span class="bp">self</span><span class="o">.</span><span class="n">_host_session_id</span><span class="p">(</span><span class="n">hostname</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">publish</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span> <span class="n">xmpp_node</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="OMF5API.exit"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf5_api.OMF5API.exit">[docs]</a>    <span class="k">def</span> <span class="nf">exit</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">hostname</span><span class="p">,</span> <span class="n">app_id</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Kill an application started with OMF</span>
+
+<span class="sd">        :param hostname: Full hrn of the node</span>
+<span class="sd">        :type hostname: str</span>
+<span class="sd">        :param app_id: Application Id of the application you want to stop</span>
+<span class="sd">        :type app_id: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">payload</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">exit_function</span><span class="p">(</span><span class="n">hostname</span><span class="p">,</span> <span class="n">app_id</span><span class="p">)</span>
+        <span class="n">xmpp_node</span> <span class="o">=</span>  <span class="bp">self</span><span class="o">.</span><span class="n">_host_session_id</span><span class="p">(</span><span class="n">hostname</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">publish</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span> <span class="n">xmpp_node</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="OMF5API.release"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf5_api.OMF5API.release">[docs]</a>    <span class="k">def</span> <span class="nf">release</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">hostname</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Delete the session and logger topics. Then disconnect </span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="n">hostname</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_hostnames</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="n">hostname</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="OMF5API.disconnect"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf5_api.OMF5API.disconnect">[docs]</a>    <span class="k">def</span> <span class="nf">disconnect</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="p">:</span>
+        <span class="sd">&quot;&quot;&quot; Delete the session and logger topics. Then disconnect </span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_exp_session_id</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_logger_session_id</span><span class="p">)</span>
+
+        <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
+        
+        <span class="c"># Wait the send queue to be empty before disconnect</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">disconnect</span><span class="p">(</span><span class="n">wait</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Disconnected from XMPP Server&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/omf/omf6_api.html b/doc/sphinx/_build/html/_modules/nepi/resources/omf/omf6_api.html
new file mode 100644 (file)
index 0000000..4e069bf
--- /dev/null
@@ -0,0 +1,351 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.omf.omf6_api &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.omf.omf6_api</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+<span class="c">#         Julien Tribino &lt;julien.tribino@inria.fr&gt;</span>
+
+<span class="kn">import</span> <span class="nn">ssl</span>
+<span class="kn">import</span> <span class="nn">sys</span>
+<span class="kn">import</span> <span class="nn">time</span>
+
+<span class="kn">from</span> <span class="nn">nepi.util.timefuncs</span> <span class="kn">import</span> <span class="n">tsformat</span> 
+<span class="kn">import</span> <span class="nn">os</span>
+
+<span class="kn">from</span> <span class="nn">nepi.util.logger</span> <span class="kn">import</span> <span class="n">Logger</span>
+
+<span class="kn">from</span> <span class="nn">nepi.resources.omf.omf_client</span> <span class="kn">import</span> <span class="n">OMFClient</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.omf.messages_6</span> <span class="kn">import</span> <span class="n">MessageHandler</span>
+
+<div class="viewcode-block" id="OMF6API"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf6_api.OMF6API">[docs]</a><span class="k">class</span> <span class="nc">OMF6API</span><span class="p">(</span><span class="n">Logger</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    .. class:: Class Args :</span>
+<span class="sd">      </span>
+<span class="sd">        :param server: Xmpp Server</span>
+<span class="sd">        :type server: str</span>
+<span class="sd">        :param user: Xmpp User</span>
+<span class="sd">        :type user: str</span>
+<span class="sd">        :param port: Xmpp Port</span>
+<span class="sd">        :type port: str</span>
+<span class="sd">        :param password: Xmpp password</span>
+<span class="sd">        :type password: str</span>
+<span class="sd">        :param xmpp_root: Root of the Xmpp Topic Architecture</span>
+<span class="sd">        :type xmpp_root: str</span>
+
+<span class="sd">    .. note::</span>
+
+<span class="sd">       This class is the implementation of an OMF 5.4 API. </span>
+<span class="sd">       Since the version 5.4.1, the Topic Architecture start with OMF_5.4 </span>
+<span class="sd">       instead of OMF used for OMF5.3</span>
+
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">server</span><span class="p">,</span> <span class="n">user</span> <span class="o">=</span> <span class="s">&quot;nepi&quot;</span><span class="p">,</span> <span class="n">port</span><span class="o">=</span><span class="s">&quot;5222&quot;</span><span class="p">,</span> <span class="n">password</span><span class="o">=</span><span class="s">&quot;1234&quot;</span><span class="p">,</span>
+            <span class="n">exp_id</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        :param server: Xmpp Server</span>
+<span class="sd">        :type server: str</span>
+<span class="sd">        :param user: Xmpp User</span>
+<span class="sd">        :type user: str</span>
+<span class="sd">        :param port: Xmpp Port</span>
+<span class="sd">        :type port: str</span>
+<span class="sd">        :param password: Xmpp password</span>
+<span class="sd">        :type password: str</span>
+<span class="sd">        :param xmpp_root: Root of the Xmpp Topic Architecture</span>
+<span class="sd">        :type xmpp_root: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">OMF6API</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="s">&quot;OMF6API&quot;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_exp_id</span> <span class="o">=</span> <span class="n">exp_id</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_user</span> <span class="o">=</span> <span class="n">user</span> <span class="c"># name of the machine that run Nepi</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_server</span> <span class="o">=</span> <span class="n">server</span> <span class="c"># name of the xmpp server</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_port</span> <span class="o">=</span> <span class="n">port</span> <span class="c"># port of the xmpp server</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_password</span> <span class="o">=</span> <span class="n">password</span> <span class="c"># password to connect to xmpp</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_jid</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">-</span><span class="si">%s</span><span class="s">@</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_user</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_exp_id</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_server</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_src</span> <span class="o">=</span> <span class="s">&quot;xmpp://&quot;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">_jid</span>
+        
+        <span class="bp">self</span><span class="o">.</span><span class="n">_topics</span> <span class="o">=</span> <span class="p">[]</span>
+
+        <span class="c"># OMF xmpp client</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_client</span> <span class="o">=</span> <span class="bp">None</span>
+
+        <span class="c"># message handler</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_message</span> <span class="o">=</span> <span class="bp">None</span>
+
+        <span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">version_info</span> <span class="o">&lt;</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">0</span><span class="p">):</span>
+            <span class="nb">reload</span><span class="p">(</span><span class="n">sys</span><span class="p">)</span>
+            <span class="n">sys</span><span class="o">.</span><span class="n">setdefaultencoding</span><span class="p">(</span><span class="s">&#39;utf8&#39;</span><span class="p">)</span>
+
+        <span class="c"># instantiate the xmpp client</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_init_client</span><span class="p">()</span>
+
+        <span class="c"># register nepi topic</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_enroll_nepi</span><span class="p">()</span>
+
+
+    <span class="k">def</span> <span class="nf">_init_client</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Initialize XMPP Client</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">xmpp</span> <span class="o">=</span> <span class="n">OMFClient</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_jid</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_password</span><span class="p">)</span>
+        <span class="c"># PROTOCOL_SSLv3 required for compatibility with OpenFire</span>
+        <span class="n">xmpp</span><span class="o">.</span><span class="n">ssl_version</span> <span class="o">=</span> <span class="n">ssl</span><span class="o">.</span><span class="n">PROTOCOL_SSLv3</span>
+
+        <span class="k">if</span> <span class="n">xmpp</span><span class="o">.</span><span class="n">connect</span><span class="p">((</span><span class="bp">self</span><span class="o">.</span><span class="n">_server</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_port</span><span class="p">)):</span>
+            <span class="n">xmpp</span><span class="o">.</span><span class="n">process</span><span class="p">(</span><span class="n">block</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">check_ready</span><span class="p">(</span><span class="n">xmpp</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_client</span> <span class="o">=</span> <span class="n">xmpp</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_message</span> <span class="o">=</span> <span class="n">MessageHandler</span><span class="p">()</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Unable to connect to the XMPP server.&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+
+<div class="viewcode-block" id="OMF6API.check_ready"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf6_api.OMF6API.check_ready">[docs]</a>    <span class="k">def</span> <span class="nf">check_ready</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">xmpp</span><span class="p">):</span>
+        <span class="n">delay</span> <span class="o">=</span> <span class="mf">1.0</span>
+        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="mi">15</span><span class="p">):</span>
+            <span class="k">if</span> <span class="n">xmpp</span><span class="o">.</span><span class="n">ready</span><span class="p">:</span>
+                <span class="k">break</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="n">delay</span><span class="p">)</span>
+                <span class="n">delay</span> <span class="o">=</span> <span class="n">delay</span> <span class="o">*</span> <span class="mf">1.5</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;XMPP Client is not ready after long time&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_nepi_topic</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Return the name of the session topic</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;nepi-&quot;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">_exp_id</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">msg</span>
+
+    <span class="k">def</span> <span class="nf">_enroll_nepi</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Create and Subscribe to the session Topic</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">nepi_topic</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_nepi_topic</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">nepi_topic</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">subscribe</span><span class="p">(</span><span class="n">nepi_topic</span><span class="p">)</span>
+
+
+<div class="viewcode-block" id="OMF6API.create_and_enroll_topic"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf6_api.OMF6API.create_and_enroll_topic">[docs]</a>    <span class="k">def</span> <span class="nf">create_and_enroll_topic</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">topic</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Create and Subscribe to the session topic and the resources</span>
+<span class="sd">            corresponding to the hostname</span>
+
+<span class="sd">        :param hostname: Full hrn of the node</span>
+<span class="sd">        :type hostname: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="n">topic</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_topics</span><span class="p">:</span>
+            <span class="k">return</span> 
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">_topics</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">topic</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">topic</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">subscribe</span><span class="p">(</span><span class="n">topic</span><span class="p">)</span>
+
+</div>
+<div class="viewcode-block" id="OMF6API.enroll_topic"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf6_api.OMF6API.enroll_topic">[docs]</a>    <span class="k">def</span> <span class="nf">enroll_topic</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">topic</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Create and Subscribe to the session topic and the resources</span>
+<span class="sd">            corresponding to the hostname</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="n">topic</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_topics</span><span class="p">:</span>
+            <span class="k">return</span> 
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">_topics</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">topic</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">subscribe</span><span class="p">(</span><span class="n">topic</span><span class="p">)</span>
+
+</div>
+<div class="viewcode-block" id="OMF6API.frcp_inform"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf6_api.OMF6API.frcp_inform">[docs]</a>    <span class="k">def</span> <span class="nf">frcp_inform</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">topic</span><span class="p">,</span> <span class="n">cid</span><span class="p">,</span> <span class="n">itype</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Publish an inform message</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">msg_id</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">urandom</span><span class="p">(</span><span class="mi">16</span><span class="p">)</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s">&#39;hex&#39;</span><span class="p">)</span>
+        <span class="n">timestamp</span> <span class="o">=</span> <span class="n">tsformat</span><span class="p">()</span>
+        <span class="n">payload</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">inform_function</span><span class="p">(</span><span class="n">msg_id</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_src</span><span class="p">,</span> <span class="n">timestamp</span><span class="p">,</span> <span class="n">props</span> <span class="o">=</span> <span class="n">props</span> <span class="p">,</span><span class="n">guards</span> <span class="o">=</span> <span class="n">guards</span><span class="p">)</span> 
+        
+        <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">publish</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span> <span class="n">xmpp_node</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="OMF6API.frcp_configure"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf6_api.OMF6API.frcp_configure">[docs]</a>    <span class="k">def</span> <span class="nf">frcp_configure</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">topic</span><span class="p">,</span> <span class="n">props</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">guards</span> <span class="o">=</span> <span class="bp">None</span> <span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Publish a configure message</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">msg_id</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">urandom</span><span class="p">(</span><span class="mi">16</span><span class="p">)</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s">&#39;hex&#39;</span><span class="p">)</span>
+        <span class="n">timestamp</span> <span class="o">=</span> <span class="n">tsformat</span><span class="p">()</span>
+        <span class="n">payload</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">configure_function</span><span class="p">(</span><span class="n">msg_id</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_src</span><span class="p">,</span> <span class="n">timestamp</span> <span class="p">,</span><span class="n">props</span> <span class="o">=</span> <span class="n">props</span> <span class="p">,</span><span class="n">guards</span> <span class="o">=</span> <span class="n">guards</span><span class="p">)</span> 
+        <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">publish</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span> <span class="n">topic</span><span class="p">)</span>
+
+    </div>
+<div class="viewcode-block" id="OMF6API.frcp_create"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf6_api.OMF6API.frcp_create">[docs]</a>    <span class="k">def</span> <span class="nf">frcp_create</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg_id</span><span class="p">,</span> <span class="n">topic</span><span class="p">,</span> <span class="n">rtype</span><span class="p">,</span> <span class="n">props</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">guards</span> <span class="o">=</span> <span class="bp">None</span> <span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Publish a create message</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">timestamp</span> <span class="o">=</span> <span class="n">tsformat</span><span class="p">()</span>
+        <span class="n">payload</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">create_function</span><span class="p">(</span><span class="n">msg_id</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_src</span><span class="p">,</span> <span class="n">rtype</span><span class="p">,</span> <span class="n">timestamp</span> <span class="p">,</span> <span class="n">props</span> <span class="o">=</span> <span class="n">props</span> <span class="p">,</span><span class="n">guards</span> <span class="o">=</span> <span class="n">guards</span><span class="p">)</span> 
+        <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">publish</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span> <span class="n">topic</span><span class="p">)</span>
+
+</div>
+<div class="viewcode-block" id="OMF6API.frcp_request"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf6_api.OMF6API.frcp_request">[docs]</a>    <span class="k">def</span> <span class="nf">frcp_request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">topic</span><span class="p">,</span> <span class="n">props</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">guards</span> <span class="o">=</span> <span class="bp">None</span> <span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Execute command on the node</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">msg_id</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">urandom</span><span class="p">(</span><span class="mi">16</span><span class="p">)</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s">&#39;hex&#39;</span><span class="p">)</span>
+        <span class="n">timestamp</span> <span class="o">=</span> <span class="n">tsformat</span><span class="p">()</span>
+        <span class="n">payload</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">request_function</span><span class="p">(</span><span class="n">msg_id</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_src</span><span class="p">,</span> <span class="n">timestamp</span><span class="p">,</span> <span class="n">props</span> <span class="o">=</span> <span class="n">props</span> <span class="p">,</span><span class="n">guards</span> <span class="o">=</span> <span class="n">guards</span><span class="p">)</span> 
+        <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">publish</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span> <span class="n">xmpp_node</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="OMF6API.frcp_release"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf6_api.OMF6API.frcp_release">[docs]</a>    <span class="k">def</span> <span class="nf">frcp_release</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg_id</span><span class="p">,</span> <span class="n">parent</span><span class="p">,</span> <span class="n">child</span><span class="p">,</span> <span class="n">res_id</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">props</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">guards</span> <span class="o">=</span> <span class="bp">None</span> <span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Publish a release message</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">timestamp</span> <span class="o">=</span> <span class="n">tsformat</span><span class="p">()</span>
+        <span class="n">payload</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">release_function</span><span class="p">(</span><span class="n">msg_id</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_src</span><span class="p">,</span> <span class="n">timestamp</span><span class="p">,</span> <span class="n">res_id</span> <span class="o">=</span> <span class="n">res_id</span><span class="p">,</span> <span class="n">props</span> <span class="o">=</span> <span class="n">props</span> <span class="p">,</span><span class="n">guards</span> <span class="o">=</span> <span class="n">guards</span><span class="p">)</span> 
+        <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">publish</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span> <span class="n">parent</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">child</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_topics</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_topics</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">child</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">unsubscribe</span><span class="p">(</span><span class="n">child</span><span class="p">)</span>
+        <span class="c">#self._client.delete(child)</span>
+</div>
+<div class="viewcode-block" id="OMF6API.check_mailbox"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf6_api.OMF6API.check_mailbox">[docs]</a>    <span class="k">def</span> <span class="nf">check_mailbox</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">itype</span><span class="p">,</span> <span class="n">attr</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Check the mail box</span>
+
+<span class="sd">        :param itype: type of mail</span>
+<span class="sd">        :type itype: str</span>
+<span class="sd">        :param attr: value wanted</span>
+<span class="sd">        :type attr: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">check_mailbox</span><span class="p">(</span><span class="n">itype</span><span class="p">,</span> <span class="n">attr</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="OMF6API.unenroll_topic"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf6_api.OMF6API.unenroll_topic">[docs]</a>    <span class="k">def</span> <span class="nf">unenroll_topic</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">topic</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Create and Subscribe to the session topic and the resources</span>
+<span class="sd">            corresponding to the hostname</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="n">topic</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_topics</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_topics</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">topic</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">unsubscribe</span><span class="p">(</span><span class="n">topic</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="OMF6API.disconnect"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf6_api.OMF6API.disconnect">[docs]</a>    <span class="k">def</span> <span class="nf">disconnect</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="p">:</span>
+        <span class="sd">&quot;&quot;&quot; Delete the session and logger topics. Then disconnect </span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="c"># To receive the last messages</span>
+        <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_nepi_topic</span><span class="p">)</span>
+       
+        <span class="c"># Wait the send queue to be empty before disconnect</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">disconnect</span><span class="p">(</span><span class="n">wait</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Disconnected from XMPP Server&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/omf/omf6_parser.html b/doc/sphinx/_build/html/_modules/nepi/resources/omf/omf6_parser.html
new file mode 100644 (file)
index 0000000..4f79178
--- /dev/null
@@ -0,0 +1,382 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.omf.omf6_parser &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.omf.omf6_parser</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+<span class="c">#         Julien Tribino &lt;julien.tribino@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.util.logger</span> <span class="kn">import</span> <span class="n">Logger</span>
+
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">traceback</span>
+<span class="kn">import</span> <span class="nn">xml.etree.ElementTree</span> <span class="kn">as</span> <span class="nn">ET</span>
+
+<span class="c"># inherit from BaseXmpp and XMLstream classes</span>
+<div class="viewcode-block" id="OMF6Parser"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf6_parser.OMF6Parser">[docs]</a><span class="k">class</span> <span class="nc">OMF6Parser</span><span class="p">(</span><span class="n">Logger</span><span class="p">):</span> 
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    .. class:: Class Args :</span>
+<span class="sd">      </span>
+<span class="sd">        :param jid: Jabber Id (= Xmpp Slice + Date)</span>
+<span class="sd">        :type jid: str</span>
+<span class="sd">        :param password: Jabber Password (= Xmpp Password)</span>
+<span class="sd">        :type password: str</span>
+
+<span class="sd">    .. note::</span>
+
+<span class="sd">       This class is an XMPP Client with customized method</span>
+
+<span class="sd">    &quot;&quot;&quot;</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+
+<span class="sd">        :param jid: Jabber Id (= Xmpp Slice + Date)</span>
+<span class="sd">        :type jid: str</span>
+<span class="sd">        :param password: Jabber Password (= Xmpp Password)</span>
+<span class="sd">        :type password: str</span>
+
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">OMF6Parser</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="s">&quot;OMF6API&quot;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">mailbox</span><span class="o">=</span><span class="p">{}</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">traces</span><span class="o">=</span><span class="p">{}</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">trace</span><span class="o">=</span><span class="s">&#39;NULL&#39;</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">init_mailbox</span><span class="p">()</span>
+
+
+<div class="viewcode-block" id="OMF6Parser.init_mailbox"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf6_parser.OMF6Parser.init_mailbox">[docs]</a>    <span class="k">def</span> <span class="nf">init_mailbox</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">mailbox</span><span class="p">[</span><span class="s">&#39;create&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">mailbox</span><span class="p">[</span><span class="s">&#39;started&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">mailbox</span><span class="p">[</span><span class="s">&#39;release&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+  </div>
+    <span class="k">def</span> <span class="nf">_check_for_tag</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">,</span> <span class="n">namespaces</span><span class="p">,</span> <span class="n">tag</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;  Check if an element markup is in the ElementTree</span>
+
+<span class="sd">        :param root: Root of the tree</span>
+<span class="sd">        :type root: ElementTree Element</span>
+<span class="sd">        :param namespaces: Namespaces of the element</span>
+<span class="sd">        :type namespaces: str</span>
+<span class="sd">        :param tag: Tag that will search in the tree</span>
+<span class="sd">        :type tag: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">for</span> <span class="n">element</span> <span class="ow">in</span> <span class="n">root</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="n">namespaces</span><span class="o">+</span><span class="n">tag</span><span class="p">):</span>
+            <span class="k">if</span> <span class="n">element</span><span class="o">.</span><span class="n">text</span><span class="p">:</span>
+                <span class="k">return</span> <span class="n">element</span><span class="o">.</span><span class="n">text</span>
+            <span class="k">else</span> <span class="p">:</span> 
+                <span class="k">return</span> <span class="bp">None</span>
+
+    <span class="k">def</span> <span class="nf">_check_for_props</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">,</span> <span class="n">namespaces</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;  Check if an element markup is in the ElementTree</span>
+
+<span class="sd">        :param root: Root of the tree</span>
+<span class="sd">        :type root: ElementTree Element</span>
+<span class="sd">        :param namespaces: Namespaces of the element</span>
+<span class="sd">        :type namespaces: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">props</span> <span class="o">=</span> <span class="p">{}</span>
+        <span class="k">for</span> <span class="n">properties</span> <span class="ow">in</span> <span class="n">root</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="n">namespaces</span><span class="o">+</span><span class="s">&#39;props&#39;</span><span class="p">):</span>
+            <span class="k">for</span> <span class="n">element</span> <span class="ow">in</span> <span class="n">properties</span><span class="o">.</span><span class="n">iter</span><span class="p">():</span>
+                <span class="k">if</span> <span class="n">element</span><span class="o">.</span><span class="n">tag</span> <span class="ow">and</span> <span class="n">element</span><span class="o">.</span><span class="n">text</span><span class="p">:</span>
+                    <span class="n">props</span><span class="p">[</span><span class="n">element</span><span class="o">.</span><span class="n">tag</span><span class="p">]</span> <span class="o">=</span> <span class="n">element</span><span class="o">.</span><span class="n">text</span>
+        <span class="k">return</span> <span class="n">props</span>
+
+    <span class="k">def</span> <span class="nf">_check_for_membership</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">,</span> <span class="n">namespaces</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;  Check if an element markup is in the ElementTree</span>
+
+<span class="sd">        :param root: Root of the tree</span>
+<span class="sd">        :type root: ElementTree Element</span>
+<span class="sd">        :param namespaces: Namespaces of the element</span>
+<span class="sd">        :type namespaces: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">for</span> <span class="n">element</span> <span class="ow">in</span> <span class="n">root</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="n">namespaces</span><span class="o">+</span><span class="s">&#39;membership&#39;</span><span class="p">):</span>
+            <span class="k">for</span> <span class="n">elt</span> <span class="ow">in</span> <span class="n">element</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="n">namespaces</span><span class="o">+</span><span class="s">&#39;it&#39;</span><span class="p">):</span>
+                <span class="c">##XXX : change</span>
+                <span class="k">return</span> <span class="n">elt</span><span class="o">.</span><span class="n">text</span>
+
+
+    <span class="k">def</span> <span class="nf">_check_output</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">,</span> <span class="n">namespaces</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Check the significative element in the answer and display it</span>
+
+<span class="sd">        :param root: Root of the tree</span>
+<span class="sd">        :type root: ElementTree Element</span>
+<span class="sd">        :param namespaces: Namespaces of the tree</span>
+<span class="sd">        :type namespaces: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">fields</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;TARGET&quot;</span><span class="p">,</span> <span class="s">&quot;REASON&quot;</span><span class="p">,</span> <span class="s">&quot;PATH&quot;</span><span class="p">,</span> <span class="s">&quot;APPID&quot;</span><span class="p">,</span> <span class="s">&quot;VALUE&quot;</span><span class="p">]</span>
+        <span class="n">response</span> <span class="o">=</span> <span class="s">&quot;&quot;</span>
+        <span class="k">for</span> <span class="n">elt</span> <span class="ow">in</span> <span class="n">fields</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_for_tag</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">namespaces</span><span class="p">,</span> <span class="n">elt</span><span class="p">)</span>
+            <span class="k">if</span> <span class="n">msg</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
+                <span class="n">response</span> <span class="o">=</span> <span class="n">response</span> <span class="o">+</span> <span class="s">&quot; &quot;</span> <span class="o">+</span> <span class="n">msg</span><span class="o">.</span><span class="n">text</span> <span class="o">+</span> <span class="s">&quot; :&quot;</span>
+        <span class="n">deb</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_for_tag</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">namespaces</span><span class="p">,</span> <span class="s">&quot;MESSAGE&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">deb</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="n">response</span> <span class="o">+</span> <span class="s">&quot; &quot;</span> <span class="o">+</span> <span class="n">deb</span><span class="o">.</span><span class="n">text</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+        <span class="k">else</span> <span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">response</span><span class="p">)</span>
+
+
+    <span class="k">def</span> <span class="nf">_inform_creation_ok</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">,</span> <span class="n">namespaces</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Parse and Display CREATION OK message</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="c">#ET.dump(root)</span>
+        <span class="n">uid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_for_tag</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">namespaces</span><span class="p">,</span> <span class="s">&quot;uid&quot;</span><span class="p">)</span>
+        <span class="n">cid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_for_tag</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">namespaces</span><span class="p">,</span> <span class="s">&quot;cid&quot;</span><span class="p">)</span>
+        <span class="n">member</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_for_membership</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">namespaces</span><span class="p">)</span>
+        <span class="n">binary_path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_for_tag</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">namespaces</span><span class="p">,</span> <span class="s">&quot;binary_path&quot;</span><span class="p">)</span>
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;CREATION OK -- &quot;</span>
+        <span class="k">if</span> <span class="n">binary_path</span> <span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="n">msg</span> <span class="o">+</span> <span class="s">&quot;The resource : &#39;&quot;</span><span class="o">+</span><span class="n">binary_path</span>
+        <span class="k">else</span> <span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="n">msg</span> <span class="o">+</span> <span class="s">&quot;The interface&quot;</span>
+        <span class="k">if</span> <span class="n">uid</span> <span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="n">msg</span> <span class="o">+</span> <span class="s">&quot;&#39; is listening to the topics : &#39;&quot;</span><span class="o">+</span> <span class="n">uid</span>
+        <span class="k">if</span> <span class="n">member</span> <span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="n">msg</span> <span class="o">+</span> <span class="s">&quot;&#39; and &#39;&quot;</span><span class="o">+</span> <span class="n">member</span> <span class="o">+</span><span class="s">&quot;&#39;&quot;</span>
+        <span class="k">if</span> <span class="n">cid</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">mailbox</span><span class="p">[</span><span class="s">&#39;create&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">cid</span><span class="p">,</span> <span class="n">uid</span> <span class="p">])</span>
+
+    <span class="k">def</span> <span class="nf">_inform_creation_failed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">,</span> <span class="n">namespaces</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Parse and Display CREATION FAILED message</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">reason</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_for_tag</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">namespaces</span><span class="p">,</span> <span class="s">&quot;reason&quot;</span><span class="p">)</span>
+        <span class="n">cid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_for_tag</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">namespaces</span><span class="p">,</span> <span class="s">&quot;cid&quot;</span><span class="p">)</span>
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;CREATION FAILED - The reason : &quot;</span><span class="o">+</span><span class="n">reason</span>
+        <span class="k">if</span> <span class="n">cid</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">mailbox</span><span class="p">[</span><span class="s">&#39;create&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">cid</span><span class="p">,</span> <span class="n">uid</span> <span class="p">])</span>
+
+    <span class="k">def</span> <span class="nf">_inform_status</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">,</span> <span class="n">namespaces</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Parse and Display STATUS message</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">props</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_for_props</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">namespaces</span><span class="p">)</span>
+        <span class="n">uid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_for_tag</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">namespaces</span><span class="p">,</span> <span class="s">&quot;uid&quot;</span><span class="p">)</span>
+        <span class="n">event</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_for_tag</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">namespaces</span><span class="p">,</span> <span class="s">&quot;event&quot;</span><span class="p">)</span>
+
+        <span class="n">log</span> <span class="o">=</span> <span class="s">&quot;STATUS -- &quot;</span>
+        <span class="k">for</span> <span class="n">elt</span> <span class="ow">in</span> <span class="n">props</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
+            <span class="n">ns</span><span class="p">,</span> <span class="n">tag</span> <span class="o">=</span> <span class="n">elt</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;}&#39;</span><span class="p">)</span>
+            <span class="k">if</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&quot;it&quot;</span><span class="p">:</span>
+                <span class="n">log</span> <span class="o">=</span> <span class="n">log</span> <span class="o">+</span> <span class="s">&quot;membership : &quot;</span> <span class="o">+</span> <span class="n">props</span><span class="p">[</span><span class="n">elt</span><span class="p">]</span><span class="o">+</span><span class="s">&quot; -- &quot;</span>
+            <span class="k">elif</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&quot;event&quot;</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">mailbox</span><span class="p">[</span><span class="s">&#39;started&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">uid</span><span class="p">)</span>
+                <span class="n">log</span> <span class="o">=</span> <span class="n">log</span> <span class="o">+</span> <span class="s">&quot;event : &quot;</span> <span class="o">+</span> <span class="n">props</span><span class="p">[</span><span class="n">elt</span><span class="p">]</span><span class="o">+</span><span class="s">&quot; -- &quot;</span>
+            <span class="k">elif</span> <span class="n">tag</span> <span class="o">==</span> <span class="s">&quot;msg&quot;</span><span class="p">:</span>
+                <span class="k">if</span> <span class="n">event</span> <span class="o">==</span> <span class="s">&quot;STDOUT&quot;</span> <span class="p">:</span> 
+                    <span class="n">filename</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s">&quot;/tmp&quot;</span><span class="p">,</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">.out&quot;</span> <span class="o">%</span> <span class="n">uid</span><span class="p">)</span>
+                    <span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span><span class="s">&#39;a+&#39;</span><span class="p">)</span>
+                    <span class="c"># XXX: Adding fake \n for visual formatting </span>
+                    <span class="n">msg</span> <span class="o">=</span> <span class="n">props</span><span class="p">[</span><span class="n">elt</span><span class="p">]</span> <span class="c"># + &quot;\n&quot;</span>
+                    <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+                    <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+                <span class="k">elif</span> <span class="n">event</span> <span class="o">==</span> <span class="s">&quot;STDERR&quot;</span> <span class="p">:</span>
+                    <span class="n">filename</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s">&quot;/tmp&quot;</span><span class="p">,</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">.err&quot;</span> <span class="o">%</span> <span class="n">uid</span><span class="p">)</span>
+                    <span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span><span class="s">&#39;a+&#39;</span><span class="p">)</span>
+                    <span class="c"># XXX: Adding fake \n for visual formatting </span>
+                    <span class="n">msg</span> <span class="o">=</span> <span class="n">props</span><span class="p">[</span><span class="n">elt</span><span class="p">]</span> <span class="c"># + &quot;\n&quot;</span>
+                    <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+                    <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+                <span class="n">log</span> <span class="o">=</span> <span class="n">log</span> <span class="o">+</span> <span class="n">tag</span> <span class="o">+</span><span class="s">&quot; : &quot;</span> <span class="o">+</span> <span class="n">props</span><span class="p">[</span><span class="n">elt</span><span class="p">]</span><span class="o">+</span><span class="s">&quot; -- &quot;</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="n">log</span> <span class="o">=</span> <span class="n">log</span> <span class="o">+</span> <span class="n">tag</span> <span class="o">+</span><span class="s">&quot; : &quot;</span> <span class="o">+</span> <span class="n">props</span><span class="p">[</span><span class="n">elt</span><span class="p">]</span><span class="o">+</span><span class="s">&quot; -- &quot;</span>
+        <span class="n">log</span> <span class="o">=</span> <span class="n">log</span> <span class="o">+</span> <span class="s">&quot; STATUS &quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">log</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_inform_released</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">,</span> <span class="n">namespaces</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Parse and Display RELEASED message</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="c">#ET.dump(root)</span>
+        <span class="n">parent_id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_for_tag</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">namespaces</span><span class="p">,</span> <span class="s">&quot;src&quot;</span><span class="p">)</span>
+        <span class="n">child_id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_for_tag</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">namespaces</span><span class="p">,</span> <span class="s">&quot;res_id&quot;</span><span class="p">)</span>
+        <span class="n">cid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_for_tag</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">namespaces</span><span class="p">,</span> <span class="s">&quot;cid&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">cid</span> <span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;RELEASED - The resource : &#39;&quot;</span><span class="o">+</span><span class="n">child_id</span><span class="o">+</span> \
+              <span class="s">&quot;&#39; has been released by : &#39;&quot;</span><span class="o">+</span> <span class="n">parent_id</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">mailbox</span><span class="p">[</span><span class="s">&#39;release&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">cid</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_inform_error</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">,</span> <span class="n">namespaces</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Parse and Display ERROR message</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">reason</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_for_tag</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">namespaces</span><span class="p">,</span> <span class="s">&quot;reason&quot;</span><span class="p">)</span>
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;The reason : &quot;</span><span class="o">+</span><span class="n">reason</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_inform_warn</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">,</span> <span class="n">namespaces</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Parse and Display WARN message</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">reason</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_for_tag</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">namespaces</span><span class="p">,</span> <span class="s">&quot;reason&quot;</span><span class="p">)</span>
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;The reason : &quot;</span><span class="o">+</span><span class="n">reason</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_parse_inform</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">,</span> <span class="n">namespaces</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Check the significative element in the answer</span>
+<span class="sd">            Then Parse it and display using specific method</span>
+
+<span class="sd">        :param root: Root of the tree</span>
+<span class="sd">        :type root: ElementTree Element</span>
+<span class="sd">        :param namespaces: Namespaces of the tree</span>
+<span class="sd">        :type namespaces: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">itype</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_for_tag</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">namespaces</span><span class="p">,</span> <span class="s">&quot;itype&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">itype</span> <span class="p">:</span>
+            <span class="n">method_name</span> <span class="o">=</span> <span class="s">&#39;_inform_&#39;</span><span class="o">+</span> <span class="n">itype</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">,</span> <span class="s">&#39;_&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
+            <span class="n">method</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">method_name</span><span class="p">)</span>
+            <span class="k">if</span> <span class="n">method</span> <span class="p">:</span>
+                <span class="n">method</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">namespaces</span><span class="p">)</span>
+            <span class="k">else</span> <span class="p">:</span>
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;There is no method to parse the response of the type &quot;</span> <span class="o">+</span> <span class="n">itype</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+                <span class="k">return</span>
+        
+
+<div class="viewcode-block" id="OMF6Parser.check_mailbox"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf6_parser.OMF6Parser.check_mailbox">[docs]</a>    <span class="k">def</span> <span class="nf">check_mailbox</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">itype</span><span class="p">,</span> <span class="n">attr</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Check the mail box</span>
+
+<span class="sd">        :param itype: type of mail</span>
+<span class="sd">        :type itype: str</span>
+<span class="sd">        :param attr: value wanted</span>
+<span class="sd">        :type attr: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="n">itype</span> <span class="o">==</span> <span class="s">&quot;create&quot;</span><span class="p">:</span>
+            <span class="k">for</span> <span class="n">res</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">mailbox</span><span class="p">[</span><span class="n">itype</span><span class="p">]:</span>
+                <span class="n">binary</span><span class="p">,</span> <span class="n">uid</span> <span class="o">=</span> <span class="n">res</span>
+                <span class="k">if</span> <span class="n">binary</span> <span class="o">==</span> <span class="n">attr</span><span class="p">:</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">mailbox</span><span class="p">[</span><span class="n">itype</span><span class="p">]</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">res</span><span class="p">)</span>
+                    <span class="k">return</span> <span class="n">uid</span>
+        <span class="k">else</span> <span class="p">:</span>
+            <span class="k">for</span> <span class="n">res</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">mailbox</span><span class="p">[</span><span class="n">itype</span><span class="p">]:</span>
+                <span class="k">if</span> <span class="n">attr</span> <span class="o">==</span> <span class="n">res</span><span class="p">:</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">mailbox</span><span class="p">[</span><span class="n">itype</span><span class="p">]</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">res</span><span class="p">)</span>
+                    <span class="k">return</span> <span class="n">res</span>
+               
+</div>
+<div class="viewcode-block" id="OMF6Parser.handle"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf6_parser.OMF6Parser.handle">[docs]</a>    <span class="k">def</span> <span class="nf">handle</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iq</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Check the mail box</span>
+
+<span class="sd">        :param iq: message received</span>
+<span class="sd">        :type itype: iq</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">namespaces</span> <span class="o">=</span> <span class="s">&quot;{http://schema.mytestbed.net/omf/6.0/protocol}&quot;</span>
+        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">iq</span><span class="p">[</span><span class="s">&#39;pubsub_event&#39;</span><span class="p">][</span><span class="s">&#39;items&#39;</span><span class="p">]:</span>
+            <span class="n">root</span> <span class="o">=</span> <span class="n">ET</span><span class="o">.</span><span class="n">fromstring</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">i</span><span class="p">))</span>
+            <span class="c">#ET.dump(root)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_parse_inform</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">namespaces</span><span class="p">)</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/omf/omf_api_factory.html b/doc/sphinx/_build/html/_modules/nepi/resources/omf/omf_api_factory.html
new file mode 100644 (file)
index 0000000..3e59d3b
--- /dev/null
@@ -0,0 +1,230 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.omf.omf_api_factory &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.omf.omf_api_factory</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+<span class="c">#         Julien Tribino &lt;julien.tribino@inria.fr&gt;</span>
+
+
+<span class="kn">import</span> <span class="nn">time</span>
+<span class="kn">import</span> <span class="nn">hashlib</span>
+<span class="kn">import</span> <span class="nn">threading</span>
+
+<span class="kn">from</span> <span class="nn">nepi.resources.omf.omf5_api</span> <span class="kn">import</span> <span class="n">OMF5API</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.omf.omf6_api</span> <span class="kn">import</span> <span class="n">OMF6API</span>
+
+<div class="viewcode-block" id="OMFAPIFactory"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_api_factory.OMFAPIFactory">[docs]</a><span class="k">class</span> <span class="nc">OMFAPIFactory</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot; </span>
+<span class="sd">    .. note::</span>
+
+<span class="sd">        It allows the different RM to use the same xmpp client if they use </span>
+<span class="sd">        the same credentials.  For the moment, it is focused on XMPP.</span>
+
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="c"># use lock to avoid concurrent access to the Api list at the same times by 2 </span>
+    <span class="c"># different threads</span>
+    <span class="n">lock</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Lock</span><span class="p">()</span>
+    <span class="n">_apis</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
+
+    <span class="nd">@classmethod</span> 
+<div class="viewcode-block" id="OMFAPIFactory.get_api"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_api_factory.OMFAPIFactory.get_api">[docs]</a>    <span class="k">def</span> <span class="nf">get_api</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">version</span><span class="p">,</span> <span class="n">server</span><span class="p">,</span> <span class="n">user</span><span class="p">,</span> <span class="n">port</span><span class="p">,</span> <span class="n">password</span><span class="p">,</span> <span class="n">exp_id</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Get an OMF Api</span>
+
+<span class="sd">        :param version: OMF Version. Either 5 or 6</span>
+<span class="sd">        :type version: str</span>
+<span class="sd">        :param server: Xmpp Server Adress</span>
+<span class="sd">        :type server: str</span>
+<span class="sd">        :param user: Xmpp User</span>
+<span class="sd">        :type user: str</span>
+<span class="sd">        :param port: Xmpp Port (Default : 5222)</span>
+<span class="sd">        :type port: str</span>
+<span class="sd">        :param password: Xmpp Password</span>
+<span class="sd">        :type password: str</span>
+<span class="sd">        :param exp_id: Id of the experiment</span>
+<span class="sd">        :type exp_id: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="n">version</span> <span class="ow">and</span> <span class="n">user</span> <span class="ow">and</span> <span class="n">server</span> <span class="ow">and</span> <span class="n">port</span> <span class="ow">and</span> <span class="n">password</span><span class="p">:</span>
+            <span class="n">key</span> <span class="o">=</span> <span class="n">cls</span><span class="o">.</span><span class="n">_make_key</span><span class="p">(</span><span class="n">version</span><span class="p">,</span> <span class="n">server</span><span class="p">,</span> <span class="n">user</span><span class="p">,</span> <span class="n">port</span><span class="p">,</span> <span class="n">password</span><span class="p">,</span> <span class="n">exp_id</span><span class="p">)</span>
+            <span class="n">cls</span><span class="o">.</span><span class="n">lock</span><span class="o">.</span><span class="n">acquire</span><span class="p">()</span>
+            <span class="k">if</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">cls</span><span class="o">.</span><span class="n">_apis</span><span class="p">:</span>
+                <span class="c">#print &quot;Api Counter : &quot; + str(cls._apis[key][&#39;cnt&#39;])</span>
+                <span class="n">cls</span><span class="o">.</span><span class="n">_apis</span><span class="p">[</span><span class="n">key</span><span class="p">][</span><span class="s">&#39;cnt&#39;</span><span class="p">]</span> <span class="o">+=</span> <span class="mi">1</span>
+                <span class="n">cls</span><span class="o">.</span><span class="n">lock</span><span class="o">.</span><span class="n">release</span><span class="p">()</span>
+                <span class="k">return</span> <span class="n">cls</span><span class="o">.</span><span class="n">_apis</span><span class="p">[</span><span class="n">key</span><span class="p">][</span><span class="s">&#39;api&#39;</span><span class="p">]</span>
+            <span class="k">else</span> <span class="p">:</span>
+                <span class="n">omf_api</span> <span class="o">=</span> <span class="n">cls</span><span class="o">.</span><span class="n">create_api</span><span class="p">(</span><span class="n">version</span><span class="p">,</span> <span class="n">server</span><span class="p">,</span> <span class="n">user</span><span class="p">,</span> <span class="n">port</span><span class="p">,</span> <span class="n">password</span><span class="p">,</span> <span class="n">exp_id</span><span class="p">)</span>
+                <span class="n">cls</span><span class="o">.</span><span class="n">lock</span><span class="o">.</span><span class="n">release</span><span class="p">()</span>
+                <span class="k">return</span> <span class="n">omf_api</span>
+        <span class="k">return</span> <span class="bp">None</span>
+</div>
+    <span class="nd">@classmethod</span> 
+<div class="viewcode-block" id="OMFAPIFactory.create_api"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_api_factory.OMFAPIFactory.create_api">[docs]</a>    <span class="k">def</span> <span class="nf">create_api</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">version</span><span class="p">,</span> <span class="n">server</span><span class="p">,</span> <span class="n">user</span><span class="p">,</span> <span class="n">port</span><span class="p">,</span> <span class="n">password</span><span class="p">,</span> <span class="n">exp_id</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Create an OMF API if this one doesn&#39;t exist yet with this credentials</span>
+
+<span class="sd">        :param version: OMF Version. Either 5 or 6</span>
+<span class="sd">        :type version: str</span>
+<span class="sd">        :param server: Xmpp Server Adress</span>
+<span class="sd">        :type server: str</span>
+<span class="sd">        :param user: Xmpp User</span>
+<span class="sd">        :type user: str</span>
+<span class="sd">        :param port: Xmpp Port (Default : 5222)</span>
+<span class="sd">        :type port: str</span>
+<span class="sd">        :param password: Xmpp Password</span>
+<span class="sd">        :type password: str</span>
+<span class="sd">        :param exp_id: Id of the experiment</span>
+<span class="sd">        :type exp_id: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">key</span> <span class="o">=</span> <span class="n">cls</span><span class="o">.</span><span class="n">_make_key</span><span class="p">(</span><span class="n">version</span><span class="p">,</span> <span class="n">server</span><span class="p">,</span> <span class="n">user</span><span class="p">,</span> <span class="n">port</span><span class="p">,</span> <span class="n">password</span><span class="p">,</span> <span class="n">exp_id</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">version</span> <span class="o">==</span> <span class="s">&quot;5&quot;</span><span class="p">:</span>
+            <span class="n">omf_api</span> <span class="o">=</span> <span class="n">OMF5API</span><span class="p">(</span><span class="n">server</span><span class="p">,</span> <span class="n">user</span><span class="p">,</span> <span class="n">port</span><span class="p">,</span> <span class="n">password</span><span class="p">,</span> <span class="n">exp_id</span> <span class="o">=</span> <span class="n">exp_id</span><span class="p">)</span>
+        <span class="k">else</span> <span class="p">:</span>
+            <span class="n">omf_api</span> <span class="o">=</span> <span class="n">OMF6API</span><span class="p">(</span><span class="n">server</span><span class="p">,</span> <span class="n">user</span> <span class="o">=</span> <span class="n">user</span><span class="p">,</span> <span class="n">port</span> <span class="o">=</span> <span class="n">port</span><span class="p">,</span> <span class="n">password</span> <span class="o">=</span> <span class="n">password</span><span class="p">,</span> <span class="n">exp_id</span> <span class="o">=</span> <span class="n">exp_id</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_apis</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_apis</span><span class="p">[</span><span class="n">key</span><span class="p">][</span><span class="s">&#39;api&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">omf_api</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_apis</span><span class="p">[</span><span class="n">key</span><span class="p">][</span><span class="s">&#39;cnt&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span>
+        <span class="k">return</span> <span class="n">omf_api</span>
+</div>
+    <span class="nd">@classmethod</span> 
+<div class="viewcode-block" id="OMFAPIFactory.release_api"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_api_factory.OMFAPIFactory.release_api">[docs]</a>    <span class="k">def</span> <span class="nf">release_api</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">version</span><span class="p">,</span> <span class="n">server</span><span class="p">,</span> <span class="n">user</span><span class="p">,</span> <span class="n">port</span><span class="p">,</span> <span class="n">password</span><span class="p">,</span> <span class="n">exp_id</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Release an OMF API with this credentials</span>
+
+<span class="sd">        :param version: OMF Version. Either 5 or 6</span>
+<span class="sd">        :type version: str</span>
+<span class="sd">        :param server: Xmpp Server Adress</span>
+<span class="sd">        :type server: str</span>
+<span class="sd">        :param user: Xmpp User</span>
+<span class="sd">        :type user: str</span>
+<span class="sd">        :param port: Xmpp Port (Default : 5222)</span>
+<span class="sd">        :type port: str</span>
+<span class="sd">        :param password: Xmpp Password</span>
+<span class="sd">        :type password: str</span>
+<span class="sd">        :param exp_id: Id of the experiment</span>
+<span class="sd">        :type exp_id: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="n">version</span> <span class="ow">and</span> <span class="n">user</span> <span class="ow">and</span> <span class="n">server</span> <span class="ow">and</span> <span class="n">port</span> <span class="ow">and</span> <span class="n">password</span><span class="p">:</span>
+            <span class="n">key</span> <span class="o">=</span> <span class="n">cls</span><span class="o">.</span><span class="n">_make_key</span><span class="p">(</span><span class="n">version</span><span class="p">,</span> <span class="n">server</span><span class="p">,</span> <span class="n">user</span><span class="p">,</span> <span class="n">port</span><span class="p">,</span> <span class="n">password</span><span class="p">,</span> <span class="n">exp_id</span><span class="p">)</span>
+            <span class="k">if</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">cls</span><span class="o">.</span><span class="n">_apis</span><span class="p">:</span>
+                <span class="n">cls</span><span class="o">.</span><span class="n">_apis</span><span class="p">[</span><span class="n">key</span><span class="p">][</span><span class="s">&#39;cnt&#39;</span><span class="p">]</span> <span class="o">-=</span> <span class="mi">1</span>
+                <span class="c">#print &quot;Api Counter : &quot; + str(cls._apis[key][&#39;cnt&#39;])</span>
+                <span class="k">if</span> <span class="n">cls</span><span class="o">.</span><span class="n">_apis</span><span class="p">[</span><span class="n">key</span><span class="p">][</span><span class="s">&#39;cnt&#39;</span><span class="p">]</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+                    <span class="n">omf_api</span> <span class="o">=</span> <span class="n">cls</span><span class="o">.</span><span class="n">_apis</span><span class="p">[</span><span class="n">key</span><span class="p">][</span><span class="s">&#39;api&#39;</span><span class="p">]</span>
+                    <span class="n">omf_api</span><span class="o">.</span><span class="n">disconnect</span><span class="p">()</span>
+                    <span class="k">del</span> <span class="n">cls</span><span class="o">.</span><span class="n">_apis</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
+</div>
+    <span class="nd">@classmethod</span> 
+    <span class="k">def</span> <span class="nf">_make_key</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Hash the credentials in order to create a key</span>
+
+<span class="sd">        :param args: list of arguments used to create the hash (server, user, port, ...)</span>
+<span class="sd">        :type args: list</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">skey</span> <span class="o">=</span> <span class="s">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">args</span><span class="p">))</span>
+        <span class="k">return</span> <span class="n">hashlib</span><span class="o">.</span><span class="n">md5</span><span class="p">(</span><span class="n">skey</span><span class="p">)</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/omf/omf_client.html b/doc/sphinx/_build/html/_modules/nepi/resources/omf/omf_client.html
new file mode 100644 (file)
index 0000000..52922bc
--- /dev/null
@@ -0,0 +1,449 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.omf.omf_client &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.omf.omf_client</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+<span class="c">#         Julien Tribino &lt;julien.tribino@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.util.logger</span> <span class="kn">import</span> <span class="n">Logger</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.omf.omf6_parser</span> <span class="kn">import</span> <span class="n">OMF6Parser</span>
+<span class="k">try</span><span class="p">:</span>
+    <span class="kn">import</span> <span class="nn">sleekxmpp</span>
+    <span class="kn">from</span> <span class="nn">sleekxmpp.exceptions</span> <span class="kn">import</span> <span class="n">IqError</span><span class="p">,</span> <span class="n">IqTimeout</span>
+    <span class="k">class</span> <span class="nc">BaseOMFClient</span><span class="p">(</span><span class="n">sleekxmpp</span><span class="o">.</span><span class="n">ClientXMPP</span><span class="p">):</span>
+        <span class="k">pass</span>
+<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
+    <span class="n">msg</span> <span class="o">=</span> <span class="p">(</span><span class="s">&quot;SleekXMPP is not installed. Without this library &quot;</span>
+          <span class="s">&quot;you will be not able to use OMF Resources &quot;</span>
+          <span class="s">&quot;if you want to install SleekXmpp: </span><span class="se">\n</span><span class="s">&quot;</span>
+          <span class="s">&quot; git clone -b develop git://github.com/fritzy/SleekXMPP.git </span><span class="se">\n</span><span class="s">&quot;</span>
+          <span class="s">&quot; cd SleekXMPP </span><span class="se">\n</span><span class="s">&quot;</span>
+          <span class="s">&quot; sudo python setup.py install</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>
+
+    <span class="n">logger</span> <span class="o">=</span> <span class="n">Logger</span><span class="p">(</span><span class="s">&quot;BaseOMFClient&quot;</span><span class="p">)</span>
+    <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+
+<div class="viewcode-block" id="BaseOMFClient"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.BaseOMFClient">[docs]</a>    <span class="k">class</span> <span class="nc">BaseOMFClient</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+        <span class="k">pass</span>
+</div>
+<span class="kn">import</span> <span class="nn">traceback</span>
+<span class="kn">import</span> <span class="nn">xml.etree.ElementTree</span> <span class="kn">as</span> <span class="nn">ET</span>
+
+<span class="c"># inherit from BaseXmpp and XMLstream classes</span>
+<div class="viewcode-block" id="OMFClient"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient">[docs]</a><span class="k">class</span> <span class="nc">OMFClient</span><span class="p">(</span><span class="n">BaseOMFClient</span><span class="p">,</span> <span class="n">Logger</span><span class="p">):</span> 
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    .. class:: Class Args :</span>
+<span class="sd">      </span>
+<span class="sd">        :param jid: Jabber Id (= Xmpp Slice + Date)</span>
+<span class="sd">        :type jid: str</span>
+<span class="sd">        :param password: Jabber Password (= Xmpp Password)</span>
+<span class="sd">        :type password: str</span>
+
+<span class="sd">    .. note::</span>
+
+<span class="sd">       This class is an XMPP Client with customized method</span>
+
+<span class="sd">    &quot;&quot;&quot;</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">jid</span><span class="p">,</span> <span class="n">password</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+
+<span class="sd">        :param jid: Jabber Id (= Xmpp Slice + Date)</span>
+<span class="sd">        :type jid: str</span>
+<span class="sd">        :param password: Jabber Password (= Xmpp Password)</span>
+<span class="sd">        :type password: str</span>
+
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">Logger</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s">&quot;OMFClient&quot;</span><span class="p">)</span>
+
+        <span class="n">sleekxmpp</span><span class="o">.</span><span class="n">ClientXMPP</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">jid</span><span class="p">,</span> <span class="n">password</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_ready</span> <span class="o">=</span> <span class="bp">False</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_registered</span> <span class="o">=</span> <span class="bp">False</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_server</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_parser</span> <span class="o">=</span> <span class="bp">None</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">register_plugin</span><span class="p">(</span><span class="s">&#39;xep_0077&#39;</span><span class="p">)</span> <span class="c"># In-band registration</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">register_plugin</span><span class="p">(</span><span class="s">&#39;xep_0030&#39;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">register_plugin</span><span class="p">(</span><span class="s">&#39;xep_0059&#39;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">register_plugin</span><span class="p">(</span><span class="s">&#39;xep_0060&#39;</span><span class="p">)</span> <span class="c"># PubSub </span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">add_event_handler</span><span class="p">(</span><span class="s">&quot;session_start&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">start</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">add_event_handler</span><span class="p">(</span><span class="s">&quot;register&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">register</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">add_event_handler</span><span class="p">(</span><span class="s">&quot;pubsub_publish&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">handle_omf_message</span><span class="p">)</span>
+
+        <span class="c">#Init the parser</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_init_parser</span><span class="p">()</span>
+        
+    <span class="k">def</span> <span class="nf">_init_parser</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Init the parser depending on the OMF Version</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_parser</span> <span class="o">=</span> <span class="n">OMF6Parser</span><span class="p">()</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="OMFClient.ready"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.ready">[docs]</a>    <span class="k">def</span> <span class="nf">ready</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Check if the client is ready</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ready</span>
+</div>
+<div class="viewcode-block" id="OMFClient.start"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.start">[docs]</a>    <span class="k">def</span> <span class="nf">start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Send presence to the Xmppp Server. This function is called directly by the sleekXmpp library</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">send_presence</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_ready</span> <span class="o">=</span> <span class="bp">True</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_server</span> <span class="o">=</span> <span class="s">&quot;pubsub.</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">boundjid</span><span class="o">.</span><span class="n">domain</span>
+</div>
+<div class="viewcode-block" id="OMFClient.register"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.register">[docs]</a>    <span class="k">def</span> <span class="nf">register</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iq</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;  Register to the Xmppp Server. This function is called directly by the sleekXmpp library</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_registered</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; </span><span class="si">%s</span><span class="s"> already registered!&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">boundjid</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">return</span> 
+
+        <span class="n">resp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">Iq</span><span class="p">()</span>
+        <span class="n">resp</span><span class="p">[</span><span class="s">&#39;type&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;set&#39;</span>
+        <span class="n">resp</span><span class="p">[</span><span class="s">&#39;register&#39;</span><span class="p">][</span><span class="s">&#39;username&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">boundjid</span><span class="o">.</span><span class="n">user</span>
+        <span class="n">resp</span><span class="p">[</span><span class="s">&#39;register&#39;</span><span class="p">][</span><span class="s">&#39;password&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">password</span>
+
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">resp</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">now</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Account created for </span><span class="si">%s</span><span class="s">!&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">boundjid</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_registered</span> <span class="o">=</span> <span class="bp">True</span>
+        <span class="k">except</span> <span class="n">IqError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Could not register account: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">e</span><span class="o">.</span><span class="n">iq</span><span class="p">[</span><span class="s">&#39;error&#39;</span><span class="p">][</span><span class="s">&#39;text&#39;</span><span class="p">]</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+        <span class="k">except</span> <span class="n">IqTimeout</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; No response from server.&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="OMFClient.unregister"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.unregister">[docs]</a>    <span class="k">def</span> <span class="nf">unregister</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;  Unregister from the Xmppp Server.</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">plugin</span><span class="p">[</span><span class="s">&#39;xep_0077&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">cancel_registration</span><span class="p">(</span>
+                <span class="n">ifrom</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">boundjid</span><span class="o">.</span><span class="n">full</span><span class="p">)</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Account unregistered for </span><span class="si">%s</span><span class="s">!&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">boundjid</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+        <span class="k">except</span> <span class="n">IqError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Could not unregister account: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">e</span><span class="o">.</span><span class="n">iq</span><span class="p">[</span><span class="s">&#39;error&#39;</span><span class="p">][</span><span class="s">&#39;text&#39;</span><span class="p">]</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+        <span class="k">except</span> <span class="n">IqTimeout</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; No response from server.&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="OMFClient.nodes"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.nodes">[docs]</a>    <span class="k">def</span> <span class="nf">nodes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;  Get all the nodes of the Xmppp Server.</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="p">[</span><span class="s">&#39;xep_0060&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">get_nodes</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_server</span><span class="p">)</span>
+            <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">result</span><span class="p">[</span><span class="s">&#39;disco_items&#39;</span><span class="p">][</span><span class="s">&#39;items&#39;</span><span class="p">]:</span>
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39; - </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="n">item</span><span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">return</span> <span class="n">result</span>
+        <span class="k">except</span><span class="p">:</span>
+            <span class="n">error</span> <span class="o">=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">()</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39;Could not retrieve node list.</span><span class="se">\n</span><span class="s">traceback:</span><span class="se">\n</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">error</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="OMFClient.subscriptions"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.subscriptions">[docs]</a>    <span class="k">def</span> <span class="nf">subscriptions</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;  Get all the subscriptions of the Xmppp Server.</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="p">[</span><span class="s">&#39;xep_0060&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">get_subscriptions</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_server</span><span class="p">)</span>
+                <span class="c">#self.boundjid.full)</span>
+            <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">result</span><span class="p">[</span><span class="s">&#39;node&#39;</span><span class="p">]:</span>
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39; - </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">return</span> <span class="n">result</span>
+        <span class="k">except</span><span class="p">:</span>
+            <span class="n">error</span> <span class="o">=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">()</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39; Could not retrieve subscriptions.</span><span class="se">\n</span><span class="s">traceback:</span><span class="se">\n</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">error</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="OMFClient.create"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.create">[docs]</a>    <span class="k">def</span> <span class="nf">create</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;  Create the topic corresponding to the node</span>
+
+<span class="sd">        :param node: Name of the topic, corresponding to the node (ex : omf.plexus.wlab17)</span>
+<span class="sd">        :type node: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Create Topic : &quot;</span> <span class="o">+</span> <span class="n">node</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+   
+        <span class="n">config</span> <span class="o">=</span> <span class="bp">self</span><span class="p">[</span><span class="s">&#39;xep_0004&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">makeForm</span><span class="p">(</span><span class="s">&#39;submit&#39;</span><span class="p">)</span>
+        <span class="n">config</span><span class="o">.</span><span class="n">add_field</span><span class="p">(</span><span class="n">var</span><span class="o">=</span><span class="s">&#39;pubsub#node_type&#39;</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="s">&#39;leaf&#39;</span><span class="p">)</span>
+        <span class="n">config</span><span class="o">.</span><span class="n">add_field</span><span class="p">(</span><span class="n">var</span><span class="o">=</span><span class="s">&#39;pubsub#notify_retract&#39;</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="s">&#39;0&#39;</span><span class="p">)</span>
+        <span class="n">config</span><span class="o">.</span><span class="n">add_field</span><span class="p">(</span><span class="n">var</span><span class="o">=</span><span class="s">&#39;pubsub#publish_model&#39;</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="s">&#39;open&#39;</span><span class="p">)</span>
+        <span class="n">config</span><span class="o">.</span><span class="n">add_field</span><span class="p">(</span><span class="n">var</span><span class="o">=</span><span class="s">&#39;pubsub#persist_items&#39;</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="s">&#39;1&#39;</span><span class="p">)</span>
+        <span class="n">config</span><span class="o">.</span><span class="n">add_field</span><span class="p">(</span><span class="n">var</span><span class="o">=</span><span class="s">&#39;pubsub#max_items&#39;</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="s">&#39;1&#39;</span><span class="p">)</span>
+        <span class="n">config</span><span class="o">.</span><span class="n">add_field</span><span class="p">(</span><span class="n">var</span><span class="o">=</span><span class="s">&#39;pubsub#title&#39;</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="n">node</span><span class="p">)</span>
+
+        <span class="k">try</span><span class="p">:</span>
+            <span class="bp">self</span><span class="p">[</span><span class="s">&#39;xep_0060&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">create_node</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_server</span><span class="p">,</span> <span class="n">node</span><span class="p">,</span> <span class="n">config</span> <span class="o">=</span> <span class="n">config</span><span class="p">)</span>
+        <span class="k">except</span><span class="p">:</span>
+            <span class="c">#error = traceback.format_exc()</span>
+            <span class="c">#msg = &#39; Could not create topic: %s\ntraceback:\n%s&#39; % (node, error)</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39;Could not create the topic : &#39;</span><span class="o">+</span><span class="n">node</span><span class="o">+</span><span class="s">&#39; . Maybe the topic already exists&#39;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="OMFClient.delete"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.delete">[docs]</a>    <span class="k">def</span> <span class="nf">delete</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;  Delete the topic corresponding to the node</span>
+
+<span class="sd">        :param node: Name of the topic, corresponding to the node (ex : omf.plexus.wlab17)</span>
+<span class="sd">        :type node: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="c"># To check if the queue are well empty at the end</span>
+        <span class="c">#print &quot; length of the queue : &quot; + str(self.send_queue.qsize())</span>
+        <span class="c">#print &quot; length of the queue : &quot; + str(self.event_queue.qsize())</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="bp">self</span><span class="p">[</span><span class="s">&#39;xep_0060&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">delete_node</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_server</span><span class="p">,</span> <span class="n">node</span><span class="p">)</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39; Deleted node: </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">node</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+        <span class="k">except</span><span class="p">:</span>
+            <span class="c">#error = traceback.format_exc()</span>
+            <span class="c">#msg = &#39; Could not delete topic: %s\ntraceback:\n%s&#39; % (node, error)</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39;Could not delete the topic : &#39;</span><span class="o">+</span><span class="n">node</span><span class="o">+</span><span class="s">&#39; . Maybe It is not the owner of the topic&#39;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+    </div>
+<div class="viewcode-block" id="OMFClient.publish"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.publish">[docs]</a>    <span class="k">def</span> <span class="nf">publish</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">node</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;  Publish the data to the corresponding topic</span>
+
+<span class="sd">        :param data: Data that will be published</span>
+<span class="sd">        :type data: str</span>
+<span class="sd">        :param node: Name of the topic</span>
+<span class="sd">        :type node: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span> 
+
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Publish to Topic : &quot;</span> <span class="o">+</span> <span class="n">node</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="p">[</span><span class="s">&#39;xep_0060&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">publish</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_server</span><span class="p">,</span><span class="n">node</span><span class="p">,</span><span class="n">payload</span><span class="o">=</span><span class="n">data</span><span class="p">)</span>
+            <span class="c"># id = result[&#39;pubsub&#39;][&#39;publish&#39;][&#39;item&#39;][&#39;id&#39;]</span>
+            <span class="c"># print(&#39;Published at item id: %s&#39; % id)</span>
+        <span class="k">except</span><span class="p">:</span>
+            <span class="n">error</span> <span class="o">=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">()</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39; Could not publish to: </span><span class="si">%s</span><span class="se">\n</span><span class="s">traceback:</span><span class="se">\n</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">error</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="OMFClient.get"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.get">[docs]</a>    <span class="k">def</span> <span class="nf">get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;  Get the item</span>
+
+<span class="sd">        :param data: data from which the items will be get back</span>
+<span class="sd">        :type data: str</span>
+
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="p">[</span><span class="s">&#39;xep_0060&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">get_item</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_server</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">boundjid</span><span class="p">,</span>
+                <span class="n">data</span><span class="p">)</span>
+            <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">result</span><span class="p">[</span><span class="s">&#39;pubsub&#39;</span><span class="p">][</span><span class="s">&#39;items&#39;</span><span class="p">][</span><span class="s">&#39;substanzas&#39;</span><span class="p">]:</span>
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39;Retrieved item </span><span class="si">%s</span><span class="s">: </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">item</span><span class="p">[</span><span class="s">&#39;id&#39;</span><span class="p">],</span> <span class="n">tostring</span><span class="p">(</span><span class="n">item</span><span class="p">[</span><span class="s">&#39;payload&#39;</span><span class="p">]))</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+        <span class="k">except</span><span class="p">:</span>
+            <span class="n">error</span> <span class="o">=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">()</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39; Could not retrieve item </span><span class="si">%s</span><span class="s"> from topic </span><span class="si">%s</span><span class="se">\n</span><span class="s">traceback:</span><span class="se">\n</span><span class="si">%s</span><span class="s">&#39;</span> \
+                    <span class="o">%</span> <span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">boundjid</span><span class="p">,</span> <span class="n">error</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="OMFClient.retract"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.retract">[docs]</a>    <span class="k">def</span> <span class="nf">retract</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;  Retract the item</span>
+
+<span class="sd">        :param data: data from which the item will be retracted</span>
+<span class="sd">        :type data: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="p">[</span><span class="s">&#39;xep_0060&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">retract</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_server</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">boundjid</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39; Retracted item </span><span class="si">%s</span><span class="s"> from topic </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">boundjid</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+        <span class="k">except</span><span class="p">:</span>
+            <span class="n">error</span> <span class="o">=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">()</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39;Could not retract item </span><span class="si">%s</span><span class="s"> from topic </span><span class="si">%s</span><span class="se">\n</span><span class="s">traceback:</span><span class="se">\n</span><span class="si">%s</span><span class="s">&#39;</span> \
+                    <span class="o">%</span> <span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">boundjid</span><span class="p">,</span> <span class="n">error</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="OMFClient.purge"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.purge">[docs]</a>    <span class="k">def</span> <span class="nf">purge</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;  Purge the information in the server</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="p">[</span><span class="s">&#39;xep_0060&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">purge</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_server</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">boundjid</span><span class="p">)</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39; Purged all items from topic </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">boundjid</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+        <span class="k">except</span><span class="p">:</span>
+            <span class="n">error</span> <span class="o">=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">()</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39; Could not purge items from topic </span><span class="si">%s</span><span class="se">\n</span><span class="s">traceback:</span><span class="se">\n</span><span class="si">%s</span><span class="s">&#39;</span> \
+                    <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">boundjid</span><span class="p">,</span> <span class="n">error</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="OMFClient.subscribe"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.subscribe">[docs]</a>    <span class="k">def</span> <span class="nf">subscribe</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Subscribe to a topic</span>
+
+<span class="sd">        :param node: Name of the topic</span>
+<span class="sd">        :type node: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="p">[</span><span class="s">&#39;xep_0060&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">subscribe</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_server</span><span class="p">,</span> <span class="n">node</span><span class="p">)</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39; Subscribed </span><span class="si">%s</span><span class="s"> to topic </span><span class="si">%s</span><span class="s">&#39;</span> \
+                    <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">boundjid</span><span class="o">.</span><span class="n">user</span><span class="p">,</span> <span class="n">node</span><span class="p">)</span>
+            <span class="c">#self.info(msg)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+        <span class="k">except</span><span class="p">:</span>
+            <span class="n">error</span> <span class="o">=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">()</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39; Could not subscribe </span><span class="si">%s</span><span class="s"> to topic </span><span class="si">%s</span><span class="se">\n</span><span class="s">traceback:</span><span class="se">\n</span><span class="si">%s</span><span class="s">&#39;</span> \
+                    <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">boundjid</span><span class="o">.</span><span class="n">bare</span><span class="p">,</span> <span class="n">node</span><span class="p">,</span> <span class="n">error</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="OMFClient.unsubscribe"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.unsubscribe">[docs]</a>    <span class="k">def</span> <span class="nf">unsubscribe</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Unsubscribe to a topic</span>
+
+<span class="sd">        :param node: Name of the topic</span>
+<span class="sd">        :type node: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="p">[</span><span class="s">&#39;xep_0060&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">unsubscribe</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_server</span><span class="p">,</span> <span class="n">node</span><span class="p">)</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39; Unsubscribed </span><span class="si">%s</span><span class="s"> from topic </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">boundjid</span><span class="o">.</span><span class="n">bare</span><span class="p">,</span> <span class="n">node</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+        <span class="k">except</span><span class="p">:</span>
+            <span class="n">error</span> <span class="o">=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">()</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39; Could not unsubscribe </span><span class="si">%s</span><span class="s"> from topic </span><span class="si">%s</span><span class="se">\n</span><span class="s">traceback:</span><span class="se">\n</span><span class="si">%s</span><span class="s">&#39;</span> \
+                    <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">boundjid</span><span class="o">.</span><span class="n">bare</span><span class="p">,</span> <span class="n">node</span><span class="p">,</span> <span class="n">error</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="OMFClient.check_mailbox"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.check_mailbox">[docs]</a>    <span class="k">def</span> <span class="nf">check_mailbox</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">itype</span><span class="p">,</span> <span class="n">attr</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Check the mail box</span>
+
+<span class="sd">        :param itype: type of mail</span>
+<span class="sd">        :type itype: str</span>
+<span class="sd">        :param attr: value wanted</span>
+<span class="sd">        :type attr: str</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parser</span><span class="o">.</span><span class="n">check_mailbox</span><span class="p">(</span><span class="n">itype</span><span class="p">,</span> <span class="n">attr</span><span class="p">)</span>
+
+</div>
+<div class="viewcode-block" id="OMFClient.handle_omf_message"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.handle_omf_message">[docs]</a>    <span class="k">def</span> <span class="nf">handle_omf_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iq</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Handle published/received message </span>
+
+<span class="sd">        :param iq: Stanzas that is currently published/received</span>
+<span class="sd">        :type iq: Iq Stanza</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_parser</span><span class="o">.</span><span class="n">handle</span><span class="p">(</span><span class="n">iq</span><span class="p">)</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/omf/omf_resource.html b/doc/sphinx/_build/html/_modules/nepi/resources/omf/omf_resource.html
new file mode 100644 (file)
index 0000000..d88f121
--- /dev/null
@@ -0,0 +1,167 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.omf.omf_resource &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.omf.omf_resource</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Julien Tribino &lt;julien.tribino@inria.fr&gt;</span>
+<span class="c">#         Lucia Guevgeozian &lt;lucia.guevgeozian_odizzio@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+
+
+<div class="viewcode-block" id="ResourceGateway"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_resource.ResourceGateway">[docs]</a><span class="k">class</span> <span class="nc">ResourceGateway</span><span class="p">:</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Dictionary used to set OMF gateway depending on Testbed information.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="c">#XXX: A.Q. COMMENT: This looks a bit hardcoded</span>
+    <span class="c">#       SHOULDN&#39;T THIS BE IN A SEPARATED FILE RATHER THAN IN THE </span>
+    <span class="c">#       BASE CLASS FOR ALL OMF RESOURCES?</span>
+    <span class="n">TestbedtoGateway</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">({</span>
+        <span class="s">&quot;wilabt&quot;</span> <span class="p">:</span> <span class="s">&quot;ops.wilab2.ilabt.iminds.be&quot;</span><span class="p">,</span>
+        <span class="s">&quot;nitos&quot;</span> <span class="p">:</span> <span class="s">&quot;nitlab.inf.uth.gr&quot;</span><span class="p">,</span>
+        <span class="s">&quot;nicta&quot;</span> <span class="p">:</span> <span class="s">&quot;??.??.??&quot;</span><span class="p">,</span>
+    <span class="p">})</span>
+
+    <span class="n">AMtoGateway</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">({</span>
+        <span class="s">&quot;am.wilab2.ilabt.iminds.be&quot;</span> <span class="p">:</span> <span class="s">&quot;ops.wilab2.ilabt.iminds.be&quot;</span><span class="p">,</span>
+        <span class="s">&quot;nitlab.inf.uth.gr&quot;</span> <span class="p">:</span> <span class="s">&quot;nitlab.inf.uth.gr&quot;</span><span class="p">,</span>
+        <span class="s">&quot;nicta&quot;</span> <span class="p">:</span> <span class="s">&quot;??.??.??&quot;</span><span class="p">,</span>
+    <span class="p">})</span>
+</div>
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="OMFResource"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_resource.OMFResource">[docs]</a><span class="k">class</span> <span class="nc">OMFResource</span><span class="p">(</span><span class="n">ResourceManager</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Generic resource gathering XMPP credential information and common methods</span>
+<span class="sd">    for OMF nodes, channels, applications, etc.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;abstract::omf::Resource&quot;</span>
+    <span class="n">_platform</span> <span class="o">=</span> <span class="s">&quot;omf&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+
+        <span class="n">xmppServer</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;xmppServer&quot;</span><span class="p">,</span> <span class="s">&quot;Xmpp Server&quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Credential</span><span class="p">)</span>
+        <span class="n">xmppUser</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;xmppUser&quot;</span><span class="p">,</span><span class="s">&quot;Name of the Xmpp User/Slice&quot;</span><span class="p">,</span> 
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Credential</span><span class="p">)</span>
+        <span class="n">xmppPort</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;xmppPort&quot;</span><span class="p">,</span> <span class="s">&quot;Xmpp Port&quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Credential</span><span class="p">)</span>
+        <span class="n">xmppPassword</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;xmppPassword&quot;</span><span class="p">,</span> <span class="s">&quot;Xmpp Password&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Credential</span><span class="p">)</span>
+        <span class="n">version</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;version&quot;</span><span class="p">,</span> <span class="s">&quot;Version of OMF : Either 5 or 6&quot;</span><span class="p">,</span>
+                <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;6&quot;</span><span class="p">,</span> <span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">xmppUser</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">xmppServer</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">xmppPort</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">xmppPassword</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">version</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">OMFResource</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="k">pass</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/omf/wilabt_node.html b/doc/sphinx/_build/html/_modules/nepi/resources/omf/wilabt_node.html
new file mode 100644 (file)
index 0000000..ff95e48
--- /dev/null
@@ -0,0 +1,559 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.omf.wilabt_node &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.omf.wilabt_node</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Lucia Guevgeozian &lt;lucia.guevgeozian_odizzio@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span> 
+<span class="kn">from</span> <span class="nn">nepi.resources.omf.node</span> <span class="kn">import</span> <span class="n">OMFNode</span>
+<span class="kn">from</span> <span class="nn">nepi.util.sfaapi</span> <span class="kn">import</span> <span class="n">SFAAPIFactory</span> 
+<span class="kn">from</span> <span class="nn">nepi.util.execfuncs</span> <span class="kn">import</span> <span class="n">lexec</span>
+<span class="kn">from</span> <span class="nn">nepi.util</span> <span class="kn">import</span> <span class="n">sshfuncs</span>
+
+<span class="kn">from</span> <span class="nn">random</span> <span class="kn">import</span> <span class="n">randint</span>
+<span class="kn">import</span> <span class="nn">time</span>
+<span class="kn">import</span> <span class="nn">re</span>
+<span class="kn">import</span> <span class="nn">weakref</span>
+<span class="kn">import</span> <span class="nn">socket</span>
+<span class="kn">import</span> <span class="nn">threading</span>
+<span class="kn">import</span> <span class="nn">datetime</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="WilabtSfaNode"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.wilabt_node.WilabtSfaNode">[docs]</a><span class="k">class</span> <span class="nc">WilabtSfaNode</span><span class="p">(</span><span class="n">OMFNode</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;wilabt::sfa::Node&quot;</span>
+    <span class="n">_help</span> <span class="o">=</span> <span class="s">&quot;Controls a Wilabt host accessible using a SSH key &quot;</span> \
+            <span class="s">&quot;and provisioned using SFA&quot;</span>
+    <span class="n">_platform</span> <span class="o">=</span> <span class="s">&quot;omf&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        
+        <span class="n">username</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;username&quot;</span><span class="p">,</span> <span class="s">&quot;Local account username&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Credential</span><span class="p">)</span>
+
+        <span class="n">identity</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;identity&quot;</span><span class="p">,</span> <span class="s">&quot;SSH identity file&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Credential</span><span class="p">)</span>
+
+        <span class="n">server_key</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;serverKey&quot;</span><span class="p">,</span> <span class="s">&quot;Server public key&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">sfa_user</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;sfauser&quot;</span><span class="p">,</span> <span class="s">&quot;SFA user&quot;</span><span class="p">,</span>
+                    <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Credential</span><span class="p">)</span>
+
+        <span class="n">sfa_private_key</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;sfaPrivateKey&quot;</span><span class="p">,</span> <span class="s">&quot;SFA path to the private key </span><span class="se">\</span>
+<span class="s">                            used to generate the user credential&quot;</span><span class="p">,</span>
+                            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Credential</span><span class="p">)</span>
+
+        <span class="n">slicename</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;slicename&quot;</span><span class="p">,</span> <span class="s">&quot;SFA slice for the experiment&quot;</span><span class="p">,</span>
+                    <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Credential</span><span class="p">)</span>
+
+        <span class="n">gateway_user</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;gatewayUser&quot;</span><span class="p">,</span> <span class="s">&quot;Gateway account username&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">gateway</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;gateway&quot;</span><span class="p">,</span> <span class="s">&quot;Hostname of the gateway machine&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">host</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;host&quot;</span><span class="p">,</span> <span class="s">&quot;Name of the physical machine&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">disk_image</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;disk_image&quot;</span><span class="p">,</span> <span class="s">&quot;Specify a specific disk image for a node&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+        
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">username</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">identity</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">server_key</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">sfa_user</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">sfa_private_key</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">slicename</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">gateway_user</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">gateway</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">host</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">disk_image</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">WilabtSfaNode</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">_ecobj</span> <span class="o">=</span> <span class="n">weakref</span><span class="o">.</span><span class="n">ref</span><span class="p">(</span><span class="n">ec</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_sfaapi</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_node_to_provision</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_slicenode</span> <span class="o">=</span> <span class="bp">False</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_host</span> <span class="o">=</span> <span class="bp">False</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_username</span> <span class="o">=</span> <span class="bp">None</span>
+
+    <span class="k">def</span> <span class="nf">_skip_provision</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">sfa_user</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;sfauser&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">sfa_user</span><span class="p">:</span>
+            <span class="k">return</span> <span class="bp">True</span>
+        <span class="k">else</span><span class="p">:</span> <span class="k">return</span> <span class="bp">False</span>
+    
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="WilabtSfaNode.sfaapi"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.wilabt_node.WilabtSfaNode.sfaapi">[docs]</a>    <span class="k">def</span> <span class="nf">sfaapi</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Property to instanciate the SFA API based in sfi client.</span>
+<span class="sd">        For each SFA method called this instance is used.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_sfaapi</span><span class="p">:</span>
+            <span class="n">sfa_user</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;sfauser&quot;</span><span class="p">)</span>
+            <span class="n">sfa_sm</span> <span class="o">=</span> <span class="s">&quot;http://www.wilab2.ilabt.iminds.be:12369/protogeni/xmlrpc/am/3.0&quot;</span>
+            <span class="n">sfa_auth</span> <span class="o">=</span> <span class="s">&#39;.&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">sfa_user</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">)[:</span><span class="mi">2</span><span class="p">])</span>
+            <span class="n">sfa_registry</span> <span class="o">=</span> <span class="s">&quot;http://sfa3.planet-lab.eu:12345/&quot;</span>
+            <span class="n">sfa_private_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;sfaPrivateKey&quot;</span><span class="p">)</span>
+            <span class="n">batch</span> <span class="o">=</span> <span class="bp">True</span>
+
+            <span class="n">_sfaapi</span> <span class="o">=</span> <span class="n">SFAAPIFactory</span><span class="o">.</span><span class="n">get_api</span><span class="p">(</span><span class="n">sfa_user</span><span class="p">,</span> <span class="n">sfa_auth</span><span class="p">,</span> 
+                <span class="n">sfa_registry</span><span class="p">,</span> <span class="n">sfa_sm</span><span class="p">,</span> <span class="n">sfa_private_key</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ecobj</span><span class="p">(),</span> <span class="n">batch</span><span class="p">,</span> <span class="n">WilabtSfaNode</span><span class="o">.</span><span class="n">_rtype</span><span class="p">)</span>
+            
+            <span class="k">if</span> <span class="ow">not</span> <span class="n">_sfaapi</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">fail_sfaapi</span><span class="p">()</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">_sfaapi</span> <span class="o">=</span> <span class="n">weakref</span><span class="o">.</span><span class="n">ref</span><span class="p">(</span><span class="n">_sfaapi</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_sfaapi</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="WilabtSfaNode.do_discover"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.wilabt_node.WilabtSfaNode.do_discover">[docs]</a>    <span class="k">def</span> <span class="nf">do_discover</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Based on the attributes defined by the user, discover the suitable </span>
+<span class="sd">        node for provision.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">nodes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sfaapi</span><span class="o">.</span><span class="n">get_resources_hrn</span><span class="p">()</span>
+
+        <span class="n">host</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_host</span><span class="p">()</span>
+        <span class="k">if</span> <span class="n">host</span><span class="p">:</span>
+            <span class="c"># the user specified one particular node to be provisioned</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_host</span> <span class="o">=</span> <span class="bp">True</span>
+            <span class="n">host_hrn</span> <span class="o">=</span> <span class="n">nodes</span><span class="p">[</span><span class="n">host</span><span class="p">]</span>
+
+            <span class="c"># check that the node is not blacklisted or being provisioned</span>
+            <span class="c"># by other RM</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_blacklisted</span><span class="p">(</span><span class="n">host_hrn</span><span class="p">):</span>
+                <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_reserved</span><span class="p">(</span><span class="n">host_hrn</span><span class="p">):</span>
+                    <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_if_in_slice</span><span class="p">([</span><span class="n">host_hrn</span><span class="p">]):</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;Node already in slice </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">host_hrn</span><span class="p">)</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">_slicenode</span> <span class="o">=</span> <span class="bp">True</span>
+                    <span class="n">host</span> <span class="o">=</span> <span class="n">host</span> <span class="o">+</span> <span class="s">&#39;.wilab2.ilabt.iminds.be&#39;</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&#39;host&#39;</span><span class="p">,</span> <span class="n">host</span><span class="p">)</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">_node_to_provision</span> <span class="o">=</span> <span class="n">host_hrn</span>
+                    <span class="nb">super</span><span class="p">(</span><span class="n">WilabtSfaNode</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="WilabtSfaNode.do_provision"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.wilabt_node.WilabtSfaNode.do_provision">[docs]</a>    <span class="k">def</span> <span class="nf">do_provision</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Add node to user&#39;s slice and verifing that the node is functioning</span>
+<span class="sd">        correctly. Check ssh, omf rc running, hostname, file system.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">provision_ok</span> <span class="o">=</span> <span class="bp">False</span>
+        <span class="n">ssh_ok</span> <span class="o">=</span> <span class="bp">False</span>
+        <span class="n">proc_ok</span> <span class="o">=</span> <span class="bp">False</span>
+        <span class="n">timeout</span> <span class="o">=</span> <span class="mi">300</span>
+
+        <span class="k">while</span> <span class="ow">not</span> <span class="n">provision_ok</span><span class="p">:</span>
+            <span class="n">node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_node_to_provision</span>
+            <span class="c">#if self._slicenode:</span>
+            <span class="c">#    self._delete_from_slice()</span>
+            <span class="c">#    self.debug(&quot;Waiting 480 sec for re-adding to slice&quot;)</span>
+            <span class="c">#    time.sleep(480) # Timout for the testbed to allow a new reservation</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_add_node_to_slice</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+            <span class="n">t</span> <span class="o">=</span> <span class="mi">0</span>
+            <span class="k">while</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_if_in_slice</span><span class="p">([</span><span class="n">node</span><span class="p">])</span> <span class="ow">and</span> <span class="n">t</span> <span class="o">&lt;</span> <span class="n">timeout</span> \
+                <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ecobj</span><span class="p">()</span><span class="o">.</span><span class="n">abort</span><span class="p">:</span>
+                <span class="n">t</span> <span class="o">=</span> <span class="n">t</span> <span class="o">+</span> <span class="mi">5</span>
+                <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;Waiting 5 sec for resources to be added&quot;</span><span class="p">)</span>
+                <span class="k">continue</span>
+
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_if_in_slice</span><span class="p">([</span><span class="n">node</span><span class="p">]):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;Couldn&#39;t add node </span><span class="si">%s</span><span class="s"> to slice&quot;</span> <span class="o">%</span> <span class="n">node</span><span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">fail_node_not_available</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">_get_username</span><span class="p">()</span>
+            <span class="n">ssh_ok</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_ssh_loop</span><span class="p">()</span>          
+
+            <span class="k">if</span> <span class="ow">not</span> <span class="n">ssh_ok</span><span class="p">:</span>
+                <span class="c"># the timeout was reach without establishing ssh connection</span>
+                <span class="c"># the node is blacklisted, and a new</span>
+                <span class="c"># node to provision is discovered</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_blacklist_node</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+                <span class="k">continue</span>
+            
+            <span class="c"># check /proc directory is mounted (ssh_ok = True)</span>
+            <span class="c"># file system is not read only, hostname is correct</span>
+            <span class="c"># and omf_rc process is up</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_fs</span><span class="p">():</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+                    <span class="k">continue</span>
+                <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_omfrc</span><span class="p">():</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+                    <span class="k">continue</span>
+                <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_hostname</span><span class="p">():</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+                    <span class="k">continue</span>
+            
+                <span class="k">else</span><span class="p">:</span>
+                    <span class="n">provision_ok</span> <span class="o">=</span> <span class="bp">True</span>
+                    <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;host&#39;</span><span class="p">):</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">_set_host_attr</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>            
+                    <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot; Node provisioned &quot;</span><span class="p">)</span>            
+            
+        <span class="nb">super</span><span class="p">(</span><span class="n">WilabtSfaNode</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_provision</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="WilabtSfaNode.do_deploy"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.wilabt_node.WilabtSfaNode.do_deploy">[docs]</a>    <span class="k">def</span> <span class="nf">do_deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">NEW</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Deploying w-iLab.t node&quot;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_provision</span><span class="p">()</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">WilabtSfaNode</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_deploy</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="WilabtSfaNode.do_release"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.wilabt_node.WilabtSfaNode.do_release">[docs]</a>    <span class="k">def</span> <span class="nf">do_release</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">WilabtSfaNode</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_release</span><span class="p">()</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_skip_provision</span><span class="p">():</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot; Releasing SFA API &quot;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">sfaapi</span><span class="o">.</span><span class="n">release</span><span class="p">()</span>
+</div>
+    <span class="k">def</span> <span class="nf">_blacklisted</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">host_hrn</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Check in the SFA API that the node is not in the blacklist.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">sfaapi</span><span class="o">.</span><span class="n">blacklisted</span><span class="p">(</span><span class="n">host_hrn</span><span class="p">):</span>
+           <span class="bp">self</span><span class="o">.</span><span class="n">fail_node_not_available</span><span class="p">(</span><span class="n">host_hrn</span><span class="p">)</span>
+        <span class="k">return</span> <span class="bp">False</span>
+
+    <span class="k">def</span> <span class="nf">_reserved</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">host_hrn</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Check in the SFA API that the node is not in the reserved</span>
+<span class="sd">        list.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">sfaapi</span><span class="o">.</span><span class="n">reserved</span><span class="p">(</span><span class="n">host_hrn</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">fail_node_not_available</span><span class="p">(</span><span class="n">host_hrn</span><span class="p">)</span>
+        <span class="k">return</span> <span class="bp">False</span>
+
+    <span class="k">def</span> <span class="nf">_get_username</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Get the username for login in to the nodes from RSpec.</span>
+<span class="sd">        Wilabt username is not made out of any convention, it</span>
+<span class="sd">        has to be retrived from the manifest RSpec.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">slicename</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;slicename&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_username</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
+            <span class="n">slice_info</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sfaapi</span><span class="o">.</span><span class="n">get_slice_resources</span><span class="p">(</span><span class="n">slicename</span><span class="p">)</span>
+            <span class="n">username</span> <span class="o">=</span> <span class="n">slice_info</span><span class="p">[</span><span class="s">&#39;resource&#39;</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="s">&#39;services&#39;</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="s">&#39;login&#39;</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="s">&#39;username&#39;</span><span class="p">]</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&#39;username&#39;</span><span class="p">,</span> <span class="n">username</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;Retriving username information from RSpec </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">username</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_username</span> <span class="o">=</span> <span class="n">username</span>
+            
+    <span class="k">def</span> <span class="nf">_check_ssh_loop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Check that the ssh login is possible. In wilabt is done</span>
+<span class="sd">        through the gateway because is private testbed.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">t</span> <span class="o">=</span> <span class="mi">0</span>
+        <span class="n">timeout</span> <span class="o">=</span> <span class="mi">1200</span>
+        <span class="n">ssh_ok</span> <span class="o">=</span> <span class="bp">False</span>
+        <span class="k">while</span> <span class="n">t</span> <span class="o">&lt;</span> <span class="n">timeout</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">ssh_ok</span><span class="p">:</span>
+            <span class="n">cmd</span> <span class="o">=</span> <span class="s">&#39;echo </span><span class="se">\&#39;</span><span class="s">GOOD NODE</span><span class="se">\&#39;</span><span class="s">&#39;</span>
+            <span class="p">((</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span><span class="p">)</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">cmd</span><span class="p">)</span>
+            <span class="k">if</span> <span class="n">out</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&quot;GOOD NODE&quot;</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span> <span class="s">&quot;No SSH connection, waiting 20s&quot;</span> <span class="p">)</span>
+                <span class="n">t</span> <span class="o">=</span> <span class="n">t</span> <span class="o">+</span> <span class="mi">20</span>
+                <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">20</span><span class="p">)</span>
+                <span class="k">continue</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span> <span class="s">&quot;SSH OK&quot;</span> <span class="p">)</span>
+                <span class="n">ssh_ok</span> <span class="o">=</span> <span class="bp">True</span>
+                <span class="k">continue</span>
+        <span class="k">return</span> <span class="n">ssh_ok</span>
+
+    <span class="k">def</span> <span class="nf">_check_fs</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Check file system, /proc well mounted.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">cmd</span> <span class="o">=</span> <span class="s">&#39;mount |grep proc&#39;</span>
+        <span class="p">((</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span><span class="p">)</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">cmd</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">out</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&quot;/proc type proc&quot;</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s">&quot; Corrupted file system &quot;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_blacklist_node</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+            <span class="k">return</span> <span class="bp">False</span>
+        <span class="k">return</span> <span class="bp">True</span>
+
+    <span class="k">def</span> <span class="nf">_check_omfrc</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Check that OMF 6 resource controller is running.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">cmd</span> <span class="o">=</span> <span class="s">&#39;ps aux|grep omf&#39;</span>
+        <span class="p">((</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span><span class="p">)</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">cmd</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">out</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&quot;/usr/local/rvm/gems/ruby-1.9.3-p286@omf/bin/omf_rc&quot;</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">:</span>
+            <span class="k">return</span> <span class="bp">False</span>
+        <span class="k">return</span> <span class="bp">True</span>
+
+    <span class="k">def</span> <span class="nf">_check_hostname</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Check that the hostname in the image is not set to localhost.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">cmd</span> <span class="o">=</span> <span class="s">&#39;hostname&#39;</span>
+        <span class="p">((</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span><span class="p">)</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">cmd</span><span class="p">)</span>
+        <span class="k">if</span> <span class="s">&#39;localhost&#39;</span> <span class="ow">in</span> <span class="n">out</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span>
+            <span class="k">return</span> <span class="bp">False</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&#39;hostname&#39;</span><span class="p">,</span> <span class="n">out</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span> 
+        <span class="k">return</span> <span class="bp">True</span> 
+
+<div class="viewcode-block" id="WilabtSfaNode.execute"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.wilabt_node.WilabtSfaNode.execute">[docs]</a>    <span class="k">def</span> <span class="nf">execute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">command</span><span class="p">,</span>
+        <span class="n">sudo</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+        <span class="n">env</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+        <span class="n">tty</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+        <span class="n">forward_x11</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+        <span class="n">retry</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span>
+        <span class="n">connect_timeout</span> <span class="o">=</span> <span class="mi">30</span><span class="p">,</span>
+        <span class="n">strict_host_checking</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+        <span class="n">persistent</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span>
+        <span class="n">blocking</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span>
+        <span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Notice that this invocation will block until the</span>
+<span class="sd">        execution finishes. If this is not the desired behavior,</span>
+<span class="sd">        use &#39;run&#39; instead.&quot;&quot;&quot;</span>
+        <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="n">sshfuncs</span><span class="o">.</span><span class="n">rexec</span><span class="p">(</span>
+            <span class="n">command</span><span class="p">,</span>
+            <span class="n">host</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;host&quot;</span><span class="p">),</span>
+            <span class="n">user</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;username&quot;</span><span class="p">),</span>
+            <span class="n">port</span> <span class="o">=</span> <span class="mi">22</span><span class="p">,</span>
+            <span class="n">gwuser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;gatewayUser&quot;</span><span class="p">),</span>
+            <span class="n">gw</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;gateway&quot;</span><span class="p">),</span>
+            <span class="n">agent</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span>
+            <span class="n">sudo</span> <span class="o">=</span> <span class="n">sudo</span><span class="p">,</span>
+            <span class="n">identity</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;identity&quot;</span><span class="p">),</span>
+            <span class="n">server_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;serverKey&quot;</span><span class="p">),</span>
+            <span class="n">env</span> <span class="o">=</span> <span class="n">env</span><span class="p">,</span>
+            <span class="n">tty</span> <span class="o">=</span> <span class="n">tty</span><span class="p">,</span>
+            <span class="n">forward_x11</span> <span class="o">=</span> <span class="n">forward_x11</span><span class="p">,</span>
+            <span class="n">retry</span> <span class="o">=</span> <span class="n">retry</span><span class="p">,</span>
+            <span class="n">connect_timeout</span> <span class="o">=</span> <span class="n">connect_timeout</span><span class="p">,</span>
+            <span class="n">persistent</span> <span class="o">=</span> <span class="n">persistent</span><span class="p">,</span>
+            <span class="n">blocking</span> <span class="o">=</span> <span class="n">blocking</span><span class="p">,</span>
+            <span class="n">strict_host_checking</span> <span class="o">=</span> <span class="n">strict_host_checking</span>
+            <span class="p">)</span>
+
+        <span class="k">return</span> <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span>
+
+</div>
+    <span class="k">def</span> <span class="nf">_add_node_to_slice</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">host_hrn</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Add node to slice, using SFA API. Actually Wilabt testbed</span>
+<span class="sd">        doesn&#39;t allow adding nodes, in fact in the API there is method</span>
+<span class="sd">        to group all the nodes instanciated as WilabtSfaNodes and the</span>
+<span class="sd">        Allocate and Provision is done with the last call at </span>
+<span class="sd">        sfaapi.add_resource_to_slice_batch.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot; Adding node to slice &quot;</span><span class="p">)</span>
+        <span class="n">slicename</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;slicename&quot;</span><span class="p">)</span>
+        <span class="n">disk_image</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;disk_image&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">disk_image</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
+            <span class="n">properties</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;disk_image&#39;</span><span class="p">:</span> <span class="n">disk_image</span><span class="p">}</span>
+        <span class="k">else</span><span class="p">:</span> <span class="n">properties</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="c">#properties = None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">sfaapi</span><span class="o">.</span><span class="n">add_resource_to_slice_batch</span><span class="p">(</span><span class="n">slicename</span><span class="p">,</span> <span class="n">host_hrn</span><span class="p">,</span> <span class="n">properties</span><span class="o">=</span><span class="n">properties</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_delete_from_slice</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Delete every node from slice, using SFA API.</span>
+<span class="sd">        Wilabt doesn&#39;t allow to remove one sliver so this method </span>
+<span class="sd">        remove every slice from the slice.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s">&quot; Deleting all slivers from slice &quot;</span><span class="p">)</span>
+        <span class="n">slicename</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;slicename&quot;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">sfaapi</span><span class="o">.</span><span class="n">remove_all_from_slice</span><span class="p">(</span><span class="n">slicename</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_get_host</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Get the attribute hostname.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">host</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;host&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">host</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">host</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">return</span> <span class="bp">None</span>
+
+    <span class="k">def</span> <span class="nf">_set_host_attr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Query SFAAPI for the hostname of a certain host hrn and sets the</span>
+<span class="sd">        attribute hostname, it will over write the previous value.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">hosts_hrn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sfaapi</span><span class="o">.</span><span class="n">get_resources_hrn</span><span class="p">()</span>
+        <span class="k">for</span> <span class="n">host</span><span class="p">,</span> <span class="n">hrn</span>  <span class="ow">in</span> <span class="n">hosts_hrn</span><span class="o">.</span><span class="n">iteritems</span><span class="p">():</span>
+            <span class="k">if</span> <span class="n">hrn</span> <span class="o">==</span> <span class="n">node</span><span class="p">:</span>
+                <span class="n">host</span> <span class="o">=</span> <span class="n">host</span> <span class="o">+</span> <span class="s">&#39;.wilab2.ilabt.iminds.be&#39;</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;host&quot;</span><span class="p">,</span> <span class="n">host</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_check_if_in_slice</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">hosts_hrn</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Check using SFA API if any host hrn from hosts_hrn is in the user&#39;s</span>
+<span class="sd">        slice.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">slicename</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;slicename&quot;</span><span class="p">)</span>
+        <span class="n">slice_nodes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sfaapi</span><span class="o">.</span><span class="n">get_slice_resources</span><span class="p">(</span><span class="n">slicename</span><span class="p">)[</span><span class="s">&#39;resource&#39;</span><span class="p">]</span>
+        <span class="k">if</span> <span class="n">slice_nodes</span><span class="p">:</span>
+            <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">slice_nodes</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s">&#39;services&#39;</span><span class="p">])</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
+                <span class="n">slice_nodes_hrn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sfaapi</span><span class="o">.</span><span class="n">get_resources_hrn</span><span class="p">(</span><span class="n">slice_nodes</span><span class="p">)</span><span class="o">.</span><span class="n">values</span><span class="p">()</span>
+        <span class="k">else</span><span class="p">:</span> <span class="n">slice_nodes_hrn</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="n">nodes_inslice</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">hosts_hrn</span><span class="p">)</span> <span class="o">&amp;</span> <span class="nb">set</span><span class="p">(</span><span class="n">slice_nodes_hrn</span><span class="p">))</span>
+        <span class="k">return</span> <span class="n">nodes_inslice</span>
+
+    <span class="k">def</span> <span class="nf">_blacklist_node</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">host_hrn</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Add mal functioning node to blacklist (in SFA API).</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s">&quot; Blacklisting malfunctioning node &quot;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">sfaapi</span><span class="o">.</span><span class="n">blacklist_resource</span><span class="p">(</span><span class="n">host_hrn</span><span class="p">)</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_host</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&#39;host&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&#39;host&#39;</span><span class="p">,</span> <span class="n">host_hrn</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">pop</span><span class="p">())</span>
+
+    <span class="k">def</span> <span class="nf">_put_node_in_provision</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">host_hrn</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Add node to the list of nodes being provisioned, in order for other RMs</span>
+<span class="sd">        to not try to provision the same one again.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">sfaapi</span><span class="o">.</span><span class="n">reserve_resource</span><span class="p">(</span><span class="n">host_hrn</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_get_ip</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">host</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Query cache for the IP of a node with certain hostname</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">ip</span> <span class="o">=</span> <span class="n">sshfuncs</span><span class="o">.</span><span class="n">gethostbyname</span><span class="p">(</span><span class="n">host</span><span class="p">)</span>
+        <span class="k">except</span><span class="p">:</span>
+            <span class="c"># Fail while trying to find the IP</span>
+            <span class="k">return</span> <span class="bp">None</span>
+        <span class="k">return</span> <span class="n">ip</span>
+
+<div class="viewcode-block" id="WilabtSfaNode.fail_discovery"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.wilabt_node.WilabtSfaNode.fail_discovery">[docs]</a>    <span class="k">def</span> <span class="nf">fail_discovery</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Discovery failed. No candidates found for node&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+        <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+</div>
+<div class="viewcode-block" id="WilabtSfaNode.fail_node_not_alive"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.wilabt_node.WilabtSfaNode.fail_node_not_alive">[docs]</a>    <span class="k">def</span> <span class="nf">fail_node_not_alive</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">host</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Node </span><span class="si">%s</span><span class="s"> not alive&quot;</span> <span class="o">%</span> <span class="n">host</span>
+        <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+    </div>
+<div class="viewcode-block" id="WilabtSfaNode.fail_node_not_available"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.wilabt_node.WilabtSfaNode.fail_node_not_available">[docs]</a>    <span class="k">def</span> <span class="nf">fail_node_not_available</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">host</span><span class="p">):</span>
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Some nodes not available for provisioning&quot;</span>
+        <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+</div>
+<div class="viewcode-block" id="WilabtSfaNode.fail_not_enough_nodes"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.wilabt_node.WilabtSfaNode.fail_not_enough_nodes">[docs]</a>    <span class="k">def</span> <span class="nf">fail_not_enough_nodes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Not enough nodes available for provisioning&quot;</span>
+        <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+</div>
+<div class="viewcode-block" id="WilabtSfaNode.fail_sfaapi"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.wilabt_node.WilabtSfaNode.fail_sfaapi">[docs]</a>    <span class="k">def</span> <span class="nf">fail_sfaapi</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Failing while trying to instanciate the SFA API.&quot;</span>
+        <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+</div>
+<div class="viewcode-block" id="WilabtSfaNode.valid_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.wilabt_node.WilabtSfaNode.valid_connection">[docs]</a>    <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="c"># TODO: Validate!</span>
+        <span class="k">return</span> <span class="bp">True</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/planetlab/node.html b/doc/sphinx/_build/html/_modules/nepi/resources/planetlab/node.html
new file mode 100644 (file)
index 0000000..7b86794
--- /dev/null
@@ -0,0 +1,775 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.planetlab.node &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.planetlab.node</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+<span class="c">#         Lucia Guevgeozian &lt;lucia.guevgeozian_odizzio@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span> 
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.node</span> <span class="kn">import</span> <span class="n">LinuxNode</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.planetlab.plcapi</span> <span class="kn">import</span> <span class="n">PLCAPIFactory</span> 
+<span class="kn">from</span> <span class="nn">nepi.util.execfuncs</span> <span class="kn">import</span> <span class="n">lexec</span>
+<span class="kn">from</span> <span class="nn">nepi.util</span> <span class="kn">import</span> <span class="n">sshfuncs</span>
+
+<span class="kn">from</span> <span class="nn">random</span> <span class="kn">import</span> <span class="n">randint</span>
+<span class="kn">import</span> <span class="nn">re</span>
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">time</span>
+<span class="kn">import</span> <span class="nn">socket</span>
+<span class="kn">import</span> <span class="nn">threading</span>
+<span class="kn">import</span> <span class="nn">datetime</span>
+<span class="kn">import</span> <span class="nn">weakref</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="PlanetlabNode"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.node.PlanetlabNode">[docs]</a><span class="k">class</span> <span class="nc">PlanetlabNode</span><span class="p">(</span><span class="n">LinuxNode</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;planetlab::Node&quot;</span>
+    <span class="n">_help</span> <span class="o">=</span> <span class="s">&quot;Controls a PlanetLab host accessible using a SSH key &quot;</span> \
+            <span class="s">&quot;associated to a PlanetLab user account&quot;</span>
+    <span class="n">_platform</span> <span class="o">=</span> <span class="s">&quot;planetlab&quot;</span>
+
+    <span class="n">lock</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Lock</span><span class="p">()</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">ip</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ip&quot;</span><span class="p">,</span> <span class="s">&quot;PlanetLab host public IP address&quot;</span><span class="p">,</span>
+                    <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">pl_url</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;plcApiUrl&quot;</span><span class="p">,</span> <span class="s">&quot;URL of PlanetLab PLCAPI host </span><span class="se">\</span>
+<span class="s">                    (e.g. www.planet-lab.eu or www.planet-lab.org) &quot;</span><span class="p">,</span>
+                    <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;www.planet-lab.eu&quot;</span><span class="p">,</span>
+                    <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Credential</span><span class="p">)</span>
+
+        <span class="n">pl_ptn</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;plcApiPattern&quot;</span><span class="p">,</span> <span class="s">&quot;PLC API service regexp pattern </span><span class="se">\</span>
+<span class="s">                    (e.g. https://</span><span class="si">%(hostname)s</span><span class="s">:443/PLCAPI/ ) &quot;</span><span class="p">,</span>
+                    <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;https://</span><span class="si">%(hostname)s</span><span class="s">:443/PLCAPI/&quot;</span><span class="p">,</span>
+                    <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+    
+        <span class="n">pl_user</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;pluser&quot;</span><span class="p">,</span> <span class="s">&quot;PlanetLab account user, as the one to </span><span class="se">\</span>
+<span class="s">                    authenticate in the website) &quot;</span><span class="p">,</span>
+                    <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Credential</span><span class="p">)</span>
+
+        <span class="n">pl_password</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;plpassword&quot;</span><span class="p">,</span> 
+                        <span class="s">&quot;PlanetLab account password, as </span><span class="se">\</span>
+<span class="s">                        the one to authenticate in the website) &quot;</span><span class="p">,</span>
+                        <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Credential</span><span class="p">)</span>
+
+        <span class="n">city</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;city&quot;</span><span class="p">,</span> <span class="s">&quot;Constrain location (city) during resource </span><span class="se">\</span>
+<span class="s">                discovery. May use wildcards.&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Filter</span><span class="p">)</span>
+
+        <span class="n">country</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;country&quot;</span><span class="p">,</span> <span class="s">&quot;Constrain location (country) during </span><span class="se">\</span>
+<span class="s">                    resource discovery. May use wildcards.&quot;</span><span class="p">,</span>
+                    <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Filter</span><span class="p">)</span>
+
+        <span class="n">region</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;region&quot;</span><span class="p">,</span> <span class="s">&quot;Constrain location (region) during </span><span class="se">\</span>
+<span class="s">                    resource discovery. May use wildcards.&quot;</span><span class="p">,</span>
+                    <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Filter</span><span class="p">)</span>
+
+        <span class="n">architecture</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;architecture&quot;</span><span class="p">,</span> <span class="s">&quot;Constrain architecture </span><span class="se">\</span>
+<span class="s">                        during resource discovery.&quot;</span><span class="p">,</span>
+                        <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Enumerate</span><span class="p">,</span>
+                        <span class="n">allowed</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;x86_64&quot;</span><span class="p">,</span> 
+                                    <span class="s">&quot;i386&quot;</span><span class="p">],</span>
+                        <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Filter</span><span class="p">)</span>
+
+        <span class="n">operating_system</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;operatingSystem&quot;</span><span class="p">,</span> <span class="s">&quot;Constrain operating </span><span class="se">\</span>
+<span class="s">                            system during resource discovery.&quot;</span><span class="p">,</span>
+                            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Enumerate</span><span class="p">,</span>
+                            <span class="n">allowed</span> <span class="o">=</span>  <span class="p">[</span><span class="s">&quot;f8&quot;</span><span class="p">,</span>
+                                        <span class="s">&quot;f12&quot;</span><span class="p">,</span>
+                                        <span class="s">&quot;f14&quot;</span><span class="p">,</span>
+                                        <span class="s">&quot;centos&quot;</span><span class="p">,</span>
+                                        <span class="s">&quot;other&quot;</span><span class="p">],</span>
+                            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Filter</span><span class="p">)</span>
+
+        <span class="n">min_reliability</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;minReliability&quot;</span><span class="p">,</span> <span class="s">&quot;Constrain reliability </span><span class="se">\</span>
+<span class="s">                            while picking PlanetLab nodes. Specifies a lower </span><span class="se">\</span>
+<span class="s">                            acceptable bound.&quot;</span><span class="p">,</span>
+                            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+                            <span class="nb">range</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">100</span><span class="p">),</span>
+                            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Filter</span><span class="p">)</span>
+
+        <span class="n">max_reliability</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;maxReliability&quot;</span><span class="p">,</span> <span class="s">&quot;Constrain reliability </span><span class="se">\</span>
+<span class="s">                            while picking PlanetLab nodes. Specifies an upper </span><span class="se">\</span>
+<span class="s">                            acceptable bound.&quot;</span><span class="p">,</span>
+                            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+                            <span class="nb">range</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">100</span><span class="p">),</span>
+                            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Filter</span><span class="p">)</span>
+
+        <span class="n">min_bandwidth</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;minBandwidth&quot;</span><span class="p">,</span> <span class="s">&quot;Constrain available </span><span class="se">\</span>
+<span class="s">                            bandwidth while picking PlanetLab nodes. </span><span class="se">\</span>
+<span class="s">                            Specifies a lower acceptable bound.&quot;</span><span class="p">,</span>
+                            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+                            <span class="nb">range</span> <span class="o">=</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="o">**</span><span class="mi">31</span><span class="p">),</span>
+                            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Filter</span><span class="p">)</span>
+
+        <span class="n">max_bandwidth</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;maxBandwidth&quot;</span><span class="p">,</span> <span class="s">&quot;Constrain available </span><span class="se">\</span>
+<span class="s">                            bandwidth while picking PlanetLab nodes. </span><span class="se">\</span>
+<span class="s">                            Specifies an upper acceptable bound.&quot;</span><span class="p">,</span>
+                            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+                            <span class="nb">range</span> <span class="o">=</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="o">**</span><span class="mi">31</span><span class="p">),</span>
+                            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Filter</span><span class="p">)</span>
+
+        <span class="n">min_load</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;minLoad&quot;</span><span class="p">,</span> <span class="s">&quot;Constrain node load average while </span><span class="se">\</span>
+<span class="s">                    picking PlanetLab nodes. Specifies a lower acceptable </span><span class="se">\</span>
+<span class="s">                    bound.&quot;</span><span class="p">,</span>
+                    <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+                    <span class="nb">range</span> <span class="o">=</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="o">**</span><span class="mi">31</span><span class="p">),</span>
+                    <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Filter</span><span class="p">)</span>
+
+        <span class="n">max_load</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;maxLoad&quot;</span><span class="p">,</span> <span class="s">&quot;Constrain node load average while </span><span class="se">\</span>
+<span class="s">                    picking PlanetLab nodes. Specifies an upper acceptable </span><span class="se">\</span>
+<span class="s">                    bound.&quot;</span><span class="p">,</span>
+                    <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+                    <span class="nb">range</span> <span class="o">=</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="o">**</span><span class="mi">31</span><span class="p">),</span>
+                    <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Filter</span><span class="p">)</span>
+
+        <span class="n">min_cpu</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;minCpu&quot;</span><span class="p">,</span> <span class="s">&quot;Constrain available cpu time while </span><span class="se">\</span>
+<span class="s">                    picking PlanetLab nodes. Specifies a lower acceptable </span><span class="se">\</span>
+<span class="s">                    bound.&quot;</span><span class="p">,</span>
+                    <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+                    <span class="nb">range</span> <span class="o">=</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">100</span><span class="p">),</span>
+                    <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Filter</span><span class="p">)</span>
+
+        <span class="n">max_cpu</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;maxCpu&quot;</span><span class="p">,</span> <span class="s">&quot;Constrain available cpu time while </span><span class="se">\</span>
+<span class="s">                    picking PlanetLab nodes. Specifies an upper acceptable </span><span class="se">\</span>
+<span class="s">                    bound.&quot;</span><span class="p">,</span>
+                    <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+                    <span class="nb">range</span> <span class="o">=</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">100</span><span class="p">),</span>
+                    <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Filter</span><span class="p">)</span>
+
+        <span class="n">timeframe</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;timeframe&quot;</span><span class="p">,</span> <span class="s">&quot;Past time period in which to check</span><span class="se">\</span>
+<span class="s">                        information about the node. Values are year,month, </span><span class="se">\</span>
+<span class="s">                        week, latest&quot;</span><span class="p">,</span>
+                        <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;week&quot;</span><span class="p">,</span>
+                        <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Enumerate</span><span class="p">,</span>
+                        <span class="n">allowed</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;latest&quot;</span><span class="p">,</span>
+                                    <span class="s">&quot;week&quot;</span><span class="p">,</span>
+                                    <span class="s">&quot;month&quot;</span><span class="p">,</span>
+                                    <span class="s">&quot;year&quot;</span><span class="p">],</span>
+                        <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Filter</span><span class="p">)</span>
+
+        <span class="n">plblacklist</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;persist_blacklist&quot;</span><span class="p">,</span> <span class="s">&quot;Take into account the file plblacklist </span><span class="se">\</span>
+<span class="s">                        in the user&#39;s home directory under .nepi directory. This file </span><span class="se">\</span>
+<span class="s">                        contains a list of PL nodes to blacklist, and at the end </span><span class="se">\</span>
+<span class="s">                        of the experiment execution the new blacklisted nodes are added.&quot;</span><span class="p">,</span>
+                    <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+                    <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+                    <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Global</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ip</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">pl_url</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">pl_ptn</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">pl_user</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">pl_password</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">city</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">country</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">region</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">architecture</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">operating_system</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">min_reliability</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">max_reliability</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">min_bandwidth</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">max_bandwidth</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">min_load</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">max_load</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">min_cpu</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">max_cpu</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">timeframe</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">plblacklist</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">PlanetlabNode</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">_ecobj</span> <span class="o">=</span> <span class="n">weakref</span><span class="o">.</span><span class="n">ref</span><span class="p">(</span><span class="n">ec</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_plapi</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_node_to_provision</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_slicenode</span> <span class="o">=</span> <span class="bp">False</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_hostname</span> <span class="o">=</span> <span class="bp">False</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;gateway&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;gatewayUser&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;gateway&quot;</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;gatewayUser&quot;</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
+
+        <span class="c"># Blacklist file</span>
+        <span class="n">nepi_home</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expanduser</span><span class="p">(</span><span class="s">&quot;~&quot;</span><span class="p">),</span> <span class="s">&quot;.nepi&quot;</span><span class="p">)</span>
+        <span class="n">plblacklist_file</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">nepi_home</span><span class="p">,</span> <span class="s">&quot;plblacklist.txt&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">plblacklist_file</span><span class="p">):</span>
+            <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="n">nepi_home</span><span class="p">):</span>
+                <span class="nb">open</span><span class="p">(</span><span class="n">plblacklist_file</span><span class="p">,</span> <span class="s">&#39;w&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="n">nepi_home</span><span class="p">)</span>
+                <span class="nb">open</span><span class="p">(</span><span class="n">plblacklist_file</span><span class="p">,</span> <span class="s">&#39;w&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+    <span class="k">def</span> <span class="nf">_skip_provision</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">pl_user</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;pluser&quot;</span><span class="p">)</span>
+        <span class="n">pl_pass</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;plpassword&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">pl_user</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">pl_pass</span><span class="p">:</span>
+            <span class="k">return</span> <span class="bp">True</span>
+        <span class="k">else</span><span class="p">:</span> <span class="k">return</span> <span class="bp">False</span>
+    
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="PlanetlabNode.plapi"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.node.PlanetlabNode.plapi">[docs]</a>    <span class="k">def</span> <span class="nf">plapi</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_plapi</span><span class="p">:</span>
+            <span class="n">pl_user</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;pluser&quot;</span><span class="p">)</span>
+            <span class="n">pl_pass</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;plpassword&quot;</span><span class="p">)</span>
+            <span class="n">pl_url</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;plcApiUrl&quot;</span><span class="p">)</span>
+            <span class="n">pl_ptn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;plcApiPattern&quot;</span><span class="p">)</span>
+            <span class="n">_plapi</span> <span class="o">=</span> <span class="n">PLCAPIFactory</span><span class="o">.</span><span class="n">get_api</span><span class="p">(</span><span class="n">pl_user</span><span class="p">,</span> <span class="n">pl_pass</span><span class="p">,</span> <span class="n">pl_url</span><span class="p">,</span>
+                <span class="n">pl_ptn</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ecobj</span><span class="p">())</span>
+            
+            <span class="k">if</span> <span class="ow">not</span> <span class="n">_plapi</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">fail_plapi</span><span class="p">()</span>
+        
+            <span class="bp">self</span><span class="o">.</span><span class="n">_plapi</span> <span class="o">=</span> <span class="n">weakref</span><span class="o">.</span><span class="n">ref</span><span class="p">(</span><span class="n">_plapi</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_plapi</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="PlanetlabNode.do_discover"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.node.PlanetlabNode.do_discover">[docs]</a>    <span class="k">def</span> <span class="nf">do_discover</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Based on the attributes defined by the user, discover the suitable </span>
+<span class="sd">        nodes for provision.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_skip_provision</span><span class="p">():</span>
+            <span class="nb">super</span><span class="p">(</span><span class="n">PlanetlabNode</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+            <span class="k">return</span>
+
+        <span class="n">hostname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_hostname</span><span class="p">()</span>
+        <span class="k">if</span> <span class="n">hostname</span><span class="p">:</span>
+            <span class="c"># the user specified one particular node to be provisioned</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_hostname</span> <span class="o">=</span> <span class="bp">True</span>
+            <span class="n">node_id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_nodes_id</span><span class="p">({</span><span class="s">&#39;hostname&#39;</span><span class="p">:</span><span class="n">hostname</span><span class="p">})</span>
+            <span class="n">node_id</span> <span class="o">=</span> <span class="n">node_id</span><span class="o">.</span><span class="n">pop</span><span class="p">()[</span><span class="s">&#39;node_id&#39;</span><span class="p">]</span>
+
+            <span class="c"># check that the node is not blacklisted or being provisioned</span>
+            <span class="c"># by other RM</span>
+            <span class="k">with</span> <span class="n">PlanetlabNode</span><span class="o">.</span><span class="n">lock</span><span class="p">:</span>
+                <span class="n">plist</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">plapi</span><span class="o">.</span><span class="n">reserved</span><span class="p">()</span>
+                <span class="n">blist</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">plapi</span><span class="o">.</span><span class="n">blacklisted</span><span class="p">()</span>
+                <span class="k">if</span> <span class="n">node_id</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">blist</span> <span class="ow">and</span> <span class="n">node_id</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">plist</span><span class="p">:</span>
+                
+                    <span class="c"># check that is really alive, by performing ping</span>
+                    <span class="n">ping_ok</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_do_ping</span><span class="p">(</span><span class="n">node_id</span><span class="p">)</span>
+                    <span class="k">if</span> <span class="ow">not</span> <span class="n">ping_ok</span><span class="p">:</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">_blacklist_node</span><span class="p">(</span><span class="n">node_id</span><span class="p">)</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">fail_node_not_alive</span><span class="p">(</span><span class="n">hostname</span><span class="p">)</span>
+                    <span class="k">else</span><span class="p">:</span>
+                        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_if_in_slice</span><span class="p">([</span><span class="n">node_id</span><span class="p">]):</span>
+                            <span class="bp">self</span><span class="o">.</span><span class="n">_slicenode</span> <span class="o">=</span> <span class="bp">True</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">_put_node_in_provision</span><span class="p">(</span><span class="n">node_id</span><span class="p">)</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">_node_to_provision</span> <span class="o">=</span> <span class="n">node_id</span>
+                <span class="k">else</span><span class="p">:</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">fail_node_not_available</span><span class="p">(</span><span class="n">hostname</span><span class="p">)</span>
+            <span class="nb">super</span><span class="p">(</span><span class="n">PlanetlabNode</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+        
+        <span class="k">else</span><span class="p">:</span>
+            <span class="c"># the user specifies constraints based on attributes, zero, one or </span>
+            <span class="c"># more nodes can match these constraints </span>
+            <span class="n">nodes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_filter_based_on_attributes</span><span class="p">()</span>
+
+            <span class="c"># nodes that are already part of user&#39;s slice have the priority to</span>
+            <span class="c"># provisioned</span>
+            <span class="n">nodes_inslice</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_if_in_slice</span><span class="p">(</span><span class="n">nodes</span><span class="p">)</span>
+            <span class="n">nodes_not_inslice</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">nodes</span><span class="p">)</span> <span class="o">-</span> <span class="nb">set</span><span class="p">(</span><span class="n">nodes_inslice</span><span class="p">))</span>
+            
+            <span class="n">node_id</span> <span class="o">=</span> <span class="bp">None</span>
+            <span class="k">if</span> <span class="n">nodes_inslice</span><span class="p">:</span>
+                <span class="n">node_id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_choose_random_node</span><span class="p">(</span><span class="n">nodes_inslice</span><span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_slicenode</span> <span class="o">=</span> <span class="bp">True</span>                
+                
+            <span class="k">if</span> <span class="ow">not</span> <span class="n">node_id</span><span class="p">:</span>
+                <span class="c"># Either there were no matching nodes in the user&#39;s slice, or</span>
+                <span class="c"># the nodes in the slice  were blacklisted or being provisioned</span>
+                <span class="c"># by other RM. Note nodes_not_inslice is never empty</span>
+                <span class="n">node_id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_choose_random_node</span><span class="p">(</span><span class="n">nodes_not_inslice</span><span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_slicenode</span> <span class="o">=</span> <span class="bp">False</span>
+
+            <span class="k">if</span> <span class="n">node_id</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_node_to_provision</span> <span class="o">=</span> <span class="n">node_id</span>
+                <span class="k">try</span><span class="p">:</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">_set_hostname_attr</span><span class="p">(</span><span class="n">node_id</span><span class="p">)</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot; Selected node to provision &quot;</span><span class="p">)</span>
+                    <span class="nb">super</span><span class="p">(</span><span class="n">PlanetlabNode</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+                <span class="k">except</span><span class="p">:</span>
+                    <span class="k">with</span> <span class="n">PlanetlabNode</span><span class="o">.</span><span class="n">lock</span><span class="p">:</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">_blacklist_node</span><span class="p">(</span><span class="n">node_id</span><span class="p">)</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+            <span class="k">else</span><span class="p">:</span>
+               <span class="bp">self</span><span class="o">.</span><span class="n">fail_not_enough_nodes</span><span class="p">()</span> 
+            </div>
+<div class="viewcode-block" id="PlanetlabNode.do_provision"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.node.PlanetlabNode.do_provision">[docs]</a>    <span class="k">def</span> <span class="nf">do_provision</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Add node to user&#39;s slice after verifing that the node is functioning</span>
+<span class="sd">        correctly</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_skip_provision</span><span class="p">():</span>
+            <span class="nb">super</span><span class="p">(</span><span class="n">PlanetlabNode</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_provision</span><span class="p">()</span>
+            <span class="k">return</span>
+
+        <span class="n">provision_ok</span> <span class="o">=</span> <span class="bp">False</span>
+        <span class="n">ssh_ok</span> <span class="o">=</span> <span class="bp">False</span>
+        <span class="n">proc_ok</span> <span class="o">=</span> <span class="bp">False</span>
+        <span class="n">timeout</span> <span class="o">=</span> <span class="mi">1800</span>
+
+        <span class="k">while</span> <span class="ow">not</span> <span class="n">provision_ok</span><span class="p">:</span>
+            <span class="n">node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_node_to_provision</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_slicenode</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_add_node_to_slice</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+                <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_if_in_slice</span><span class="p">([</span><span class="n">node</span><span class="p">]):</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span> <span class="s">&quot;Node added to slice&quot;</span> <span class="p">)</span>
+                <span class="k">else</span><span class="p">:</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s">&quot; Could not add to slice &quot;</span><span class="p">)</span>
+                    <span class="k">with</span> <span class="n">PlanetlabNode</span><span class="o">.</span><span class="n">lock</span><span class="p">:</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">_blacklist_node</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+                    <span class="k">continue</span>
+
+                <span class="c"># check ssh connection</span>
+                <span class="n">t</span> <span class="o">=</span> <span class="mi">0</span> 
+                <span class="k">while</span> <span class="n">t</span> <span class="o">&lt;</span> <span class="n">timeout</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">ssh_ok</span><span class="p">:</span>
+
+                    <span class="n">cmd</span> <span class="o">=</span> <span class="s">&#39;echo </span><span class="se">\&#39;</span><span class="s">GOOD NODE</span><span class="se">\&#39;</span><span class="s">&#39;</span>
+                    <span class="p">((</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span><span class="p">)</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">cmd</span><span class="p">)</span>
+                    <span class="k">if</span> <span class="n">out</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&quot;GOOD NODE&quot;</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">:</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span> <span class="s">&quot;No SSH connection, waiting 60s&quot;</span> <span class="p">)</span>
+                        <span class="n">t</span> <span class="o">=</span> <span class="n">t</span> <span class="o">+</span> <span class="mi">60</span>
+                        <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">60</span><span class="p">)</span>
+                        <span class="k">continue</span>
+                    <span class="k">else</span><span class="p">:</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span> <span class="s">&quot;SSH OK&quot;</span> <span class="p">)</span>
+                        <span class="n">ssh_ok</span> <span class="o">=</span> <span class="bp">True</span>
+                        <span class="k">continue</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="n">cmd</span> <span class="o">=</span> <span class="s">&#39;echo </span><span class="se">\&#39;</span><span class="s">GOOD NODE</span><span class="se">\&#39;</span><span class="s">&#39;</span>
+                <span class="p">((</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span><span class="p">)</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">cmd</span><span class="p">)</span>
+                <span class="k">if</span> <span class="ow">not</span> <span class="n">out</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&quot;GOOD NODE&quot;</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">:</span>
+                    <span class="n">ssh_ok</span> <span class="o">=</span> <span class="bp">True</span>
+
+            <span class="k">if</span> <span class="ow">not</span> <span class="n">ssh_ok</span><span class="p">:</span>
+                <span class="c"># the timeout was reach without establishing ssh connection</span>
+                <span class="c"># the node is blacklisted, deleted from the slice, and a new</span>
+                <span class="c"># node to provision is discovered</span>
+                <span class="k">with</span> <span class="n">PlanetlabNode</span><span class="o">.</span><span class="n">lock</span><span class="p">:</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s">&quot; Could not SSH login &quot;</span><span class="p">)</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">_blacklist_node</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+                    <span class="c">#self._delete_node_from_slice(node)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+                <span class="k">continue</span>
+            
+            <span class="c"># check /proc directory is mounted (ssh_ok = True)</span>
+            <span class="c"># and file system is not read only</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="n">cmd</span> <span class="o">=</span> <span class="s">&#39;mount |grep proc&#39;</span>
+                <span class="p">((</span><span class="n">out1</span><span class="p">,</span> <span class="n">err1</span><span class="p">),</span> <span class="n">proc1</span><span class="p">)</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">cmd</span><span class="p">)</span>
+                <span class="n">cmd</span> <span class="o">=</span> <span class="s">&#39;touch /tmp/tmpfile; rm /tmp/tmpfile&#39;</span>
+                <span class="p">((</span><span class="n">out2</span><span class="p">,</span> <span class="n">err2</span><span class="p">),</span> <span class="n">proc2</span><span class="p">)</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">cmd</span><span class="p">)</span>
+                <span class="k">if</span> <span class="n">out1</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&quot;/proc type proc&quot;</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">0</span> <span class="ow">or</span> \
+                    <span class="s">&quot;Read-only file system&quot;</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="n">err2</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span>
+                    <span class="k">with</span> <span class="n">PlanetlabNode</span><span class="o">.</span><span class="n">lock</span><span class="p">:</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s">&quot; Corrupted file system &quot;</span><span class="p">)</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">_blacklist_node</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+                        <span class="c">#self._delete_node_from_slice(node)</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+                    <span class="k">continue</span>
+            
+                <span class="k">else</span><span class="p">:</span>
+                    <span class="n">provision_ok</span> <span class="o">=</span> <span class="bp">True</span>
+                    <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;hostname&#39;</span><span class="p">):</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">_set_hostname_attr</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>            
+                    <span class="c"># set IP attribute</span>
+                    <span class="n">ip</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_ip</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;ip&quot;</span><span class="p">,</span> <span class="n">ip</span><span class="p">)</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot; Node provisioned &quot;</span><span class="p">)</span>            
+            
+        <span class="nb">super</span><span class="p">(</span><span class="n">PlanetlabNode</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_provision</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="PlanetlabNode.do_release"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.node.PlanetlabNode.do_release">[docs]</a>    <span class="k">def</span> <span class="nf">do_release</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">PlanetlabNode</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_release</span><span class="p">()</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_skip_provision</span><span class="p">():</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot; Releasing PLC API &quot;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">plapi</span><span class="o">.</span><span class="n">release</span><span class="p">()</span>
+</div>
+    <span class="k">def</span> <span class="nf">_filter_based_on_attributes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Retrive the list of nodes ids that match user&#39;s constraints </span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="c"># Map user&#39;s defined attributes with tagnames of PlanetLab</span>
+        <span class="n">timeframe</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;timeframe&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+        <span class="n">attr_to_tags</span> <span class="o">=</span> <span class="p">{</span>
+            <span class="s">&#39;city&#39;</span> <span class="p">:</span> <span class="s">&#39;city&#39;</span><span class="p">,</span>
+            <span class="s">&#39;country&#39;</span> <span class="p">:</span> <span class="s">&#39;country&#39;</span><span class="p">,</span>
+            <span class="s">&#39;region&#39;</span> <span class="p">:</span> <span class="s">&#39;region&#39;</span><span class="p">,</span>
+            <span class="s">&#39;architecture&#39;</span> <span class="p">:</span> <span class="s">&#39;arch&#39;</span><span class="p">,</span>
+            <span class="s">&#39;operatingSystem&#39;</span> <span class="p">:</span> <span class="s">&#39;fcdistro&#39;</span><span class="p">,</span>
+            <span class="s">&#39;minReliability&#39;</span> <span class="p">:</span> <span class="s">&#39;reliability</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">timeframe</span><span class="p">,</span>
+            <span class="s">&#39;maxReliability&#39;</span> <span class="p">:</span> <span class="s">&#39;reliability</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">timeframe</span><span class="p">,</span>
+            <span class="s">&#39;minBandwidth&#39;</span> <span class="p">:</span> <span class="s">&#39;bw</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">timeframe</span><span class="p">,</span>
+            <span class="s">&#39;maxBandwidth&#39;</span> <span class="p">:</span> <span class="s">&#39;bw</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">timeframe</span><span class="p">,</span>
+            <span class="s">&#39;minLoad&#39;</span> <span class="p">:</span> <span class="s">&#39;load</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">timeframe</span><span class="p">,</span>
+            <span class="s">&#39;maxLoad&#39;</span> <span class="p">:</span> <span class="s">&#39;load</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">timeframe</span><span class="p">,</span>
+            <span class="s">&#39;minCpu&#39;</span> <span class="p">:</span> <span class="s">&#39;cpu</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">timeframe</span><span class="p">,</span>
+            <span class="s">&#39;maxCpu&#39;</span> <span class="p">:</span> <span class="s">&#39;cpu</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">timeframe</span><span class="p">,</span>
+        <span class="p">}</span>
+        
+        <span class="n">nodes_id</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="n">filters</span> <span class="o">=</span> <span class="p">{}</span>
+
+        <span class="k">for</span> <span class="n">attr_name</span><span class="p">,</span> <span class="n">attr_obj</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attrs</span><span class="o">.</span><span class="n">iteritems</span><span class="p">():</span>
+            <span class="n">attr_value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">attr_name</span><span class="p">)</span>
+            
+            <span class="k">if</span> <span class="n">attr_value</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span> <span class="n">attr_obj</span><span class="o">.</span><span class="n">has_flag</span><span class="p">(</span><span class="n">Flags</span><span class="o">.</span><span class="n">Filter</span><span class="p">)</span> <span class="ow">and</span> \
+                <span class="n">attr_name</span> <span class="o">!=</span> <span class="s">&#39;timeframe&#39;</span><span class="p">:</span>
+        
+                <span class="n">attr_tag</span> <span class="o">=</span> <span class="n">attr_to_tags</span><span class="p">[</span><span class="n">attr_name</span><span class="p">]</span>
+                <span class="n">filters</span><span class="p">[</span><span class="s">&#39;tagname&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">attr_tag</span>
+
+                <span class="c"># filter nodes by fixed constraints e.g. operating system</span>
+                <span class="k">if</span> <span class="ow">not</span> <span class="s">&#39;min&#39;</span> <span class="ow">in</span> <span class="n">attr_name</span> <span class="ow">and</span> <span class="ow">not</span> <span class="s">&#39;max&#39;</span> <span class="ow">in</span> <span class="n">attr_name</span><span class="p">:</span>
+                    <span class="n">filters</span><span class="p">[</span><span class="s">&#39;value&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">attr_value</span>
+                    <span class="n">nodes_id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_filter_by_fixed_attr</span><span class="p">(</span><span class="n">filters</span><span class="p">,</span> <span class="n">nodes_id</span><span class="p">)</span>
+
+                <span class="c"># filter nodes by range constraints e.g. max bandwidth</span>
+                <span class="k">elif</span> <span class="p">(</span><span class="s">&#39;min&#39;</span> <span class="ow">or</span> <span class="s">&#39;max&#39;</span><span class="p">)</span> <span class="ow">in</span> <span class="n">attr_name</span><span class="p">:</span>
+                    <span class="n">nodes_id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_filter_by_range_attr</span><span class="p">(</span><span class="n">attr_name</span><span class="p">,</span> <span class="n">attr_value</span><span class="p">,</span> <span class="n">filters</span><span class="p">,</span> <span class="n">nodes_id</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">filters</span><span class="p">:</span>
+            <span class="n">nodes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_nodes_id</span><span class="p">()</span>
+            <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">nodes</span><span class="p">:</span>
+                <span class="n">nodes_id</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node</span><span class="p">[</span><span class="s">&#39;node_id&#39;</span><span class="p">])</span>
+        <span class="k">return</span> <span class="n">nodes_id</span>
+                    
+    <span class="k">def</span> <span class="nf">_filter_by_fixed_attr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filters</span><span class="p">,</span> <span class="n">nodes_id</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Query PLCAPI for nodes ids matching fixed attributes defined by the</span>
+<span class="sd">        user</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">node_tags</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">plapi</span><span class="o">.</span><span class="n">get_node_tags</span><span class="p">(</span><span class="n">filters</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">node_tags</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
+
+            <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">nodes_id</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+                <span class="c"># first attribute being matched</span>
+                <span class="k">for</span> <span class="n">node_tag</span> <span class="ow">in</span> <span class="n">node_tags</span><span class="p">:</span>
+                    <span class="n">nodes_id</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node_tag</span><span class="p">[</span><span class="s">&#39;node_id&#39;</span><span class="p">])</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="c"># remove the nodes ids that don&#39;t match the new attribute</span>
+                <span class="c"># that is being match</span>
+
+                <span class="n">nodes_id_tmp</span> <span class="o">=</span> <span class="p">[]</span>
+                <span class="k">for</span> <span class="n">node_tag</span> <span class="ow">in</span> <span class="n">node_tags</span><span class="p">:</span>
+                    <span class="k">if</span> <span class="n">node_tag</span><span class="p">[</span><span class="s">&#39;node_id&#39;</span><span class="p">]</span> <span class="ow">in</span> <span class="n">nodes_id</span><span class="p">:</span>
+                        <span class="n">nodes_id_tmp</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node_tag</span><span class="p">[</span><span class="s">&#39;node_id&#39;</span><span class="p">])</span>
+
+                <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">nodes_id_tmp</span><span class="p">):</span>
+                    <span class="n">nodes_id</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">nodes_id</span><span class="p">)</span> <span class="o">&amp;</span> <span class="nb">set</span><span class="p">(</span><span class="n">nodes_id_tmp</span><span class="p">)</span>
+                <span class="k">else</span><span class="p">:</span>
+                    <span class="c"># no node from before match the new constraint</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">fail_discovery</span><span class="p">()</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="c"># no nodes match the filter applied</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">fail_discovery</span><span class="p">()</span>
+
+        <span class="k">return</span> <span class="n">nodes_id</span>
+
+    <span class="k">def</span> <span class="nf">_filter_by_range_attr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">attr_name</span><span class="p">,</span> <span class="n">attr_value</span><span class="p">,</span> <span class="n">filters</span><span class="p">,</span> <span class="n">nodes_id</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Query PLCAPI for nodes ids matching attributes defined in a certain</span>
+<span class="sd">        range, by the user</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">node_tags</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">plapi</span><span class="o">.</span><span class="n">get_node_tags</span><span class="p">(</span><span class="n">filters</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">node_tags</span><span class="p">:</span>
+            
+            <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">nodes_id</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+                <span class="c"># first attribute being matched</span>
+                <span class="k">for</span> <span class="n">node_tag</span> <span class="ow">in</span> <span class="n">node_tags</span><span class="p">:</span>
+                   <span class="c"># check that matches the min or max restriction</span>
+                    <span class="k">if</span> <span class="s">&#39;min&#39;</span> <span class="ow">in</span> <span class="n">attr_name</span> <span class="ow">and</span> <span class="n">node_tag</span><span class="p">[</span><span class="s">&#39;value&#39;</span><span class="p">]</span> <span class="o">!=</span> <span class="s">&#39;n/a&#39;</span> <span class="ow">and</span> \
+                        <span class="nb">float</span><span class="p">(</span><span class="n">node_tag</span><span class="p">[</span><span class="s">&#39;value&#39;</span><span class="p">])</span> <span class="o">&gt;</span> <span class="n">attr_value</span><span class="p">:</span>
+                        <span class="n">nodes_id</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node_tag</span><span class="p">[</span><span class="s">&#39;node_id&#39;</span><span class="p">])</span>
+
+                    <span class="k">elif</span> <span class="s">&#39;max&#39;</span> <span class="ow">in</span> <span class="n">attr_name</span> <span class="ow">and</span> <span class="n">node_tag</span><span class="p">[</span><span class="s">&#39;value&#39;</span><span class="p">]</span> <span class="o">!=</span> <span class="s">&#39;n/a&#39;</span> <span class="ow">and</span> \
+                        <span class="nb">float</span><span class="p">(</span><span class="n">node_tag</span><span class="p">[</span><span class="s">&#39;value&#39;</span><span class="p">])</span> <span class="o">&lt;</span> <span class="n">attr_value</span><span class="p">:</span>
+                        <span class="n">nodes_id</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node_tag</span><span class="p">[</span><span class="s">&#39;node_id&#39;</span><span class="p">])</span>
+            <span class="k">else</span><span class="p">:</span>
+
+                <span class="c"># remove the nodes ids that don&#39;t match the new attribute</span>
+                <span class="c"># that is being match</span>
+                <span class="n">nodes_id_tmp</span> <span class="o">=</span> <span class="p">[]</span>
+                <span class="k">for</span> <span class="n">node_tag</span> <span class="ow">in</span> <span class="n">node_tags</span><span class="p">:</span>
+
+                    <span class="c"># check that matches the min or max restriction and was a</span>
+                    <span class="c"># matching previous filters</span>
+                    <span class="k">if</span> <span class="s">&#39;min&#39;</span> <span class="ow">in</span> <span class="n">attr_name</span> <span class="ow">and</span> <span class="n">node_tag</span><span class="p">[</span><span class="s">&#39;value&#39;</span><span class="p">]</span> <span class="o">!=</span> <span class="s">&#39;n/a&#39;</span> <span class="ow">and</span> \
+                        <span class="nb">float</span><span class="p">(</span><span class="n">node_tag</span><span class="p">[</span><span class="s">&#39;value&#39;</span><span class="p">])</span> <span class="o">&gt;</span> <span class="n">attr_value</span> <span class="ow">and</span> \
+                        <span class="n">node_tag</span><span class="p">[</span><span class="s">&#39;node_id&#39;</span><span class="p">]</span> <span class="ow">in</span> <span class="n">nodes_id</span><span class="p">:</span>
+                        <span class="n">nodes_id_tmp</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node_tag</span><span class="p">[</span><span class="s">&#39;node_id&#39;</span><span class="p">])</span>
+
+                    <span class="k">elif</span> <span class="s">&#39;max&#39;</span> <span class="ow">in</span> <span class="n">attr_name</span> <span class="ow">and</span> <span class="n">node_tag</span><span class="p">[</span><span class="s">&#39;value&#39;</span><span class="p">]</span> <span class="o">!=</span> <span class="s">&#39;n/a&#39;</span> <span class="ow">and</span> \
+                        <span class="nb">float</span><span class="p">(</span><span class="n">node_tag</span><span class="p">[</span><span class="s">&#39;value&#39;</span><span class="p">])</span> <span class="o">&lt;</span> <span class="n">attr_value</span> <span class="ow">and</span> \
+                        <span class="n">node_tag</span><span class="p">[</span><span class="s">&#39;node_id&#39;</span><span class="p">]</span> <span class="ow">in</span> <span class="n">nodes_id</span><span class="p">:</span>
+                        <span class="n">nodes_id_tmp</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node_tag</span><span class="p">[</span><span class="s">&#39;node_id&#39;</span><span class="p">])</span>
+
+                <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">nodes_id_tmp</span><span class="p">):</span>
+                    <span class="n">nodes_id</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">nodes_id</span><span class="p">)</span> <span class="o">&amp;</span> <span class="nb">set</span><span class="p">(</span><span class="n">nodes_id_tmp</span><span class="p">)</span>
+                <span class="k">else</span><span class="p">:</span>
+                    <span class="c"># no node from before match the new constraint</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">fail_discovery</span><span class="p">()</span>
+
+        <span class="k">else</span><span class="p">:</span> <span class="c">#TODO CHECK</span>
+            <span class="c"># no nodes match the filter applied</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">fail_discovery</span><span class="p">()</span>
+
+        <span class="k">return</span> <span class="n">nodes_id</span>
+        
+    <span class="k">def</span> <span class="nf">_choose_random_node</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nodes</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        From the possible nodes for provision, choose randomly to decrese the</span>
+<span class="sd">        probability of different RMs choosing the same node for provision</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">nodes</span><span class="p">)</span>
+        <span class="k">while</span> <span class="n">size</span><span class="p">:</span>
+            <span class="n">size</span> <span class="o">=</span> <span class="n">size</span> <span class="o">-</span> <span class="mi">1</span>
+            <span class="n">index</span> <span class="o">=</span> <span class="n">randint</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span>
+            <span class="n">node_id</span> <span class="o">=</span> <span class="n">nodes</span><span class="p">[</span><span class="n">index</span><span class="p">]</span>
+            <span class="n">nodes</span><span class="p">[</span><span class="n">index</span><span class="p">]</span> <span class="o">=</span> <span class="n">nodes</span><span class="p">[</span><span class="n">size</span><span class="p">]</span>
+
+            <span class="c"># check the node is not blacklisted or being provision by other RM</span>
+            <span class="c"># and perform ping to check that is really alive</span>
+            <span class="k">with</span> <span class="n">PlanetlabNode</span><span class="o">.</span><span class="n">lock</span><span class="p">:</span>
+
+                <span class="n">blist</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">plapi</span><span class="o">.</span><span class="n">blacklisted</span><span class="p">()</span>
+                <span class="n">plist</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">plapi</span><span class="o">.</span><span class="n">reserved</span><span class="p">()</span>
+                <span class="k">if</span> <span class="n">node_id</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">blist</span> <span class="ow">and</span> <span class="n">node_id</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">plist</span><span class="p">:</span>
+                    <span class="n">ping_ok</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_do_ping</span><span class="p">(</span><span class="n">node_id</span><span class="p">)</span>
+                    <span class="k">if</span> <span class="ow">not</span> <span class="n">ping_ok</span><span class="p">:</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">_set_hostname_attr</span><span class="p">(</span><span class="n">node_id</span><span class="p">)</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s">&quot; Node not responding PING &quot;</span><span class="p">)</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">_blacklist_node</span><span class="p">(</span><span class="n">node_id</span><span class="p">)</span>
+                    <span class="k">else</span><span class="p">:</span>
+                        <span class="c"># discovered node for provision, added to provision list</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">_put_node_in_provision</span><span class="p">(</span><span class="n">node_id</span><span class="p">)</span>
+                        <span class="k">return</span> <span class="n">node_id</span>
+
+    <span class="k">def</span> <span class="nf">_get_nodes_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filters</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">plapi</span><span class="o">.</span><span class="n">get_nodes</span><span class="p">(</span><span class="n">filters</span><span class="p">,</span> <span class="n">fields</span><span class="o">=</span><span class="p">[</span><span class="s">&#39;node_id&#39;</span><span class="p">])</span>
+
+    <span class="k">def</span> <span class="nf">_add_node_to_slice</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node_id</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot; Adding node to slice &quot;</span><span class="p">)</span>
+        <span class="n">slicename</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;username&quot;</span><span class="p">)</span>
+        <span class="k">with</span> <span class="n">PlanetlabNode</span><span class="o">.</span><span class="n">lock</span><span class="p">:</span>
+            <span class="n">slice_nodes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">plapi</span><span class="o">.</span><span class="n">get_slice_nodes</span><span class="p">(</span><span class="n">slicename</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot; Previous slice nodes </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="n">slice_nodes</span><span class="p">)</span>
+            <span class="n">slice_nodes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node_id</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">plapi</span><span class="o">.</span><span class="n">add_slice_nodes</span><span class="p">(</span><span class="n">slicename</span><span class="p">,</span> <span class="n">slice_nodes</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_delete_node_from_slice</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s">&quot; Deleting node from slice &quot;</span><span class="p">)</span>
+        <span class="n">slicename</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;username&quot;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">plapi</span><span class="o">.</span><span class="n">delete_slice_node</span><span class="p">(</span><span class="n">slicename</span><span class="p">,</span> <span class="p">[</span><span class="n">node</span><span class="p">])</span>
+
+    <span class="k">def</span> <span class="nf">_get_hostname</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">hostname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;hostname&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">hostname</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">hostname</span>
+        <span class="n">ip</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ip&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">ip</span><span class="p">:</span>
+            <span class="n">hostname</span> <span class="o">=</span> <span class="n">socket</span><span class="o">.</span><span class="n">gethostbyaddr</span><span class="p">(</span><span class="n">ip</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&#39;hostname&#39;</span><span class="p">,</span> <span class="n">hostname</span><span class="p">)</span>
+            <span class="k">return</span> <span class="n">hostname</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">return</span> <span class="bp">None</span>
+
+    <span class="k">def</span> <span class="nf">_set_hostname_attr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Query PLCAPI for the hostname of a certain node id and sets the</span>
+<span class="sd">        attribute hostname, it will over write the previous value</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">hostname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">plapi</span><span class="o">.</span><span class="n">get_nodes</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="p">[</span><span class="s">&#39;hostname&#39;</span><span class="p">])</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;hostname&quot;</span><span class="p">,</span> <span class="n">hostname</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s">&#39;hostname&#39;</span><span class="p">])</span>
+
+    <span class="k">def</span> <span class="nf">_check_if_in_slice</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nodes_id</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Query PLCAPI to find out if any node id from nodes_id is in the user&#39;s</span>
+<span class="sd">        slice</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">slicename</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;username&quot;</span><span class="p">)</span>
+        <span class="n">slice_nodes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">plapi</span><span class="o">.</span><span class="n">get_slice_nodes</span><span class="p">(</span><span class="n">slicename</span><span class="p">)</span>
+        <span class="n">nodes_inslice</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">nodes_id</span><span class="p">)</span> <span class="o">&amp;</span> <span class="nb">set</span><span class="p">(</span><span class="n">slice_nodes</span><span class="p">))</span>
+        <span class="k">return</span> <span class="n">nodes_inslice</span>
+
+    <span class="k">def</span> <span class="nf">_do_ping</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node_id</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Perform ping command on node&#39;s IP matching node id</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">ping_ok</span> <span class="o">=</span> <span class="bp">False</span>
+        <span class="n">ip</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_ip</span><span class="p">(</span><span class="n">node_id</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">ip</span><span class="p">:</span>
+            <span class="n">command</span> <span class="o">=</span> <span class="s">&quot;ping -c4 </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">ip</span>
+            <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span> <span class="o">=</span> <span class="n">lexec</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+
+            <span class="n">m</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="s">&quot;(\d+)% packet loss&quot;</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">out</span><span class="p">))</span>
+            <span class="k">if</span> <span class="n">m</span> <span class="ow">and</span> <span class="nb">int</span><span class="p">(</span><span class="n">m</span><span class="o">.</span><span class="n">groups</span><span class="p">()[</span><span class="mi">0</span><span class="p">])</span> <span class="o">&lt;</span> <span class="mi">50</span><span class="p">:</span>
+                <span class="n">ping_ok</span> <span class="o">=</span> <span class="bp">True</span>
+       
+        <span class="k">return</span> <span class="n">ping_ok</span> 
+
+    <span class="k">def</span> <span class="nf">_blacklist_node</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Add node mal functioning node to blacklist</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s">&quot; Blacklisting malfunctioning node &quot;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">plapi</span><span class="o">.</span><span class="n">blacklist_host</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_hostname</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&#39;hostname&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_put_node_in_provision</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Add node to the list of nodes being provisioned, in order for other RMs</span>
+<span class="sd">        to not try to provision the same one again</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">plapi</span><span class="o">.</span><span class="n">reserve_host</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_get_ip</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node_id</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Query PLCAPI for the IP of a node with certain node id</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">hostname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;hostname&quot;</span><span class="p">)</span> <span class="ow">or</span> \
+            <span class="bp">self</span><span class="o">.</span><span class="n">plapi</span><span class="o">.</span><span class="n">get_nodes</span><span class="p">(</span><span class="n">node_id</span><span class="p">,</span> <span class="p">[</span><span class="s">&#39;hostname&#39;</span><span class="p">])[</span><span class="mi">0</span><span class="p">][</span><span class="s">&#39;hostname&#39;</span><span class="p">]</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">ip</span> <span class="o">=</span> <span class="n">sshfuncs</span><span class="o">.</span><span class="n">gethostbyname</span><span class="p">(</span><span class="n">hostname</span><span class="p">)</span>
+        <span class="k">except</span><span class="p">:</span>
+            <span class="c"># Fail while trying to find the IP</span>
+            <span class="k">return</span> <span class="bp">None</span>
+        <span class="k">return</span> <span class="n">ip</span>
+
+<div class="viewcode-block" id="PlanetlabNode.fail_discovery"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.node.PlanetlabNode.fail_discovery">[docs]</a>    <span class="k">def</span> <span class="nf">fail_discovery</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Discovery failed. No candidates found for node&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+        <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+</div>
+<div class="viewcode-block" id="PlanetlabNode.fail_node_not_alive"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.node.PlanetlabNode.fail_node_not_alive">[docs]</a>    <span class="k">def</span> <span class="nf">fail_node_not_alive</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">hostname</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Node </span><span class="si">%s</span><span class="s"> not alive&quot;</span> <span class="o">%</span> <span class="n">hostname</span>
+        <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+    </div>
+<div class="viewcode-block" id="PlanetlabNode.fail_node_not_available"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.node.PlanetlabNode.fail_node_not_available">[docs]</a>    <span class="k">def</span> <span class="nf">fail_node_not_available</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">hostname</span><span class="p">):</span>
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Node </span><span class="si">%s</span><span class="s"> not available for provisioning&quot;</span> <span class="o">%</span> <span class="n">hostname</span>
+        <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+</div>
+<div class="viewcode-block" id="PlanetlabNode.fail_not_enough_nodes"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.node.PlanetlabNode.fail_not_enough_nodes">[docs]</a>    <span class="k">def</span> <span class="nf">fail_not_enough_nodes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Not enough nodes available for provisioning&quot;</span>
+        <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+</div>
+<div class="viewcode-block" id="PlanetlabNode.fail_plapi"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.node.PlanetlabNode.fail_plapi">[docs]</a>    <span class="k">def</span> <span class="nf">fail_plapi</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Failing while trying to instanciate the PLC API.</span><span class="se">\n</span><span class="s">Set the&quot;</span> <span class="o">+</span> \
+            <span class="s">&quot; attributes pluser and plpassword.&quot;</span>
+        <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+</div>
+<div class="viewcode-block" id="PlanetlabNode.valid_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.node.PlanetlabNode.valid_connection">[docs]</a>    <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="c"># TODO: Validate!</span>
+        <span class="k">return</span> <span class="bp">True</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/planetlab/ns3/fdudptunnel.html b/doc/sphinx/_build/html/_modules/nepi/resources/planetlab/ns3/fdudptunnel.html
new file mode 100644 (file)
index 0000000..a0543e3
--- /dev/null
@@ -0,0 +1,164 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.planetlab.ns3.fdudptunnel &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.planetlab.ns3.fdudptunnel</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span><span class="p">,</span> <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.ns3.fdudptunnel</span> <span class="kn">import</span> <span class="n">LinuxNs3FdUdpTunnel</span>
+<span class="kn">from</span> <span class="nn">nepi.util.sshfuncs</span> <span class="kn">import</span> <span class="n">ProcStatus</span>
+<span class="kn">from</span> <span class="nn">nepi.util.timefuncs</span> <span class="kn">import</span> <span class="n">tnow</span><span class="p">,</span> <span class="n">tdiffsec</span>
+
+<span class="kn">import</span> <span class="nn">base64</span>
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">socket</span>
+<span class="kn">import</span> <span class="nn">time</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="PlanetlabNs3FdUdpTunnel"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.planetlab.ns3.html#nepi.resources.planetlab.ns3.fdudptunnel.PlanetlabNs3FdUdpTunnel">[docs]</a><span class="k">class</span> <span class="nc">PlanetlabNs3FdUdpTunnel</span><span class="p">(</span><span class="n">LinuxNs3FdUdpTunnel</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;planetlab::ns3::FdUdpTunnel&quot;</span>
+    <span class="n">_help</span> <span class="o">=</span> <span class="s">&quot;Constructs a tunnel between two Ns-3 FdNetdevices &quot;</span> \
+            <span class="s">&quot;located in remote PlanetLab nodes using a UDP connection &quot;</span>
+    <span class="n">_platform</span> <span class="o">=</span> <span class="s">&quot;planetlab::ns3&quot;</span>
+
+<div class="viewcode-block" id="PlanetlabNs3FdUdpTunnel.get_endpoints"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.planetlab.ns3.html#nepi.resources.planetlab.ns3.fdudptunnel.PlanetlabNs3FdUdpTunnel.get_endpoints">[docs]</a>    <span class="k">def</span> <span class="nf">get_endpoints</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the list of RM that are endpoints to the tunnel </span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fd2</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fd1</span><span class="p">:</span>
+            <span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3fdnetdevice</span> <span class="kn">import</span> <span class="n">NS3BaseFdNetDevice</span>
+            <span class="n">devices</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">NS3BaseFdNetDevice</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="n">devices</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">devices</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">2</span><span class="p">:</span> 
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Tunnel must be connected to exactly two FdNetDevices&quot;</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">_fd1</span> <span class="o">=</span> <span class="n">devices</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_fd2</span> <span class="o">=</span> <span class="n">devices</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_pi</span> <span class="o">=</span> <span class="bp">True</span>
+            <span class="c"># Set PI headers on</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_fd1</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;EncapsulationMode&quot;</span><span class="p">,</span> <span class="s">&quot;DixPi&quot;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_fd2</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;EncapsulationMode&quot;</span><span class="p">,</span> <span class="s">&quot;DixPi&quot;</span><span class="p">)</span>
+        
+            <span class="n">simu</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fd1</span><span class="o">.</span><span class="n">simulation</span>
+            <span class="kn">from</span> <span class="nn">nepi.resources.linux.node</span> <span class="kn">import</span> <span class="n">LinuxNode</span>
+            <span class="n">nodes</span> <span class="o">=</span> <span class="n">simu</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">LinuxNode</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_fd1node</span> <span class="o">=</span> <span class="n">nodes</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+     
+            <span class="n">simu</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fd2</span><span class="o">.</span><span class="n">simulation</span>
+            <span class="kn">from</span> <span class="nn">nepi.resources.linux.node</span> <span class="kn">import</span> <span class="n">LinuxNode</span>
+            <span class="n">nodes</span> <span class="o">=</span> <span class="n">simu</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">LinuxNode</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_fd2node</span> <span class="o">=</span> <span class="n">nodes</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fd1node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;hostname&quot;</span><span class="p">)</span> <span class="o">==</span> \
+                    <span class="bp">self</span><span class="o">.</span><span class="n">_fd2node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;hostname&quot;</span><span class="p">):</span>
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Tunnel requires endpoints on different hosts&quot;</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">return</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_fd1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fd2</span><span class="p">]</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/planetlab/ns3/tuntapfdlink.html b/doc/sphinx/_build/html/_modules/nepi/resources/planetlab/ns3/tuntapfdlink.html
new file mode 100644 (file)
index 0000000..ffbc91c
--- /dev/null
@@ -0,0 +1,183 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.planetlab.ns3.tuntapfdlink &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.planetlab.ns3.tuntapfdlink</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2014 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceState</span><span class="p">,</span> <span class="n">clsinit_copy</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.ns3.tuntapfdlink</span> <span class="kn">import</span> <span class="n">LinuxTunTapFdLink</span>
+
+<span class="kn">import</span> <span class="nn">base64</span>
+<span class="kn">import</span> <span class="nn">fcntl</span>
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">socket</span>
+<span class="kn">import</span> <span class="nn">struct</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="PlanetlabTunTapFdLink"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.planetlab.ns3.html#nepi.resources.planetlab.ns3.tuntapfdlink.PlanetlabTunTapFdLink">[docs]</a><span class="k">class</span> <span class="nc">PlanetlabTunTapFdLink</span><span class="p">(</span><span class="n">LinuxTunTapFdLink</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot; Interconnects a TAP or TUN PlanetLab device to a FdNetDevice</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;planetlab::ns3::TunTapFdLink&quot;</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">PlanetlabTunTapFdLink</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="PlanetlabTunTapFdLink.fdnetdevice"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.planetlab.ns3.html#nepi.resources.planetlab.ns3.tuntapfdlink.PlanetlabTunTapFdLink.fdnetdevice">[docs]</a>    <span class="k">def</span> <span class="nf">fdnetdevice</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fdnetdevice</span><span class="p">:</span>
+            <span class="kn">from</span> <span class="nn">nepi.resources.ns3.ns3fdnetdevice</span> <span class="kn">import</span> <span class="n">NS3BaseFdNetDevice</span>
+            <span class="n">devices</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">NS3BaseFdNetDevice</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="n">devices</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">devices</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">:</span> 
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;planetlab::ns3::TunTapFdLink must be connected to exactly one FdNetDevice&quot;</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">_fdnetdevice</span> <span class="o">=</span> <span class="n">devices</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+
+            <span class="c"># Set PI headers on</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_fdnetdevice</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;EncapsulationMode&quot;</span><span class="p">,</span> <span class="s">&quot;DixPi&quot;</span><span class="p">)</span>
+        
+            <span class="n">simu</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fdnetdevice</span><span class="o">.</span><span class="n">simulation</span>
+            <span class="kn">from</span> <span class="nn">nepi.resources.planetlab.node</span> <span class="kn">import</span> <span class="n">PlanetlabNode</span>
+            <span class="n">nodes</span> <span class="o">=</span> <span class="n">simu</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">PlanetlabNode</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_fd_node</span> <span class="o">=</span> <span class="n">nodes</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+        
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fdnetdevice</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="PlanetlabTunTapFdLink.tap"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.planetlab.ns3.html#nepi.resources.planetlab.ns3.tuntapfdlink.PlanetlabTunTapFdLink.tap">[docs]</a>    <span class="k">def</span> <span class="nf">tap</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tap</span><span class="p">:</span>
+            <span class="kn">from</span> <span class="nn">nepi.resources.planetlab.tap</span> <span class="kn">import</span> <span class="n">PlanetlabTap</span>
+            <span class="n">devices</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">PlanetlabTap</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+
+            <span class="k">if</span> <span class="ow">not</span> <span class="n">devices</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">devices</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">:</span> 
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;planetlab::ns3::TunTapFdLink must be connected to exactly one PlanetlabTap&quot;</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">_tap</span> <span class="o">=</span> <span class="n">devices</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+        
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tap</span>
+</div>
+<div class="viewcode-block" id="PlanetlabTunTapFdLink.upload_sources"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.planetlab.ns3.html#nepi.resources.planetlab.ns3.tuntapfdlink.PlanetlabTunTapFdLink.upload_sources">[docs]</a>    <span class="k">def</span> <span class="nf">upload_sources</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">scripts</span> <span class="o">=</span> <span class="p">[]</span>
+
+        <span class="c"># vif-passfd python script</span>
+        <span class="n">pl_vif_passfd</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">__file__</span><span class="p">),</span> 
+                <span class="s">&quot;..&quot;</span><span class="p">,</span> <span class="s">&quot;..&quot;</span><span class="p">,</span>
+                <span class="s">&quot;linux&quot;</span><span class="p">,</span>
+                <span class="s">&quot;scripts&quot;</span><span class="p">,</span>
+                <span class="s">&quot;linux-tap-passfd.py&quot;</span><span class="p">)</span>
+
+        <span class="n">scripts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">pl_vif_passfd</span><span class="p">)</span>
+        
+        <span class="c"># Upload scripts</span>
+        <span class="n">scripts</span> <span class="o">=</span> <span class="s">&quot;;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">scripts</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">upload</span><span class="p">(</span><span class="n">scripts</span><span class="p">,</span>
+                <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">src_dir</span><span class="p">),</span>
+                <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">False</span><span class="p">)</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/planetlab/openvswitch/ovs.html b/doc/sphinx/_build/html/_modules/nepi/resources/planetlab/openvswitch/ovs.html
new file mode 100644 (file)
index 0000000..a119860
--- /dev/null
@@ -0,0 +1,406 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.planetlab.openvswitch.ovs &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.planetlab.openvswitch.ovs</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Authors: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+<span class="c">#         Alexandros Kouvakas &lt;alexandros.kouvakas@inria.fr&gt;</span>
+<span class="c">#         Julien Tribino &lt;julien.tribino@inria.fr&gt;</span>
+
+
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.planetlab.node</span> <span class="kn">import</span> <span class="n">PlanetlabNode</span>        
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.application</span> <span class="kn">import</span> <span class="n">LinuxApplication</span>
+<span class="kn">import</span> <span class="nn">os</span>
+
+<span class="nd">@clsinit_copy</span>                    
+<div class="viewcode-block" id="PlanetlabOVSSwitch"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch">[docs]</a><span class="k">class</span> <span class="nc">PlanetlabOVSSwitch</span><span class="p">(</span><span class="n">LinuxApplication</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    .. class:: Class Args :</span>
+<span class="sd">      </span>
+<span class="sd">        :param ec: The Experiment controller</span>
+<span class="sd">        :type ec: ExperimentController</span>
+<span class="sd">        :param guid: guid of the RM</span>
+<span class="sd">        :type guid: int</span>
+
+<span class="sd">    &quot;&quot;&quot;</span>
+
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;planetlab::OVSSwitch&quot;</span>
+    <span class="n">_help</span> <span class="o">=</span> <span class="s">&quot;Runs an OpenVSwitch on a PlanetLab host&quot;</span>
+    <span class="n">_platform</span> <span class="o">=</span> <span class="s">&quot;planetlab&quot;</span>
+
+    <span class="n">_authorized_connections</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;planetlab::Node&quot;</span><span class="p">,</span> <span class="s">&quot;planetla::OVSPort&quot;</span><span class="p">,</span> <span class="s">&quot;linux::Node&quot;</span><span class="p">]</span>       
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Register the attributes of OVSSwitch RM </span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">bridge_name</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;bridge_name&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;Name of the switch/bridge&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>        
+        <span class="n">virtual_ip_pref</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;virtual_ip_pref&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;Virtual IP/PREFIX of the switch&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>        
+        <span class="n">controller_ip</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;controller_ip&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;IP of the controller&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>        
+        <span class="n">controller_port</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;controller_port&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;Port of the controller&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>        
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">bridge_name</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">virtual_ip_pref</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">controller_ip</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">controller_port</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        :param ec: The Experiment controller</span>
+<span class="sd">        :type ec: ExperimentController</span>
+<span class="sd">        :param guid: guid of the RM</span>
+<span class="sd">        :type guid: int</span>
+<span class="sd">    </span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">PlanetlabOVSSwitch</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ovsswitch-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_node</span> <span class="o">=</span> <span class="bp">None</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="PlanetlabOVSSwitch.node"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch.node">[docs]</a>    <span class="k">def</span> <span class="nf">node</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Node wthat run the switch</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_node</span><span class="p">:</span>
+            <span class="n">nodes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">PlanetlabNode</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="n">nodes</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">nodes</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">:</span> 
+                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;PlanetlabOVSSwitch must be connected to exactly one PlanetlabNode&quot;</span>
+                <span class="c">#self.error(msg)</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">_node</span> <span class="o">=</span> <span class="n">nodes</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_node</span>
+</div>
+<div class="viewcode-block" id="PlanetlabOVSSwitch.valid_connection"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch.valid_connection">[docs]</a>    <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Check if the connection with the guid in parameter is possible. Only meaningful connections are allowed.</span>
+
+<span class="sd">        :param guid: Guid of the current RM</span>
+<span class="sd">        :type guid: int</span>
+<span class="sd">        :rtype:  Boolean</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">rm</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">()</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_authorized_connections</span><span class="p">:</span>
+            <span class="k">return</span> <span class="bp">False</span>
+        <span class="k">return</span> <span class="bp">True</span>
+</div>
+<div class="viewcode-block" id="PlanetlabOVSSwitch.do_provision"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch.do_provision">[docs]</a>    <span class="k">def</span> <span class="nf">do_provision</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">check_sliver_ovs</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">servers_on</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">create_bridge</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">assign_controller</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">ovs_status</span><span class="p">()</span>
+        
+        <span class="bp">self</span><span class="o">.</span><span class="n">set_provisioned</span><span class="p">()</span>
+                               </div>
+<div class="viewcode-block" id="PlanetlabOVSSwitch.do_deploy"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch.do_deploy">[docs]</a>    <span class="k">def</span> <span class="nf">do_deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Deploy the OVS Switch : Turn on the server, create the bridges</span>
+<span class="sd">            and assign the controller</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;---- RESCHEDULING DEPLOY ---- node state </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">state</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">deploy</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_provision</span><span class="p">()</span>
+               
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_ready</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="PlanetlabOVSSwitch.check_sliver_ovs"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch.check_sliver_ovs">[docs]</a>    <span class="k">def</span> <span class="nf">check_sliver_ovs</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>  
+        <span class="sd">&quot;&quot;&quot; Check if sliver-ovs exists. If it does not exist, the execution is stopped</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot;compgen -c | grep sliver-ovs&quot;</span>                        
+        <span class="n">shfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">,</span> <span class="s">&quot;check_ovs_cmd.sh&quot;</span><span class="p">)</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">run_and_wait</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">,</span>
+                    <span class="n">shfile</span><span class="o">=</span><span class="n">shfile</span><span class="p">,</span>
+                    <span class="n">sudo</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span> 
+                    <span class="n">pidfile</span><span class="o">=</span><span class="s">&quot;check_ovs_cmd_pidfile&quot;</span><span class="p">,</span>
+                    <span class="n">ecodefile</span><span class="o">=</span><span class="s">&quot;check_ovs_cmd_exitcode&quot;</span><span class="p">,</span> 
+                    <span class="n">stdout</span><span class="o">=</span><span class="s">&quot;check_ovs_cmd_stdout&quot;</span><span class="p">,</span> 
+                    <span class="n">stderr</span><span class="o">=</span><span class="s">&quot;check_ovs_cmd_stderr&quot;</span><span class="p">)</span>
+        <span class="k">except</span> <span class="ne">RuntimeError</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Command sliver-ovs does not exist on the VM&quot;</span>          
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+</div>
+<div class="viewcode-block" id="PlanetlabOVSSwitch.servers_on"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch.servers_on">[docs]</a>    <span class="k">def</span> <span class="nf">servers_on</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Start the openvswitch servers and check it</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="c"># Make sure the server is not running        </span>
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot;sliver-ovs del-bridge </span><span class="si">%s</span><span class="s">; sliver-ovs stop&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;bridge_name&#39;</span><span class="p">)</span>
+        <span class="n">shfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">,</span> <span class="s">&quot;clean.sh&quot;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">run_and_wait</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">,</span>
+                <span class="n">shfile</span><span class="o">=</span><span class="n">shfile</span><span class="p">,</span>
+                <span class="n">sudo</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span>
+                <span class="n">raise_on_error</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span>
+                <span class="n">pidfile</span><span class="o">=</span><span class="s">&quot;clean_pidfile&quot;</span><span class="p">,</span>
+                <span class="n">ecodefile</span><span class="o">=</span><span class="s">&quot;clean_exitcode&quot;</span><span class="p">,</span> 
+                <span class="n">stdout</span><span class="o">=</span><span class="s">&quot;clean_stdout&quot;</span><span class="p">,</span> 
+                <span class="n">stderr</span><span class="o">=</span><span class="s">&quot;clean_stderr&quot;</span><span class="p">)</span>
+
+        <span class="c"># start the server        </span>
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot;sliver-ovs start&quot;</span>            
+        <span class="n">shfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">,</span> <span class="s">&quot;start.sh&quot;</span><span class="p">)</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">run_and_wait</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">,</span>
+                    <span class="n">shfile</span><span class="o">=</span><span class="n">shfile</span><span class="p">,</span>
+                    <span class="n">sudo</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> 
+                    <span class="n">pidfile</span><span class="o">=</span><span class="s">&quot;start_pidfile&quot;</span><span class="p">,</span>
+                    <span class="n">ecodefile</span><span class="o">=</span><span class="s">&quot;start_exitcode&quot;</span><span class="p">,</span> 
+                    <span class="n">stdout</span><span class="o">=</span><span class="s">&quot;start_stdout&quot;</span><span class="p">,</span> 
+                    <span class="n">stderr</span><span class="o">=</span><span class="s">&quot;start_stderr&quot;</span><span class="p">)</span>
+        <span class="k">except</span> <span class="ne">RuntimeError</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Failed to start ovs-server on VM&quot;</span>             
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot;ps -A | grep ovsdb-server&quot;</span>
+        <span class="n">shfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">,</span> <span class="s">&quot;ovsdb_status.sh&quot;</span><span class="p">)</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">run_and_wait</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">,</span>
+                    <span class="n">shfile</span><span class="o">=</span><span class="n">shfile</span><span class="p">,</span>
+                    <span class="n">sudo</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> 
+                    <span class="n">pidfile</span><span class="o">=</span><span class="s">&quot;ovsdb_status_pidfile&quot;</span><span class="p">,</span>
+                    <span class="n">ecodefile</span><span class="o">=</span><span class="s">&quot;ovsdb_status_exitcode&quot;</span><span class="p">,</span> 
+                    <span class="n">stdout</span><span class="o">=</span><span class="s">&quot;ovsdb_status_stdout&quot;</span><span class="p">,</span> 
+                    <span class="n">stderr</span><span class="o">=</span><span class="s">&quot;ovsdb_status_stderr&quot;</span><span class="p">)</span>
+        <span class="k">except</span> <span class="ne">RuntimeError</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;ovsdb-server not running on VM&quot;</span>       
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+        
+        <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Server OVS Started...&quot;</span><span class="p">)</span>  
+</div>
+<div class="viewcode-block" id="PlanetlabOVSSwitch.create_bridge"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch.create_bridge">[docs]</a>    <span class="k">def</span> <span class="nf">create_bridge</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Create the bridge/switch and check error during SSH connection</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="c"># TODO: Check if previous bridge exist and delete them. Use ovs-vsctl list-br</span>
+        <span class="c"># TODO: Add check for virtual_ip belonging to vsys_tag</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;bridge_name&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;virtual_ip_pref&quot;</span><span class="p">)):</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;No assignment in one or both attributes&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot;sliver-ovs create-bridge &#39;</span><span class="si">%s</span><span class="s">&#39; &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="p">(</span>
+                          <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;bridge_name&quot;</span><span class="p">),</span> 
+                          <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;virtual_ip_pref&quot;</span><span class="p">))</span> 
+        
+        <span class="n">shfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">,</span> <span class="s">&quot;bridge_create.sh&quot;</span><span class="p">)</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">run_and_wait</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">,</span>
+                    <span class="n">shfile</span><span class="o">=</span><span class="n">shfile</span><span class="p">,</span>
+                    <span class="n">sudo</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> 
+                    <span class="n">pidfile</span><span class="o">=</span><span class="s">&quot;bridge_create_pidfile&quot;</span><span class="p">,</span>
+                    <span class="n">ecodefile</span><span class="o">=</span><span class="s">&quot;bridge_create_exitcode&quot;</span><span class="p">,</span> 
+                    <span class="n">stdout</span><span class="o">=</span><span class="s">&quot;bridge_create_stdout&quot;</span><span class="p">,</span> 
+                    <span class="n">stderr</span><span class="o">=</span><span class="s">&quot;bridge_create_stderr&quot;</span><span class="p">)</span>
+        <span class="k">except</span> <span class="ne">RuntimeError</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;No such pltap netdev</span><span class="se">\n</span><span class="s">ovs-appctl: ovs-vswitchd: server returned an error&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot; Bridge </span><span class="si">%s</span><span class="s"> Created and Assigned to </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span>\
+            <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;bridge_name&quot;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;virtual_ip_pref&quot;</span><span class="p">))</span> <span class="p">)</span>
+</div>
+<div class="viewcode-block" id="PlanetlabOVSSwitch.assign_controller"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch.assign_controller">[docs]</a>    <span class="k">def</span> <span class="nf">assign_controller</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Set the controller IP</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;controller_ip&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;controller_port&quot;</span><span class="p">)):</span>
+            <span class="k">return</span> 
+
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        if not (self.get(&quot;controller_ip&quot;) and self.get(&quot;controller_port&quot;)):</span>
+<span class="sd">            msg = &quot;No assignment in one or both attributes&quot;</span>
+<span class="sd">            self.error(msg)</span>
+<span class="sd">            raise AttributeError, msg</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot;ovs-vsctl set-controller </span><span class="si">%s</span><span class="s"> tcp:</span><span class="si">%s</span><span class="s">:</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> \
+                <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;bridge_name&quot;</span><span class="p">),</span> 
+                        <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;controller_ip&quot;</span><span class="p">),</span> 
+                        <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;controller_port&quot;</span><span class="p">))</span>
+        
+        <span class="n">shfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">,</span> <span class="s">&quot;set_controller.sh&quot;</span><span class="p">)</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">run_and_wait</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">,</span>
+                    <span class="n">shfile</span><span class="o">=</span><span class="n">shfile</span><span class="p">,</span>
+                    <span class="n">sudo</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> 
+                    <span class="n">pidfile</span><span class="o">=</span><span class="s">&quot;set_controller_pidfile&quot;</span><span class="p">,</span>
+                    <span class="n">ecodefile</span><span class="o">=</span><span class="s">&quot;set_controller_exitcode&quot;</span><span class="p">,</span> 
+                    <span class="n">stdout</span><span class="o">=</span><span class="s">&quot;set_controller_stdout&quot;</span><span class="p">,</span> 
+                    <span class="n">stderr</span><span class="o">=</span><span class="s">&quot;set_controller_stderr&quot;</span><span class="p">)</span>
+        <span class="k">except</span> <span class="ne">RuntimeError</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;SSH connection in the method assign_controller&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Controller assigned to the bridge </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;bridge_name&quot;</span><span class="p">))</span>
+           </div>
+<div class="viewcode-block" id="PlanetlabOVSSwitch.ovs_status"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch.ovs_status">[docs]</a>    <span class="k">def</span> <span class="nf">ovs_status</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Print the status of the bridge                             </span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot;sliver-ovs show | tail -n +2&quot;</span>
+        <span class="n">shfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">,</span> <span class="s">&quot;ovs_status.sh&quot;</span><span class="p">)</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">run_and_wait</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">,</span>
+                    <span class="n">shfile</span><span class="o">=</span><span class="n">shfile</span><span class="p">,</span>
+                    <span class="n">sudo</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> 
+                    <span class="n">pidfile</span><span class="o">=</span><span class="s">&quot;ovs_status_pidfile&quot;</span><span class="p">,</span>
+                    <span class="n">ecodefile</span><span class="o">=</span><span class="s">&quot;ovs_status_exitcode&quot;</span><span class="p">,</span> 
+                    <span class="n">stdout</span><span class="o">=</span><span class="s">&quot;ovs_status_stdout&quot;</span><span class="p">,</span> 
+                    <span class="n">stderr</span><span class="o">=</span><span class="s">&quot;ovs_status_stderr&quot;</span><span class="p">)</span>
+        <span class="k">except</span> <span class="ne">RuntimeError</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Error when checking the status of the OpenVswitch&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+</div>
+<div class="viewcode-block" id="PlanetlabOVSSwitch.do_release"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch.do_release">[docs]</a>    <span class="k">def</span> <span class="nf">do_release</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Delete the bridge and close the server.  </span>
+
+<span class="sd">          .. note : It need to wait for the others RM (OVSPort and OVSTunnel)</span>
+<span class="sd">        to be released before releasing itself</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+
+        <span class="kn">from</span> <span class="nn">nepi.resources.planetlab.openvswitch.ovsport</span> <span class="kn">import</span> <span class="n">PlanetlabOVSPort</span>
+        <span class="n">rms</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">PlanetlabOVSPort</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+
+        <span class="k">for</span> <span class="n">rm</span> <span class="ow">in</span> <span class="n">rms</span><span class="p">:</span>
+            <span class="k">if</span> <span class="n">rm</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">release</span><span class="p">)</span>
+                <span class="k">return</span> 
+            
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Deleting the bridge </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;bridge_name&#39;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+        
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot;sliver-ovs del-bridge </span><span class="si">%s</span><span class="s">; sliver-ovs stop&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;bridge_name&#39;</span><span class="p">)</span>
+        <span class="n">shfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">,</span> <span class="s">&quot;stop.sh&quot;</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">run_and_wait</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">,</span>
+                <span class="n">shfile</span><span class="o">=</span><span class="n">shfile</span><span class="p">,</span>
+                <span class="n">sudo</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> 
+                <span class="n">pidfile</span><span class="o">=</span><span class="s">&quot;stop_pidfile&quot;</span><span class="p">,</span>
+                <span class="n">ecodefile</span><span class="o">=</span><span class="s">&quot;stop_exitcode&quot;</span><span class="p">,</span> 
+                <span class="n">stdout</span><span class="o">=</span><span class="s">&quot;stop_stdout&quot;</span><span class="p">,</span> 
+                <span class="n">stderr</span><span class="o">=</span><span class="s">&quot;stop_stderr&quot;</span><span class="p">)</span>
+
+        <span class="nb">super</span><span class="p">(</span><span class="n">PlanetlabOVSSwitch</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_release</span><span class="p">()</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/planetlab/openvswitch/ovsport.html b/doc/sphinx/_build/html/_modules/nepi/resources/planetlab/openvswitch/ovsport.html
new file mode 100644 (file)
index 0000000..3ef1946
--- /dev/null
@@ -0,0 +1,384 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.planetlab.openvswitch.ovsport &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.planetlab.openvswitch.ovsport</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Authors: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+<span class="c">#         Alexandros Kouvakas &lt;alexandros.kouvakas@inria.fr&gt;</span>
+<span class="c">#         Julien Tribino &lt;julien.tribino@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.planetlab.openvswitch.ovs</span> <span class="kn">import</span> <span class="n">PlanetlabOVSSwitch</span>        
+<span class="kn">from</span> <span class="nn">nepi.resources.planetlab.node</span> <span class="kn">import</span> <span class="n">PlanetlabNode</span>        
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.application</span> <span class="kn">import</span> <span class="n">LinuxApplication</span>
+
+<span class="kn">import</span> <span class="nn">os</span>
+
+<span class="nd">@clsinit_copy</span>                 
+<div class="viewcode-block" id="PlanetlabOVSPort"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort">[docs]</a><span class="k">class</span> <span class="nc">PlanetlabOVSPort</span><span class="p">(</span><span class="n">LinuxApplication</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    .. class:: Class Args :</span>
+<span class="sd">      </span>
+<span class="sd">        :param ec: The Experiment controller</span>
+<span class="sd">        :type ec: ExperimentController</span>
+<span class="sd">        :param guid: guid of the RM</span>
+<span class="sd">        :type guid: int</span>
+
+<span class="sd">    &quot;&quot;&quot;</span>
+    
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;planetlab::OVSPort&quot;</span>
+    <span class="n">_help</span> <span class="o">=</span> <span class="s">&quot;Runs an OpenVSwitch on a PlanetLab host&quot;</span>
+    <span class="n">_platform</span> <span class="o">=</span> <span class="s">&quot;planetlab&quot;</span>
+
+    <span class="n">_authorized_connections</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;planetlab::OVSSwitch&quot;</span><span class="p">,</span> <span class="s">&quot;linux::UdpTunnel&quot;</span><span class="p">,</span> <span class="s">&quot;linux::Tunnel&quot;</span><span class="p">]</span>      
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Register the attributes of OVSPort RM </span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">port_name</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;port_name&quot;</span><span class="p">,</span> <span class="s">&quot;Name of the port&quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>                    
+        <span class="n">ip</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;ip&quot;</span><span class="p">,</span> <span class="s">&quot;IP of the endpoint. This is the attribute &quot;</span> 
+                                <span class="s">&quot;you should use to establish a tunnel or a remote &quot;</span>
+                                <span class="s">&quot;connection between endpoint&quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+        <span class="n">network</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;network&quot;</span><span class="p">,</span> <span class="s">&quot;Network used by the port&quot;</span><span class="p">,</span>
+            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>    
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">port_name</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">ip</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">network</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        :param ec: The Experiment controller</span>
+<span class="sd">        :type ec: ExperimentController</span>
+<span class="sd">        :param guid: guid of the RM</span>
+<span class="sd">        :type guid: int</span>
+<span class="sd">    </span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">PlanetlabOVSPort</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;ovsport-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_port_number</span> <span class="o">=</span> <span class="bp">None</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="PlanetlabOVSPort.node"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.node">[docs]</a>    <span class="k">def</span> <span class="nf">node</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Node that run the switch and the ports</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">ovsswitch</span><span class="o">.</span><span class="n">node</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="PlanetlabOVSPort.ovsswitch"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.ovsswitch">[docs]</a>    <span class="k">def</span> <span class="nf">ovsswitch</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Switch where the port is created</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">ovsswitch</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">PlanetlabOVSSwitch</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+        <span class="k">if</span> <span class="n">ovsswitch</span><span class="p">:</span> <span class="k">return</span> <span class="n">ovsswitch</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+        <span class="k">return</span> <span class="bp">None</span>
+        </div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="PlanetlabOVSPort.port_number"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.port_number">[docs]</a>    <span class="k">def</span> <span class="nf">port_number</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_port_number</span>
+</div>
+<div class="viewcode-block" id="PlanetlabOVSPort.valid_connection"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.valid_connection">[docs]</a>    <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Check if the connection is available.</span>
+
+<span class="sd">        :param guid: Guid of the current RM</span>
+<span class="sd">        :type guid: int</span>
+<span class="sd">        :rtype:  Boolean</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">rm</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">()</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_authorized_connections</span><span class="p">:</span>
+            <span class="k">return</span> <span class="bp">False</span>
+
+        <span class="k">return</span> <span class="bp">True</span>
+</div>
+<div class="viewcode-block" id="PlanetlabOVSPort.create_port"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.create_port">[docs]</a>    <span class="k">def</span> <span class="nf">create_port</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Create the desired port</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Creating the port </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;port_name&#39;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;port_name&#39;</span><span class="p">):</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;The port name is not assigned&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">ovsswitch</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;The OVSwitch RM is not running&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot;sliver-ovs create-port </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">ovsswitch</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;bridge_name&#39;</span><span class="p">),</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;port_name&#39;</span><span class="p">))</span>   
+        
+        <span class="n">shfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">,</span> <span class="s">&quot;create_port.sh&quot;</span><span class="p">)</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">run_and_wait</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">,</span>
+                    <span class="n">shfile</span><span class="o">=</span><span class="n">shfile</span><span class="p">,</span>
+                    <span class="n">sudo</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span>
+                    <span class="n">stderr</span><span class="o">=</span><span class="s">&quot;port_stdout&quot;</span><span class="p">,</span> 
+                    <span class="n">stdout</span><span class="o">=</span><span class="s">&quot;port_stderr&quot;</span><span class="p">,</span>
+                    <span class="n">pidfile</span><span class="o">=</span><span class="s">&quot;port_pidfile&quot;</span><span class="p">,</span>
+                    <span class="n">ecodefile</span><span class="o">=</span><span class="s">&quot;port_exitcode&quot;</span><span class="p">)</span>
+        <span class="k">except</span> <span class="ne">RuntimeError</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Could not create ovs-port&quot;</span>            
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Created port </span><span class="si">%s</span><span class="s"> on switch </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;port_name&#39;</span><span class="p">),</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ovsswitch</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;bridge_name&#39;</span><span class="p">)))</span>     
+           </div>
+<div class="viewcode-block" id="PlanetlabOVSPort.initiate_udp_connection"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.initiate_udp_connection">[docs]</a>    <span class="k">def</span> <span class="nf">initiate_udp_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="p">,</span> <span class="n">connection_app_home</span><span class="p">,</span> 
+            <span class="n">connection_run_home</span><span class="p">,</span> <span class="n">cipher</span><span class="p">,</span> <span class="n">cipher_key</span><span class="p">,</span> <span class="n">bwlimit</span><span class="p">,</span> <span class="n">txqueuelen</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Get the local_endpoint of the port</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Discovering the port number for </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;port_name&#39;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot;sliver-ovs get-local-endpoint </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;port_name&#39;</span><span class="p">)</span>
+
+        <span class="n">shfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">connection_app_home</span><span class="p">,</span> <span class="s">&quot;get_port.sh&quot;</span><span class="p">)</span>
+        <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">run_and_wait</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="n">connection_run_home</span><span class="p">,</span>
+                <span class="n">shfile</span><span class="o">=</span><span class="n">shfile</span><span class="p">,</span>
+                <span class="n">sudo</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> 
+                <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span>
+                <span class="n">pidfile</span><span class="o">=</span><span class="s">&quot;get_port_pidfile&quot;</span><span class="p">,</span>
+                <span class="n">ecodefile</span><span class="o">=</span><span class="s">&quot;get_port_exitcode&quot;</span><span class="p">,</span> 
+                <span class="n">stdout</span><span class="o">=</span><span class="s">&quot;get_port_stdout&quot;</span><span class="p">,</span>    
+                <span class="n">stderr</span><span class="o">=</span><span class="s">&quot;get_port_stderr&quot;</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">err</span> <span class="o">!=</span> <span class="s">&quot;&quot;</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Error retrieving the local endpoint of the port&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">if</span> <span class="n">out</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_port_number</span> <span class="o">=</span> <span class="n">out</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;The number of the </span><span class="si">%s</span><span class="s"> is </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;port_name&#39;</span><span class="p">),</span> 
+           <span class="bp">self</span><span class="o">.</span><span class="n">port_number</span><span class="p">))</span>
+
+        <span class="c"># Must set a routing rule in the ovs client nodes so they know</span>
+        <span class="c"># that the LAN can be found through the switch</span>
+        <span class="k">if</span> <span class="n">remote_endpoint</span><span class="o">.</span><span class="n">is_rm_instance</span><span class="p">(</span><span class="s">&quot;planetlab::Tap&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_vroute</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">register_resource</span><span class="p">(</span><span class="s">&quot;planetlab::Vroute&quot;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_vroute</span><span class="p">,</span> <span class="s">&quot;action&quot;</span><span class="p">,</span> <span class="s">&quot;add&quot;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_vroute</span><span class="p">,</span> <span class="s">&quot;prefix&quot;</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;prefix&quot;</span><span class="p">))</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_vroute</span><span class="p">,</span> <span class="s">&quot;nexthop&quot;</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;pointopoint&quot;</span><span class="p">))</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_vroute</span><span class="p">,</span> <span class="s">&quot;network&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;network&quot;</span><span class="p">))</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">register_connection</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_vroute</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="o">.</span><span class="n">guid</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">deploy</span><span class="p">(</span><span class="n">guids</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_vroute</span><span class="p">],</span> <span class="n">group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">deployment_group</span><span class="p">)</span>
+
+            <span class="c"># For debugging</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Route for the tap configured&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">port_number</span>
+</div>
+<div class="viewcode-block" id="PlanetlabOVSPort.establish_udp_connection"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.establish_udp_connection">[docs]</a>    <span class="k">def</span> <span class="nf">establish_udp_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="p">,</span>
+            <span class="n">connection_app_home</span><span class="p">,</span>
+            <span class="n">connection_run_home</span><span class="p">,</span> 
+            <span class="n">port</span><span class="p">):</span>
+        <span class="n">remote_ip</span> <span class="o">=</span> <span class="n">remote_endpoint</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ip&quot;</span><span class="p">)</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_establish_connection_command</span><span class="p">(</span><span class="n">port</span><span class="p">,</span> <span class="n">remote_ip</span><span class="p">)</span>
+
+        <span class="n">shfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">connection_app_home</span><span class="p">,</span> <span class="s">&quot;connect_port.sh&quot;</span><span class="p">)</span>
+        <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">run_and_wait</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="n">connection_run_home</span><span class="p">,</span>
+                <span class="n">shfile</span><span class="o">=</span><span class="n">shfile</span><span class="p">,</span>
+                <span class="n">sudo</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> 
+                <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span>
+                <span class="n">pidfile</span><span class="o">=</span><span class="s">&quot;connect_port_pidfile&quot;</span><span class="p">,</span>
+                <span class="n">ecodefile</span><span class="o">=</span><span class="s">&quot;connect_port_exitcode&quot;</span><span class="p">,</span> 
+                <span class="n">stdout</span><span class="o">=</span><span class="s">&quot;connect_port_stdout&quot;</span><span class="p">,</span>    
+                <span class="n">stderr</span><span class="o">=</span><span class="s">&quot;connect_port_stderr&quot;</span><span class="p">)</span>
+
+        <span class="c"># For debugging</span>
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Connection on port configured&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+</div>
+    <span class="k">def</span> <span class="nf">_establish_connection_command</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">port</span><span class="p">,</span> <span class="n">remote_ip</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Script to create the connection from a switch to a </span>
+<span class="sd">             remote endpoint</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">local_port_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;port_name&#39;</span><span class="p">)</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;sliver-ovs&quot;</span><span class="p">]</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;set-remote-endpoint&quot;</span><span class="p">)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">local_port_name</span><span class="p">)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">remote_ip</span><span class="p">)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">port</span><span class="p">)</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_paths</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">command</span>
+       
+<div class="viewcode-block" id="PlanetlabOVSPort.verify_connection"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.verify_connection">[docs]</a>    <span class="k">def</span> <span class="nf">verify_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="p">,</span> <span class="n">connection_app_home</span><span class="p">,</span> 
+                <span class="n">connection_run_home</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">ovsswitch</span><span class="o">.</span><span class="n">ovs_status</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="PlanetlabOVSPort.terminate_connection"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.terminate_connection">[docs]</a>    <span class="k">def</span> <span class="nf">terminate_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">,</span> <span class="n">connection_app_home</span><span class="p">,</span> 
+                <span class="n">connection_run_home</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">True</span>
+</div>
+<div class="viewcode-block" id="PlanetlabOVSPort.check_status"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.check_status">[docs]</a>    <span class="k">def</span> <span class="nf">check_status</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">status</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_pid</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ppid</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="PlanetlabOVSPort.do_provision"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.do_provision">[docs]</a>    <span class="k">def</span> <span class="nf">do_provision</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">create_port</span><span class="p">()</span>
+        <span class="n">end_ip</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ovsswitch</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;virtual_ip_pref&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;/&#39;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;ip&quot;</span><span class="p">,</span> <span class="n">end_ip</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
+
+        <span class="c">#Check the status of the OVS Switch</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">ovsswitch</span><span class="o">.</span><span class="n">ovs_status</span><span class="p">()</span>
+    
+        <span class="bp">self</span><span class="o">.</span><span class="n">set_provisioned</span><span class="p">()</span>
+               </div>
+<div class="viewcode-block" id="PlanetlabOVSPort.do_deploy"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.do_deploy">[docs]</a>    <span class="k">def</span> <span class="nf">do_deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Deploy the OVS port after the OVS Switch</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">ovsswitch</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">ovsswitch</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>       
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;---- RESCHEDULING DEPLOY ---- OVSwitch state </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">ovsswitch</span><span class="o">.</span><span class="n">state</span> <span class="p">)</span>  
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">deploy</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_provision</span><span class="p">()</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_ready</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="PlanetlabOVSPort.do_release"><a class="viewcode-back" href="../../../../../_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.do_release">[docs]</a>    <span class="k">def</span> <span class="nf">do_release</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Delete the port on the OVSwitch. It needs to wait for the tunnel</span>
+<span class="sd">        to be released.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="kn">from</span> <span class="nn">nepi.resources.linux.udptunnel</span> <span class="kn">import</span> <span class="n">LinuxUdpTunnel</span>
+        <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">LinuxUdpTunnel</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+
+        <span class="k">if</span> <span class="n">rm</span> <span class="ow">and</span> <span class="n">rm</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STOPPED</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">release</span><span class="p">)</span>
+            <span class="k">return</span> 
+            
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Deleting the port </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;port_name&#39;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot;sliver-ovs del_port </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;port_name&#39;</span><span class="p">)</span>
+
+        <span class="n">shfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">,</span> <span class="s">&quot;stop.sh&quot;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">run_and_wait</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">,</span>
+                <span class="n">shfile</span><span class="o">=</span><span class="n">shfile</span><span class="p">,</span>
+                <span class="n">sudo</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> 
+                <span class="n">pidfile</span><span class="o">=</span><span class="s">&quot;stop_pidfile&quot;</span><span class="p">,</span>
+                <span class="n">ecodefile</span><span class="o">=</span><span class="s">&quot;stop_exitcode&quot;</span><span class="p">,</span> 
+                <span class="n">stdout</span><span class="o">=</span><span class="s">&quot;stop_stdout&quot;</span><span class="p">,</span> 
+                <span class="n">stderr</span><span class="o">=</span><span class="s">&quot;stop_stderr&quot;</span><span class="p">)</span>
+
+        <span class="nb">super</span><span class="p">(</span><span class="n">PlanetlabOVSPort</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_release</span><span class="p">()</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/planetlab/plcapi.html b/doc/sphinx/_build/html/_modules/nepi/resources/planetlab/plcapi.html
new file mode 100644 (file)
index 0000000..0a560cb
--- /dev/null
@@ -0,0 +1,676 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.planetlab.plcapi &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.planetlab.plcapi</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">import</span> <span class="nn">functools</span>
+<span class="kn">import</span> <span class="nn">hashlib</span>
+<span class="kn">import</span> <span class="nn">socket</span>
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">time</span>
+<span class="kn">import</span> <span class="nn">threading</span>
+<span class="kn">import</span> <span class="nn">xmlrpclib</span>
+
+<span class="k">def</span> <span class="nf">_retry</span><span class="p">(</span><span class="n">fn</span><span class="p">):</span>
+    <span class="k">def</span> <span class="nf">rv</span><span class="p">(</span><span class="o">*</span><span class="n">p</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">):</span>
+        <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="mi">5</span><span class="p">):</span>
+            <span class="k">try</span><span class="p">:</span>
+                <span class="k">return</span> <span class="n">fn</span><span class="p">(</span><span class="o">*</span><span class="n">p</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">)</span>
+            <span class="k">except</span> <span class="p">(</span><span class="n">socket</span><span class="o">.</span><span class="n">error</span><span class="p">,</span> <span class="ne">IOError</span><span class="p">,</span> <span class="ne">OSError</span><span class="p">):</span>
+                <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="n">x</span><span class="o">*</span><span class="mi">5</span><span class="o">+</span><span class="mi">5</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">fn</span> <span class="p">(</span><span class="o">*</span><span class="n">p</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">rv</span>
+
+<div class="viewcode-block" id="PLCAPI"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI">[docs]</a><span class="k">class</span> <span class="nc">PLCAPI</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+
+    <span class="n">_expected_methods</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span>
+        <span class="p">[</span><span class="s">&#39;AddNodeTag&#39;</span><span class="p">,</span> <span class="s">&#39;AddConfFile&#39;</span><span class="p">,</span> <span class="s">&#39;DeletePersonTag&#39;</span><span class="p">,</span> <span class="s">&#39;AddNodeType&#39;</span><span class="p">,</span>
+         <span class="s">&#39;DeleteBootState&#39;</span><span class="p">,</span> <span class="s">&#39;SliceListNames&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteKey&#39;</span><span class="p">,</span><span class="s">&#39;SliceGetTicket&#39;</span><span class="p">,</span> 
+         <span class="s">&#39;SliceUsersList&#39;</span><span class="p">,</span> <span class="s">&#39;SliceUpdate&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeGroups&#39;</span><span class="p">,</span> <span class="s">&#39;SliceCreate&#39;</span><span class="p">,</span> 
+         <span class="s">&#39;GetNetworkMethods&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeFlavour&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteNode&#39;</span><span class="p">,</span> <span class="s">&#39;BootNotifyOwners&#39;</span><span class="p">,</span>
+         <span class="s">&#39;AddPersonKey&#39;</span><span class="p">,</span> <span class="s">&#39;AddNode&#39;</span><span class="p">,</span> <span class="s">&#39;UpdateNodeGroup&#39;</span><span class="p">,</span> <span class="s">&#39;GetAddressTypes&#39;</span><span class="p">,</span>
+         <span class="s">&#39;AddIlink&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteNetworkType&#39;</span><span class="p">,</span> <span class="s">&#39;GetInitScripts&#39;</span><span class="p">,</span> <span class="s">&#39;GenerateNodeConfFile&#39;</span><span class="p">,</span>
+         <span class="s">&#39;AddSite&#39;</span><span class="p">,</span> <span class="s">&#39;BindObjectToPeer&#39;</span><span class="p">,</span> <span class="s">&#39;SliceListUserSlices&#39;</span><span class="p">,</span> <span class="s">&#39;GetPeers&#39;</span><span class="p">,</span>
+         <span class="s">&#39;AddPeer&#39;</span><span class="p">,</span> <span class="s">&#39;DeletePeer&#39;</span><span class="p">,</span> <span class="s">&#39;AddRole&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteRole&#39;</span><span class="p">,</span> <span class="s">&#39;SetPersonPrimarySite&#39;</span><span class="p">,</span>
+         <span class="s">&#39;AddSiteAddress&#39;</span><span class="p">,</span> <span class="s">&#39;SliceDelete&#39;</span><span class="p">,</span> <span class="s">&#39;NotifyPersons&#39;</span><span class="p">,</span> <span class="s">&#39;GetKeyTypes&#39;</span><span class="p">,</span>
+         <span class="s">&#39;GetConfFiles&#39;</span><span class="p">,</span> <span class="s">&#39;GetIlinks&#39;</span><span class="p">,</span> <span class="s">&#39;AddTagType&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodes&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteNodeTag&#39;</span><span class="p">,</span>
+         <span class="s">&#39;DeleteSliceFromNodesWhitelist&#39;</span><span class="p">,</span> <span class="s">&#39;UpdateAddress&#39;</span><span class="p">,</span> <span class="s">&#39;ResetPassword&#39;</span><span class="p">,</span> 
+         <span class="s">&#39;AddSliceToNodesWhitelist&#39;</span><span class="p">,</span> <span class="s">&#39;AddRoleToTagType&#39;</span><span class="p">,</span> <span class="s">&#39;AddLeases&#39;</span><span class="p">,</span>
+         <span class="s">&#39;GetAddresses&#39;</span><span class="p">,</span> <span class="s">&#39;AddInitScript&#39;</span><span class="p">,</span> <span class="s">&#39;RebootNode&#39;</span><span class="p">,</span> <span class="s">&#39;GetPCUTypes&#39;</span><span class="p">,</span> 
+         <span class="s">&#39;RefreshPeer&#39;</span><span class="p">,</span> <span class="s">&#39;GetBootMedium&#39;</span><span class="p">,</span> <span class="s">&#39;UpdateKey&#39;</span><span class="p">,</span> <span class="s">&#39;UpdatePCU&#39;</span><span class="p">,</span> <span class="s">&#39;GetSession&#39;</span><span class="p">,</span>
+         <span class="s">&#39;AddInterfaceTag&#39;</span><span class="p">,</span> <span class="s">&#39;UpdatePCUType&#39;</span><span class="p">,</span> <span class="s">&#39;GetInterfaces&#39;</span><span class="p">,</span> <span class="s">&#39;SliceExtendedInfo&#39;</span><span class="p">,</span>
+         <span class="s">&#39;SliceNodesList&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteRoleFromTagType&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteSlice&#39;</span><span class="p">,</span> <span class="s">&#39;GetSites&#39;</span><span class="p">,</span>
+         <span class="s">&#39;DeleteMessage&#39;</span><span class="p">,</span> <span class="s">&#39;GetSliceFamily&#39;</span><span class="p">,</span> <span class="s">&#39;GetPlcRelease&#39;</span><span class="p">,</span> <span class="s">&#39;UpdateTagType&#39;</span><span class="p">,</span>
+         <span class="s">&#39;AddSliceInstantiation&#39;</span><span class="p">,</span> <span class="s">&#39;ResolveSlices&#39;</span><span class="p">,</span> <span class="s">&#39;GetSlices&#39;</span><span class="p">,</span>
+         <span class="s">&#39;DeleteRoleFromPerson&#39;</span><span class="p">,</span> <span class="s">&#39;GetSessions&#39;</span><span class="p">,</span> <span class="s">&#39;UpdatePeer&#39;</span><span class="p">,</span> <span class="s">&#39;VerifyPerson&#39;</span><span class="p">,</span>
+         <span class="s">&#39;GetPersonTags&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteKeyType&#39;</span><span class="p">,</span> <span class="s">&#39;AddSlice&#39;</span><span class="p">,</span> <span class="s">&#39;SliceUserAdd&#39;</span><span class="p">,</span>
+         <span class="s">&#39;DeleteSession&#39;</span><span class="p">,</span> <span class="s">&#39;GetMessages&#39;</span><span class="p">,</span> <span class="s">&#39;DeletePCU&#39;</span><span class="p">,</span> <span class="s">&#39;GetPeerData&#39;</span><span class="p">,</span>
+         <span class="s">&#39;DeletePersonFromSite&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteTagType&#39;</span><span class="p">,</span> <span class="s">&#39;GetPCUs&#39;</span><span class="p">,</span> <span class="s">&#39;UpdateLeases&#39;</span><span class="p">,</span>
+         <span class="s">&#39;AddMessage&#39;</span><span class="p">,</span> <span class="s">&#39;DeletePCUProtocolType&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteInterfaceTag&#39;</span><span class="p">,</span>
+         <span class="s">&#39;AddPersonToSite&#39;</span><span class="p">,</span> <span class="s">&#39;GetSlivers&#39;</span><span class="p">,</span> <span class="s">&#39;SliceNodesDel&#39;</span><span class="p">,</span>
+         <span class="s">&#39;DeleteAddressTypeFromAddress&#39;</span><span class="p">,</span> <span class="s">&#39;AddNodeGroup&#39;</span><span class="p">,</span> <span class="s">&#39;GetSliceTags&#39;</span><span class="p">,</span>
+         <span class="s">&#39;DeleteSite&#39;</span><span class="p">,</span> <span class="s">&#39;GetSiteTags&#39;</span><span class="p">,</span> <span class="s">&#39;UpdateMessage&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteSliceFromNodes&#39;</span><span class="p">,</span>
+         <span class="s">&#39;SliceRenew&#39;</span><span class="p">,</span> <span class="s">&#39;UpdatePCUProtocolType&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteSiteTag&#39;</span><span class="p">,</span>
+         <span class="s">&#39;GetPCUProtocolTypes&#39;</span><span class="p">,</span> <span class="s">&#39;GetEvents&#39;</span><span class="p">,</span> <span class="s">&#39;GetSliceTicket&#39;</span><span class="p">,</span> <span class="s">&#39;AddPersonTag&#39;</span><span class="p">,</span>
+         <span class="s">&#39;BootGetNodeDetails&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteInterface&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteNodeGroup&#39;</span><span class="p">,</span>
+         <span class="s">&#39;AddPCUProtocolType&#39;</span><span class="p">,</span> <span class="s">&#39;BootCheckAuthentication&#39;</span><span class="p">,</span> <span class="s">&#39;AddSiteTag&#39;</span><span class="p">,</span>
+         <span class="s">&#39;AddAddressTypeToAddress&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteConfFile&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteInitScript&#39;</span><span class="p">,</span>
+         <span class="s">&#39;DeletePerson&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteIlink&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteAddressType&#39;</span><span class="p">,</span> <span class="s">&#39;AddBootState&#39;</span><span class="p">,</span>
+         <span class="s">&#39;AuthCheck&#39;</span><span class="p">,</span> <span class="s">&#39;NotifySupport&#39;</span><span class="p">,</span> <span class="s">&#39;GetSliceInstantiations&#39;</span><span class="p">,</span> <span class="s">&#39;AddPCUType&#39;</span><span class="p">,</span>
+         <span class="s">&#39;AddPCU&#39;</span><span class="p">,</span> <span class="s">&#39;AddSession&#39;</span><span class="p">,</span> <span class="s">&#39;GetEventObjects&#39;</span><span class="p">,</span> <span class="s">&#39;UpdateSiteTag&#39;</span><span class="p">,</span> 
+         <span class="s">&#39;UpdateNodeTag&#39;</span><span class="p">,</span> <span class="s">&#39;AddPerson&#39;</span><span class="p">,</span> <span class="s">&#39;BlacklistKey&#39;</span><span class="p">,</span> <span class="s">&#39;UpdateInitScript&#39;</span><span class="p">,</span>
+         <span class="s">&#39;AddSliceToNodes&#39;</span><span class="p">,</span> <span class="s">&#39;RebootNodeWithPCU&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeTags&#39;</span><span class="p">,</span> <span class="s">&#39;GetSliceKeys&#39;</span><span class="p">,</span>
+         <span class="s">&#39;GetSliceSshKeys&#39;</span><span class="p">,</span> <span class="s">&#39;AddNetworkMethod&#39;</span><span class="p">,</span> <span class="s">&#39;SliceNodesAdd&#39;</span><span class="p">,</span>
+         <span class="s">&#39;DeletePersonFromSlice&#39;</span><span class="p">,</span> <span class="s">&#39;ReportRunlevel&#39;</span><span class="p">,</span> <span class="s">&#39;GetNetworkTypes&#39;</span><span class="p">,</span>
+         <span class="s">&#39;UpdateSite&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteConfFileFromNodeGroup&#39;</span><span class="p">,</span> <span class="s">&#39;UpdateNode&#39;</span><span class="p">,</span>
+         <span class="s">&#39;DeleteSliceInstantiation&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteSliceTag&#39;</span><span class="p">,</span> <span class="s">&#39;BootUpdateNode&#39;</span><span class="p">,</span>
+         <span class="s">&#39;UpdatePerson&#39;</span><span class="p">,</span> <span class="s">&#39;UpdateConfFile&#39;</span><span class="p">,</span> <span class="s">&#39;SliceUserDel&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteLeases&#39;</span><span class="p">,</span>
+         <span class="s">&#39;AddConfFileToNodeGroup&#39;</span><span class="p">,</span> <span class="s">&#39;UpdatePersonTag&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteConfFileFromNode&#39;</span><span class="p">,</span>
+         <span class="s">&#39;AddPersonToSlice&#39;</span><span class="p">,</span> <span class="s">&#39;UnBindObjectFromPeer&#39;</span><span class="p">,</span> <span class="s">&#39;AddNodeToPCU&#39;</span><span class="p">,</span>
+         <span class="s">&#39;GetLeaseGranularity&#39;</span><span class="p">,</span> <span class="s">&#39;DeletePCUType&#39;</span><span class="p">,</span> <span class="s">&#39;GetTagTypes&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeTypes&#39;</span><span class="p">,</span>
+         <span class="s">&#39;UpdateInterfaceTag&#39;</span><span class="p">,</span> <span class="s">&#39;GetRoles&#39;</span><span class="p">,</span> <span class="s">&#39;UpdateSlice&#39;</span><span class="p">,</span> <span class="s">&#39;UpdateSliceTag&#39;</span><span class="p">,</span>
+         <span class="s">&#39;AddSliceTag&#39;</span><span class="p">,</span> <span class="s">&#39;AddNetworkType&#39;</span><span class="p">,</span> <span class="s">&#39;AddInterface&#39;</span><span class="p">,</span> <span class="s">&#39;AddAddressType&#39;</span><span class="p">,</span>
+         <span class="s">&#39;AddRoleToPerson&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteNodeType&#39;</span><span class="p">,</span> <span class="s">&#39;GetLeases&#39;</span><span class="p">,</span> <span class="s">&#39;UpdateInterface&#39;</span><span class="p">,</span>
+         <span class="s">&#39;SliceInfo&#39;</span><span class="p">,</span> <span class="s">&#39;DeleteAddress&#39;</span><span class="p">,</span> <span class="s">&#39;SliceTicketGet&#39;</span><span class="p">,</span> <span class="s">&#39;GetPersons&#39;</span><span class="p">,</span>
+         <span class="s">&#39;GetWhitelist&#39;</span><span class="p">,</span> <span class="s">&#39;AddKeyType&#39;</span><span class="p">,</span> <span class="s">&#39;UpdateAddressType&#39;</span><span class="p">,</span> <span class="s">&#39;GetPeerName&#39;</span><span class="p">,</span>
+         <span class="s">&#39;DeleteNetworkMethod&#39;</span><span class="p">,</span> <span class="s">&#39;UpdateIlink&#39;</span><span class="p">,</span> <span class="s">&#39;AddConfFileToNode&#39;</span><span class="p">,</span> <span class="s">&#39;GetKeys&#39;</span><span class="p">,</span>
+         <span class="s">&#39;DeleteNodeFromPCU&#39;</span><span class="p">,</span> <span class="s">&#39;GetInterfaceTags&#39;</span><span class="p">,</span> <span class="s">&#39;GetBootStates&#39;</span><span class="p">,</span>
+         <span class="s">&#39;SetInterfaceSens&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeLoadm&#39;</span><span class="p">,</span> <span class="s">&#39;GetInterfaceRate&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeLoadw&#39;</span><span class="p">,</span>
+         <span class="s">&#39;SetInterfaceKey&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeSlices&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeLoadm&#39;</span><span class="p">,</span> <span class="s">&#39;SetSliceVref&#39;</span><span class="p">,</span>
+         <span class="s">&#39;GetInterfaceIwpriv&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeLoadw&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeSerial&#39;</span><span class="p">,</span>
+         <span class="s">&#39;GetNodePlainBootstrapfs&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeMEMw&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeResponse&#39;</span><span class="p">,</span>
+         <span class="s">&#39;SetInterfaceRate&#39;</span><span class="p">,</span> <span class="s">&#39;SetSliceInitscript&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeFcdistro&#39;</span><span class="p">,</span>
+         <span class="s">&#39;GetNodeLoady&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeArch&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeKargs&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeMEMm&#39;</span><span class="p">,</span>
+         <span class="s">&#39;SetNodeBWy&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeBWw&#39;</span><span class="p">,</span> <span class="s">&#39;SetInterfaceSecurityMode&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeBWm&#39;</span><span class="p">,</span>
+         <span class="s">&#39;SetNodeASType&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeKargs&#39;</span><span class="p">,</span> <span class="s">&#39;GetPersonColumnconf&#39;</span><span class="p">,</span>
+         <span class="s">&#39;GetNodeResponsem&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeCPUy&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeCramfs&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeSlicesw&#39;</span><span class="p">,</span>
+         <span class="s">&#39;SetPersonColumnconf&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeSlicesy&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeCPUw&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeBWy&#39;</span><span class="p">,</span> 
+         <span class="s">&#39;GetNodeCPUm&#39;</span><span class="p">,</span> <span class="s">&#39;GetInterfaceDriver&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeLoad&#39;</span><span class="p">,</span> <span class="s">&#39;GetInterfaceMode&#39;</span><span class="p">,</span>
+         <span class="s">&#39;GetNodeSerial&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeSlicesm&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeLoady&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeReliabilityw&#39;</span><span class="p">,</span>
+         <span class="s">&#39;SetSliceFcdistro&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeReliabilityy&#39;</span><span class="p">,</span> <span class="s">&#39;SetInterfaceEssid&#39;</span><span class="p">,</span>
+         <span class="s">&#39;SetSliceInitscriptCode&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeExtensions&#39;</span><span class="p">,</span> <span class="s">&#39;GetSliceOmfControl&#39;</span><span class="p">,</span>
+         <span class="s">&#39;SetNodeCity&#39;</span><span class="p">,</span> <span class="s">&#39;SetInterfaceIfname&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeHrn&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeNoHangcheck&#39;</span><span class="p">,</span> 
+         <span class="s">&#39;GetNodeNoHangcheck&#39;</span><span class="p">,</span> <span class="s">&#39;GetSliceFcdistro&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeCountry&#39;</span><span class="p">,</span>
+         <span class="s">&#39;SetNodeKvariant&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeKvariant&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeMEMy&#39;</span><span class="p">,</span> <span class="s">&#39;SetInterfaceIwpriv&#39;</span><span class="p">,</span>
+         <span class="s">&#39;GetNodeMEMw&#39;</span><span class="p">,</span> <span class="s">&#39;SetInterfaceBackdoor&#39;</span><span class="p">,</span> <span class="s">&#39;GetInterfaceFreq&#39;</span><span class="p">,</span>
+         <span class="s">&#39;SetInterfaceChannel&#39;</span><span class="p">,</span> <span class="s">&#39;SetInterfaceNw&#39;</span><span class="p">,</span> <span class="s">&#39;GetPersonShowconf&#39;</span><span class="p">,</span>
+         <span class="s">&#39;GetSliceInitscriptCode&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeMEM&#39;</span><span class="p">,</span> <span class="s">&#39;GetInterfaceEssid&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeMEMm&#39;</span><span class="p">,</span>
+         <span class="s">&#39;SetInterfaceMode&#39;</span><span class="p">,</span> <span class="s">&#39;SetInterfaceIwconfig&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeSlicesm&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeBWm&#39;</span><span class="p">,</span>
+         <span class="s">&#39;SetNodePlainBootstrapfs&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeRegion&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeCPU&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeSlicesw&#39;</span><span class="p">,</span>
+         <span class="s">&#39;SetNodeBW&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeSlices&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeCramfs&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeSlicesy&#39;</span><span class="p">,</span>
+         <span class="s">&#39;GetInterfaceKey&#39;</span><span class="p">,</span> <span class="s">&#39;GetSliceInitscript&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeCPUm&#39;</span><span class="p">,</span> <span class="s">&#39;SetSliceArch&#39;</span><span class="p">,</span>
+         <span class="s">&#39;SetNodeLoad&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeResponse&#39;</span><span class="p">,</span> <span class="s">&#39;GetSliceSliverHMAC&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeBWw&#39;</span><span class="p">,</span>
+         <span class="s">&#39;GetNodeRegion&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeMEMy&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeASType&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodePldistro&#39;</span><span class="p">,</span>
+         <span class="s">&#39;GetSliceArch&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeCountry&#39;</span><span class="p">,</span> <span class="s">&#39;SetSliceOmfControl&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeHrn&#39;</span><span class="p">,</span> 
+         <span class="s">&#39;GetNodeCity&#39;</span><span class="p">,</span> <span class="s">&#39;SetInterfaceAlias&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeBW&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodePldistro&#39;</span><span class="p">,</span>
+         <span class="s">&#39;GetSlicePldistro&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeASNumber&#39;</span><span class="p">,</span> <span class="s">&#39;GetSliceHmac&#39;</span><span class="p">,</span> <span class="s">&#39;SetSliceHmac&#39;</span><span class="p">,</span>
+         <span class="s">&#39;GetNodeMEM&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeASNumber&#39;</span><span class="p">,</span> <span class="s">&#39;GetInterfaceAlias&#39;</span><span class="p">,</span> <span class="s">&#39;GetSliceVref&#39;</span><span class="p">,</span>
+         <span class="s">&#39;GetNodeArch&#39;</span><span class="p">,</span> <span class="s">&#39;GetSliceSshKey&#39;</span><span class="p">,</span> <span class="s">&#39;GetInterfaceKey4&#39;</span><span class="p">,</span> <span class="s">&#39;GetInterfaceKey2&#39;</span><span class="p">,</span>
+         <span class="s">&#39;GetInterfaceKey3&#39;</span><span class="p">,</span> <span class="s">&#39;GetInterfaceKey1&#39;</span><span class="p">,</span> <span class="s">&#39;GetInterfaceBackdoor&#39;</span><span class="p">,</span>
+         <span class="s">&#39;GetInterfaceIfname&#39;</span><span class="p">,</span> <span class="s">&#39;SetSliceSliverHMAC&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeReliability&#39;</span><span class="p">,</span>
+         <span class="s">&#39;GetNodeCPU&#39;</span><span class="p">,</span> <span class="s">&#39;SetPersonShowconf&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeExtensions&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeCPUy&#39;</span><span class="p">,</span> 
+         <span class="s">&#39;SetNodeCPUw&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeResponsew&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeResponsey&#39;</span><span class="p">,</span> <span class="s">&#39;GetInterfaceSens&#39;</span><span class="p">,</span>
+         <span class="s">&#39;SetNodeResponsew&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeResponsey&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeReliability&#39;</span><span class="p">,</span>
+         <span class="s">&#39;GetNodeReliabilitym&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeResponsem&#39;</span><span class="p">,</span> <span class="s">&#39;SetInterfaceDriver&#39;</span><span class="p">,</span>
+         <span class="s">&#39;GetInterfaceSecurityMode&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeDeployment&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeReliabilitym&#39;</span><span class="p">,</span>
+         <span class="s">&#39;GetNodeFcdistro&#39;</span><span class="p">,</span> <span class="s">&#39;SetInterfaceFreq&#39;</span><span class="p">,</span> <span class="s">&#39;GetInterfaceNw&#39;</span><span class="p">,</span>
+         <span class="s">&#39;SetNodeReliabilityy&#39;</span><span class="p">,</span> <span class="s">&#39;SetNodeReliabilityw&#39;</span><span class="p">,</span> <span class="s">&#39;GetInterfaceIwconfig&#39;</span><span class="p">,</span>
+         <span class="s">&#39;SetSlicePldistro&#39;</span><span class="p">,</span> <span class="s">&#39;SetSliceSshKey&#39;</span><span class="p">,</span> <span class="s">&#39;GetNodeDeployment&#39;</span><span class="p">,</span>
+         <span class="s">&#39;GetInterfaceChannel&#39;</span><span class="p">,</span> <span class="s">&#39;SetInterfaceKey2&#39;</span><span class="p">,</span> <span class="s">&#39;SetInterfaceKey3&#39;</span><span class="p">,</span>
+         <span class="s">&#39;SetInterfaceKey1&#39;</span><span class="p">,</span> <span class="s">&#39;SetInterfaceKey4&#39;</span><span class="p">])</span>
+     
+    <span class="n">_required_methods</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">username</span><span class="p">,</span> <span class="n">password</span><span class="p">,</span> <span class="n">hostname</span><span class="p">,</span> <span class="n">urlpattern</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">proxy</span><span class="p">,</span> <span class="n">session_key</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> 
+            <span class="n">local_peer</span> <span class="o">=</span> <span class="s">&quot;PLE&quot;</span><span class="p">):</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">_blacklist</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_reserved</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_nodes_cache</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_already_cached</span> <span class="o">=</span> <span class="bp">False</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_ecobj</span> <span class="o">=</span> <span class="n">ec</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">count</span> <span class="o">=</span> <span class="mi">1</span> 
+
+        <span class="k">if</span> <span class="n">session_key</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">auth</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="n">AuthMethod</span><span class="o">=</span><span class="s">&#39;session&#39;</span><span class="p">,</span> <span class="n">session</span><span class="o">=</span><span class="n">session_key</span><span class="p">)</span>
+        <span class="k">elif</span> <span class="n">username</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span> <span class="n">password</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">auth</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="n">AuthMethod</span><span class="o">=</span><span class="s">&#39;password&#39;</span><span class="p">,</span> <span class="n">Username</span><span class="o">=</span><span class="n">username</span><span class="p">,</span> <span class="n">AuthString</span><span class="o">=</span><span class="n">password</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">auth</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="n">AuthMethod</span><span class="o">=</span><span class="s">&#39;anonymous&#39;</span><span class="p">)</span>
+        
+        <span class="bp">self</span><span class="o">.</span><span class="n">_local_peer</span> <span class="o">=</span> <span class="n">local_peer</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_url</span> <span class="o">=</span> <span class="n">urlpattern</span> <span class="o">%</span> <span class="p">{</span><span class="s">&#39;hostname&#39;</span><span class="p">:</span><span class="n">hostname</span><span class="p">}</span>
+
+        <span class="k">if</span> <span class="p">(</span><span class="n">proxy</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">):</span>
+            <span class="kn">import</span> <span class="nn">urllib2</span>
+            <span class="k">class</span> <span class="nc">HTTPSProxyTransport</span><span class="p">(</span><span class="n">xmlrpclib</span><span class="o">.</span><span class="n">Transport</span><span class="p">):</span>
+                <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">proxy</span><span class="p">,</span> <span class="n">use_datetime</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
+                    <span class="n">opener</span> <span class="o">=</span> <span class="n">urllib2</span><span class="o">.</span><span class="n">build_opener</span><span class="p">(</span><span class="n">urllib2</span><span class="o">.</span><span class="n">ProxyHandler</span><span class="p">({</span><span class="s">&quot;https&quot;</span> <span class="p">:</span> <span class="n">proxy</span><span class="p">}))</span>
+                    <span class="n">xmlrpclib</span><span class="o">.</span><span class="n">Transport</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">use_datetime</span><span class="p">)</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">opener</span> <span class="o">=</span> <span class="n">opener</span>
+
+                <span class="k">def</span> <span class="nf">request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">host</span><span class="p">,</span> <span class="n">handler</span><span class="p">,</span> <span class="n">request_body</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
+                    <span class="n">req</span> <span class="o">=</span> <span class="n">urllib2</span><span class="o">.</span><span class="n">Request</span><span class="p">(</span><span class="s">&#39;https://</span><span class="si">%s%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">host</span><span class="p">,</span> <span class="n">handler</span><span class="p">),</span> <span class="n">request_body</span><span class="p">)</span>
+                    <span class="n">req</span><span class="o">.</span><span class="n">add_header</span><span class="p">(</span><span class="s">&#39;User-agent&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">user_agent</span><span class="p">)</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">verbose</span> <span class="o">=</span> <span class="n">verbose</span>
+                    <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">parse_response</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">opener</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">req</span><span class="p">))</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">_proxy_transport</span> <span class="o">=</span> <span class="k">lambda</span> <span class="p">:</span> <span class="n">HTTPSProxyTransport</span><span class="p">(</span><span class="n">proxy</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_proxy_transport</span> <span class="o">=</span> <span class="k">lambda</span> <span class="p">:</span> <span class="bp">None</span>
+        
+        <span class="bp">self</span><span class="o">.</span><span class="n">threadlocal</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">local</span><span class="p">()</span>
+
+        <span class="c"># Load blacklist from file</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ecobj</span><span class="o">.</span><span class="n">get_global</span><span class="p">(</span><span class="s">&#39;planetlab::Node&#39;</span><span class="p">,</span> <span class="s">&#39;persist_blacklist&#39;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_set_blacklist</span><span class="p">()</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="PLCAPI.api"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.api">[docs]</a>    <span class="k">def</span> <span class="nf">api</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="c"># Cannot reuse same proxy in all threads, py2.7 is not threadsafe</span>
+        <span class="k">return</span> <span class="n">xmlrpclib</span><span class="o">.</span><span class="n">ServerProxy</span><span class="p">(</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_url</span> <span class="p">,</span>
+            <span class="n">transport</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_proxy_transport</span><span class="p">(),</span>
+            <span class="n">allow_none</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+        </div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="PLCAPI.mcapi"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.mcapi">[docs]</a>    <span class="k">def</span> <span class="nf">mcapi</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">threadlocal</span><span class="o">.</span><span class="n">mc</span>
+        <span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
+            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">api</span>
+        </div>
+<div class="viewcode-block" id="PLCAPI.test"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.test">[docs]</a>    <span class="k">def</span> <span class="nf">test</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="c"># TODO: Use nepi utils Logger instead of warning!!</span>
+        <span class="kn">import</span> <span class="nn">warnings</span>
+        
+        <span class="c"># validate XMLRPC server checking supported API calls</span>
+        <span class="n">methods</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">_retry</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mcapi</span><span class="o">.</span><span class="n">system</span><span class="o">.</span><span class="n">listMethods</span><span class="p">)())</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_required_methods</span> <span class="o">-</span> <span class="n">methods</span><span class="p">:</span>
+            <span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="s">&quot;Unsupported REQUIRED methods: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span>
+                <span class="s">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_required_methods</span> <span class="o">-</span> <span class="n">methods</span><span class="p">)),</span> <span class="p">)</span> <span class="p">)</span>
+            <span class="k">return</span> <span class="bp">False</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_expected_methods</span> <span class="o">-</span> <span class="n">methods</span><span class="p">:</span>
+            <span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="s">&quot;Unsupported EXPECTED methods: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span>
+                <span class="s">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_expected_methods</span> <span class="o">-</span> <span class="n">methods</span><span class="p">)),</span> <span class="p">)</span> <span class="p">)</span>
+        
+        <span class="k">try</span><span class="p">:</span>
+            <span class="c"># test authorization</span>
+            <span class="n">network_types</span> <span class="o">=</span> <span class="n">_retry</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mcapi</span><span class="o">.</span><span class="n">GetNetworkTypes</span><span class="p">)(</span><span class="bp">self</span><span class="o">.</span><span class="n">auth</span><span class="p">)</span>
+        <span class="k">except</span> <span class="p">(</span><span class="n">xmlrpclib</span><span class="o">.</span><span class="n">ProtocolError</span><span class="p">,</span> <span class="n">xmlrpclib</span><span class="o">.</span><span class="n">Fault</span><span class="p">),</span><span class="n">e</span><span class="p">:</span>
+            <span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
+        
+        <span class="k">return</span> <span class="bp">True</span>
+</div>
+    <span class="k">def</span> <span class="nf">_set_blacklist</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">nepi_home</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expanduser</span><span class="p">(</span><span class="s">&quot;~&quot;</span><span class="p">),</span> <span class="s">&quot;.nepi&quot;</span><span class="p">)</span>
+        <span class="n">plblacklist_file</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">nepi_home</span><span class="p">,</span> <span class="s">&quot;plblacklist.txt&quot;</span><span class="p">)</span>
+        <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">plblacklist_file</span><span class="p">,</span> <span class="s">&#39;r&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
+            <span class="n">hosts_tobl</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()</span>
+            <span class="k">if</span> <span class="n">hosts_tobl</span><span class="p">:</span>
+                <span class="n">nodes_id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_nodes</span><span class="p">(</span><span class="n">hosts_tobl</span><span class="p">,</span> <span class="p">[</span><span class="s">&#39;node_id&#39;</span><span class="p">])</span>
+                <span class="k">for</span> <span class="n">node_id</span> <span class="ow">in</span> <span class="n">nodes_id</span><span class="p">:</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">_blacklist</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">node_id</span><span class="p">[</span><span class="s">&#39;node_id&#39;</span><span class="p">])</span>
+    
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="PLCAPI.network_types"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.network_types">[docs]</a>    <span class="k">def</span> <span class="nf">network_types</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_network_types</span>
+        <span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_network_types</span> <span class="o">=</span> <span class="n">_retry</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mcapi</span><span class="o">.</span><span class="n">GetNetworkTypes</span><span class="p">)(</span><span class="bp">self</span><span class="o">.</span><span class="n">auth</span><span class="p">)</span>
+            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_network_types</span>
+    </div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="PLCAPI.peer_map"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.peer_map">[docs]</a>    <span class="k">def</span> <span class="nf">peer_map</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peer_map</span>
+        <span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
+            <span class="n">peers</span> <span class="o">=</span> <span class="n">_retry</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mcapi</span><span class="o">.</span><span class="n">GetPeers</span><span class="p">)(</span><span class="bp">self</span><span class="o">.</span><span class="n">auth</span><span class="p">,</span> <span class="p">{},</span> <span class="p">[</span><span class="s">&#39;shortname&#39;</span><span class="p">,</span><span class="s">&#39;peername&#39;</span><span class="p">,</span><span class="s">&#39;peer_id&#39;</span><span class="p">])</span>
+            
+            <span class="bp">self</span><span class="o">.</span><span class="n">_peer_map</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
+                <span class="p">(</span><span class="n">peer</span><span class="p">[</span><span class="s">&#39;shortname&#39;</span><span class="p">],</span> <span class="n">peer</span><span class="p">[</span><span class="s">&#39;peer_id&#39;</span><span class="p">])</span>
+                <span class="k">for</span> <span class="n">peer</span> <span class="ow">in</span> <span class="n">peers</span>
+            <span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">_peer_map</span><span class="o">.</span><span class="n">update</span><span class="p">(</span>
+                <span class="p">(</span><span class="n">peer</span><span class="p">[</span><span class="s">&#39;peername&#39;</span><span class="p">],</span> <span class="n">peer</span><span class="p">[</span><span class="s">&#39;peer_id&#39;</span><span class="p">])</span>
+                <span class="k">for</span> <span class="n">peer</span> <span class="ow">in</span> <span class="n">peers</span>
+            <span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">_peer_map</span><span class="o">.</span><span class="n">update</span><span class="p">(</span>
+                <span class="p">(</span><span class="n">peer</span><span class="p">[</span><span class="s">&#39;peer_id&#39;</span><span class="p">],</span> <span class="n">peer</span><span class="p">[</span><span class="s">&#39;shortname&#39;</span><span class="p">])</span>
+                <span class="k">for</span> <span class="n">peer</span> <span class="ow">in</span> <span class="n">peers</span>
+            <span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">_peer_map</span><span class="p">[</span><span class="bp">None</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_local_peer</span>
+            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_peer_map</span>
+</div>
+<div class="viewcode-block" id="PLCAPI.get_node_flavour"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.get_node_flavour">[docs]</a>    <span class="k">def</span> <span class="nf">get_node_flavour</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Returns detailed information on a given node&#39;s flavour,</span>
+<span class="sd">        i.e. its base installation.</span>
+
+<span class="sd">        This depends on the global PLC settings in the PLC_FLAVOUR area,</span>
+<span class="sd">        optionnally overridden by any of the following tags if set on that node:</span>
+<span class="sd">        &#39;arch&#39;, &#39;pldistro&#39;, &#39;fcdistro&#39;, &#39;deployment&#39;, &#39;extensions&#39;</span>
+<span class="sd">        </span>
+<span class="sd">        Params:</span>
+<span class="sd">        </span>
+<span class="sd">            * node : int or string</span>
+<span class="sd">                - int, Node identifier</span>
+<span class="sd">                - string, Fully qualified hostname</span>
+<span class="sd">        </span>
+<span class="sd">        Returns:</span>
+
+<span class="sd">            struct</span>
+<span class="sd">                * extensions : array of string, extensions to add to the base install</span>
+<span class="sd">                * fcdistro : string, the fcdistro this node should be based upon</span>
+<span class="sd">                * nodefamily : string, the nodefamily this node should be based upon</span>
+<span class="sd">                * plain : boolean, use plain bootstrapfs image if set (for tests)  </span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="nb">int</span><span class="p">,</span> <span class="nb">long</span><span class="p">)):</span>
+            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">,</span> <span class="s">&quot;Node must be either a non-unicode string or an int&quot;</span>
+        <span class="k">return</span> <span class="n">_retry</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mcapi</span><span class="o">.</span><span class="n">GetNodeFlavour</span><span class="p">)(</span><span class="bp">self</span><span class="o">.</span><span class="n">auth</span><span class="p">,</span> <span class="n">node</span><span class="p">)</span>
+    </div>
+<div class="viewcode-block" id="PLCAPI.get_nodes"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.get_nodes">[docs]</a>    <span class="k">def</span> <span class="nf">get_nodes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node_id_or_name</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">fields</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Returns an array of structs containing details about nodes. </span>
+<span class="sd">        If node_id_or_name is specified and is an array of node identifiers</span>
+<span class="sd">        or hostnames,  or the filters keyword argument with struct of node</span>
+<span class="sd">        attributes, or node attributes by keyword argument,</span>
+<span class="sd">        only nodes matching the filter will be returned.</span>
+
+<span class="sd">        If fields is specified, only the specified details will be returned. </span>
+<span class="sd">        NOTE that if fields is unspecified, the complete set of native fields are</span>
+<span class="sd">        returned, which DOES NOT include tags at this time.</span>
+
+<span class="sd">        Some fields may only be viewed by admins.</span>
+<span class="sd">        </span>
+<span class="sd">        Special params:</span>
+<span class="sd">            </span>
+<span class="sd">            fields: an optional list of fields to retrieve. The default is all.</span>
+<span class="sd">            </span>
+<span class="sd">            filters: an optional mapping with custom filters, which is the only</span>
+<span class="sd">                way to support complex filters like negation and numeric comparisons.</span>
+<span class="sd">                </span>
+<span class="sd">            peer: a string (or sequence of strings) with the name(s) of peers</span>
+<span class="sd">                to filter - or None for local nodes.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="n">fields</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
+            <span class="n">fieldstuple</span> <span class="o">=</span> <span class="p">(</span><span class="n">fields</span><span class="p">,)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">fieldstuple</span> <span class="o">=</span> <span class="p">()</span>
+
+        <span class="k">if</span> <span class="n">node_id_or_name</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">_retry</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mcapi</span><span class="o">.</span><span class="n">GetNodes</span><span class="p">)(</span><span class="bp">self</span><span class="o">.</span><span class="n">auth</span><span class="p">,</span> <span class="n">node_id_or_name</span><span class="p">,</span> <span class="o">*</span><span class="n">fieldstuple</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">filters</span> <span class="o">=</span> <span class="n">kw</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">&#39;filters&#39;</span><span class="p">,{})</span>
+            
+            <span class="k">if</span> <span class="s">&#39;peer&#39;</span> <span class="ow">in</span> <span class="n">kw</span><span class="p">:</span>
+                <span class="n">peer</span> <span class="o">=</span> <span class="n">kw</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">&#39;peer&#39;</span><span class="p">)</span>
+                
+                <span class="n">name_to_id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">peer_map</span><span class="o">.</span><span class="n">get</span>
+                
+                <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">peer</span><span class="p">,</span> <span class="s">&#39;__iter__&#39;</span><span class="p">):</span>
+                    <span class="c"># we can&#39;t mix local and external nodes, so</span>
+                    <span class="c"># split and re-issue recursively in that case</span>
+                    <span class="k">if</span> <span class="bp">None</span> <span class="ow">in</span> <span class="n">peer</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_local_peer</span> <span class="ow">in</span> <span class="n">peer</span><span class="p">:</span>
+                        <span class="k">if</span> <span class="bp">None</span> <span class="ow">in</span> <span class="n">peer</span><span class="p">:</span>    
+                            <span class="n">peer</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="bp">None</span><span class="p">)</span>
+
+                        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_local_peer</span> <span class="ow">in</span> <span class="n">peer</span><span class="p">:</span>
+                            <span class="n">peer</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_local_peer</span><span class="p">)</span>
+
+                        <span class="k">return</span> <span class="p">(</span>
+                            <span class="bp">self</span><span class="o">.</span><span class="n">get_nodes</span><span class="p">(</span><span class="n">node_id_or_name</span><span class="p">,</span> <span class="n">fields</span><span class="p">,</span>
+                                    <span class="n">filters</span> <span class="o">=</span> <span class="n">filters</span><span class="p">,</span> <span class="n">peer</span><span class="o">=</span><span class="n">peer</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">)</span> <span class="o">+</span> \
+                            <span class="bp">self</span><span class="o">.</span><span class="n">get_nodes</span><span class="p">(</span><span class="n">node_id_or_name</span><span class="p">,</span> <span class="n">fields</span><span class="p">,</span> 
+                                    <span class="n">filters</span> <span class="o">=</span> <span class="n">filters</span><span class="p">,</span> <span class="n">peer</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">)</span>
+                         <span class="p">)</span>
+                    <span class="k">else</span><span class="p">:</span>
+                        <span class="n">peer_filter</span> <span class="o">=</span> <span class="nb">map</span><span class="p">(</span><span class="n">name_to_id</span><span class="p">,</span> <span class="n">peer</span><span class="p">)</span>
+
+                <span class="k">elif</span> <span class="n">peer</span> <span class="ow">is</span> <span class="bp">None</span> <span class="ow">or</span> <span class="n">peer</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">_local_peer</span><span class="p">:</span>
+                    <span class="n">peer_filter</span> <span class="o">=</span> <span class="bp">None</span>
+                <span class="k">else</span><span class="p">:</span>
+                    <span class="n">peer_filter</span> <span class="o">=</span> <span class="n">name_to_id</span><span class="p">(</span><span class="n">peer</span><span class="p">)</span>
+                
+                <span class="n">filters</span><span class="p">[</span><span class="s">&#39;peer_id&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">peer_filter</span>
+            
+            <span class="n">filters</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">kw</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="ow">not</span> <span class="n">filters</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">fieldstuple</span><span class="p">:</span>
+                <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_nodes_cache</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_already_cached</span><span class="p">:</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">_already_cached</span> <span class="o">=</span> <span class="bp">True</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">_nodes_cache</span> <span class="o">=</span> <span class="n">_retry</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mcapi</span><span class="o">.</span><span class="n">GetNodes</span><span class="p">)(</span><span class="bp">self</span><span class="o">.</span><span class="n">auth</span><span class="p">)</span>
+                <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_nodes_cache</span><span class="p">:</span>
+                    <span class="k">while</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_nodes_cache</span><span class="p">:</span>
+                        <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span>
+                <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_nodes_cache</span>
+
+            <span class="k">return</span> <span class="n">_retry</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mcapi</span><span class="o">.</span><span class="n">GetNodes</span><span class="p">)(</span><span class="bp">self</span><span class="o">.</span><span class="n">auth</span><span class="p">,</span> <span class="n">filters</span><span class="p">,</span> <span class="o">*</span><span class="n">fieldstuple</span><span class="p">)</span>
+    </div>
+<div class="viewcode-block" id="PLCAPI.get_node_tags"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.get_node_tags">[docs]</a>    <span class="k">def</span> <span class="nf">get_node_tags</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node_tag_id</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">fields</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">):</span>
+        <span class="k">if</span> <span class="n">fields</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
+            <span class="n">fieldstuple</span> <span class="o">=</span> <span class="p">(</span><span class="n">fields</span><span class="p">,)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">fieldstuple</span> <span class="o">=</span> <span class="p">()</span>
+
+        <span class="k">if</span> <span class="n">node_tag_id</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">_retry</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mcapi</span><span class="o">.</span><span class="n">GetNodeTags</span><span class="p">)(</span><span class="bp">self</span><span class="o">.</span><span class="n">auth</span><span class="p">,</span> <span class="n">node_tag_id</span><span class="p">,</span>
+                    <span class="o">*</span><span class="n">fieldstuple</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">filters</span> <span class="o">=</span> <span class="n">kw</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">&#39;filters&#39;</span><span class="p">,{})</span>
+            <span class="n">filters</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">kw</span><span class="p">)</span>
+            <span class="k">return</span> <span class="n">_retry</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mcapi</span><span class="o">.</span><span class="n">GetNodeTags</span><span class="p">)(</span><span class="bp">self</span><span class="o">.</span><span class="n">auth</span><span class="p">,</span> <span class="n">filters</span><span class="p">,</span>
+                    <span class="o">*</span><span class="n">fieldstuple</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="PLCAPI.get_slice_tags"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.get_slice_tags">[docs]</a>    <span class="k">def</span> <span class="nf">get_slice_tags</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">slice_tag_id</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">fields</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">):</span>
+        <span class="k">if</span> <span class="n">fields</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
+            <span class="n">fieldstuple</span> <span class="o">=</span> <span class="p">(</span><span class="n">fields</span><span class="p">,)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">fieldstuple</span> <span class="o">=</span> <span class="p">()</span>
+
+        <span class="k">if</span> <span class="n">slice_tag_id</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">_retry</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mcapi</span><span class="o">.</span><span class="n">GetSliceTags</span><span class="p">)(</span><span class="bp">self</span><span class="o">.</span><span class="n">auth</span><span class="p">,</span> <span class="n">slice_tag_id</span><span class="p">,</span>
+                    <span class="o">*</span><span class="n">fieldstuple</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">filters</span> <span class="o">=</span> <span class="n">kw</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">&#39;filters&#39;</span><span class="p">,{})</span>
+            <span class="n">filters</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">kw</span><span class="p">)</span>
+            <span class="k">return</span> <span class="n">_retry</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mcapi</span><span class="o">.</span><span class="n">GetSliceTags</span><span class="p">)(</span><span class="bp">self</span><span class="o">.</span><span class="n">auth</span><span class="p">,</span> <span class="n">filters</span><span class="p">,</span>
+                    <span class="o">*</span><span class="n">fieldstuple</span><span class="p">)</span>
+    </div>
+<div class="viewcode-block" id="PLCAPI.get_interfaces"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.get_interfaces">[docs]</a>    <span class="k">def</span> <span class="nf">get_interfaces</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">interface_id_or_ip</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">fields</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">):</span>
+        <span class="k">if</span> <span class="n">fields</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
+            <span class="n">fieldstuple</span> <span class="o">=</span> <span class="p">(</span><span class="n">fields</span><span class="p">,)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">fieldstuple</span> <span class="o">=</span> <span class="p">()</span>
+
+        <span class="k">if</span> <span class="n">interface_id_or_ip</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">_retry</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mcapi</span><span class="o">.</span><span class="n">GetInterfaces</span><span class="p">)(</span><span class="bp">self</span><span class="o">.</span><span class="n">auth</span><span class="p">,</span>
+                    <span class="n">interface_id_or_ip</span><span class="p">,</span> <span class="o">*</span><span class="n">fieldstuple</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">filters</span> <span class="o">=</span> <span class="n">kw</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">&#39;filters&#39;</span><span class="p">,{})</span>
+            <span class="n">filters</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">kw</span><span class="p">)</span>
+            <span class="k">return</span> <span class="n">_retry</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mcapi</span><span class="o">.</span><span class="n">GetInterfaces</span><span class="p">)(</span><span class="bp">self</span><span class="o">.</span><span class="n">auth</span><span class="p">,</span> <span class="n">filters</span><span class="p">,</span>
+                    <span class="o">*</span><span class="n">fieldstuple</span><span class="p">)</span>
+        </div>
+<div class="viewcode-block" id="PLCAPI.get_slices"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.get_slices">[docs]</a>    <span class="k">def</span> <span class="nf">get_slices</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">slice_id_or_name</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">fields</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">):</span>
+        <span class="k">if</span> <span class="n">fields</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
+            <span class="n">fieldstuple</span> <span class="o">=</span> <span class="p">(</span><span class="n">fields</span><span class="p">,)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">fieldstuple</span> <span class="o">=</span> <span class="p">()</span>
+
+        <span class="k">if</span> <span class="n">slice_id_or_name</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">_retry</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mcapi</span><span class="o">.</span><span class="n">GetSlices</span><span class="p">)(</span><span class="bp">self</span><span class="o">.</span><span class="n">auth</span><span class="p">,</span> <span class="n">slice_id_or_name</span><span class="p">,</span>
+                    <span class="o">*</span><span class="n">fieldstuple</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">filters</span> <span class="o">=</span> <span class="n">kw</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">&#39;filters&#39;</span><span class="p">,{})</span>
+            <span class="n">filters</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">kw</span><span class="p">)</span>
+            <span class="k">return</span> <span class="n">_retry</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mcapi</span><span class="o">.</span><span class="n">GetSlices</span><span class="p">)(</span><span class="bp">self</span><span class="o">.</span><span class="n">auth</span><span class="p">,</span> <span class="n">filters</span><span class="p">,</span>
+                    <span class="o">*</span><span class="n">fieldstuple</span><span class="p">)</span>
+        </div>
+<div class="viewcode-block" id="PLCAPI.update_slice"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.update_slice">[docs]</a>    <span class="k">def</span> <span class="nf">update_slice</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">slice_id_or_name</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">_retry</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mcapi</span><span class="o">.</span><span class="n">UpdateSlice</span><span class="p">)(</span><span class="bp">self</span><span class="o">.</span><span class="n">auth</span><span class="p">,</span> <span class="n">slice_id_or_name</span><span class="p">,</span> <span class="n">kw</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="PLCAPI.delete_slice_node"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.delete_slice_node">[docs]</a>    <span class="k">def</span> <span class="nf">delete_slice_node</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">slice_id_or_name</span><span class="p">,</span> <span class="n">node_id_or_hostname</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">_retry</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mcapi</span><span class="o">.</span><span class="n">DeleteSliceFromNodes</span><span class="p">)(</span><span class="bp">self</span><span class="o">.</span><span class="n">auth</span><span class="p">,</span> <span class="n">slice_id_or_name</span><span class="p">,</span> <span class="n">node_id_or_hostname</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="PLCAPI.start_multicall"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.start_multicall">[docs]</a>    <span class="k">def</span> <span class="nf">start_multicall</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">threadlocal</span><span class="o">.</span><span class="n">mc</span> <span class="o">=</span> <span class="n">xmlrpclib</span><span class="o">.</span><span class="n">MultiCall</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mcapi</span><span class="p">)</span>
+    </div>
+<div class="viewcode-block" id="PLCAPI.finish_multicall"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.finish_multicall">[docs]</a>    <span class="k">def</span> <span class="nf">finish_multicall</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">mc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">threadlocal</span><span class="o">.</span><span class="n">mc</span>
+        <span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">threadlocal</span><span class="o">.</span><span class="n">mc</span>
+        <span class="k">return</span> <span class="n">_retry</span><span class="p">(</span><span class="n">mc</span><span class="p">)()</span>
+</div>
+<div class="viewcode-block" id="PLCAPI.get_slice_nodes"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.get_slice_nodes">[docs]</a>    <span class="k">def</span> <span class="nf">get_slice_nodes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">slicename</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_slices</span><span class="p">(</span><span class="n">slicename</span><span class="p">,</span> <span class="p">[</span><span class="s">&#39;node_ids&#39;</span><span class="p">])[</span><span class="mi">0</span><span class="p">][</span><span class="s">&#39;node_ids&#39;</span><span class="p">]</span>
+</div>
+<div class="viewcode-block" id="PLCAPI.add_slice_nodes"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.add_slice_nodes">[docs]</a>    <span class="k">def</span> <span class="nf">add_slice_nodes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">slicename</span><span class="p">,</span> <span class="n">nodes</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">update_slice</span><span class="p">(</span><span class="n">slicename</span><span class="p">,</span> <span class="n">nodes</span><span class="o">=</span><span class="n">nodes</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="PLCAPI.get_node_info"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.get_node_info">[docs]</a>    <span class="k">def</span> <span class="nf">get_node_info</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node_id</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">start_multicall</span><span class="p">()</span>
+        <span class="n">info</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_nodes</span><span class="p">(</span><span class="n">node_id</span><span class="p">)</span>
+        <span class="n">tags</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_node_tags</span><span class="p">(</span><span class="n">node_id</span><span class="o">=</span><span class="n">node_id</span><span class="p">,</span> <span class="n">fields</span><span class="o">=</span><span class="p">(</span><span class="s">&#39;tagname&#39;</span><span class="p">,</span><span class="s">&#39;value&#39;</span><span class="p">))</span>
+        <span class="n">info</span><span class="p">,</span> <span class="n">tags</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">finish_multicall</span><span class="p">()</span>
+        <span class="k">return</span> <span class="n">info</span><span class="p">,</span> <span class="n">tags</span>
+</div>
+<div class="viewcode-block" id="PLCAPI.get_slice_id"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.get_slice_id">[docs]</a>    <span class="k">def</span> <span class="nf">get_slice_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">slicename</span><span class="p">):</span>
+        <span class="n">slice_id</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="n">slices</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_slices</span><span class="p">(</span><span class="n">slicename</span><span class="p">,</span> <span class="n">fields</span><span class="o">=</span><span class="p">(</span><span class="s">&#39;slice_id&#39;</span><span class="p">,))</span>
+        <span class="k">if</span> <span class="n">slices</span><span class="p">:</span>
+            <span class="n">slice_id</span> <span class="o">=</span> <span class="n">slices</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s">&#39;slice_id&#39;</span><span class="p">]</span>
+
+        <span class="c"># If it wasn&#39;t found, don&#39;t remember this failure, keep trying</span>
+        <span class="k">return</span> <span class="n">slice_id</span>
+</div>
+<div class="viewcode-block" id="PLCAPI.get_slice_vnet_sys_tag"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.get_slice_vnet_sys_tag">[docs]</a>    <span class="k">def</span> <span class="nf">get_slice_vnet_sys_tag</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">slicename</span><span class="p">):</span>
+        <span class="n">slicetags</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_slice_tags</span><span class="p">(</span>
+            <span class="n">name</span> <span class="o">=</span> <span class="n">slicename</span><span class="p">,</span>
+            <span class="n">tagname</span> <span class="o">=</span> <span class="s">&#39;vsys_vnet&#39;</span><span class="p">,</span>
+            <span class="n">fields</span><span class="o">=</span><span class="p">(</span><span class="s">&#39;value&#39;</span><span class="p">,))</span>
+
+        <span class="k">if</span> <span class="n">slicetags</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">slicetags</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s">&#39;value&#39;</span><span class="p">]</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">return</span> <span class="bp">None</span>
+</div>
+<div class="viewcode-block" id="PLCAPI.blacklist_host"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.blacklist_host">[docs]</a>    <span class="k">def</span> <span class="nf">blacklist_host</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node_id</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_blacklist</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">node_id</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="PLCAPI.blacklisted"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.blacklisted">[docs]</a>    <span class="k">def</span> <span class="nf">blacklisted</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_blacklist</span> 
+</div>
+<div class="viewcode-block" id="PLCAPI.unblacklist_host"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.unblacklist_host">[docs]</a>    <span class="k">def</span> <span class="nf">unblacklist_host</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node_id</span><span class="p">):</span>
+        <span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">_blacklist</span><span class="p">[</span><span class="n">node_id</span><span class="p">]</span>
+</div>
+<div class="viewcode-block" id="PLCAPI.reserve_host"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.reserve_host">[docs]</a>    <span class="k">def</span> <span class="nf">reserve_host</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node_id</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_reserved</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">node_id</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="PLCAPI.reserved"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.reserved">[docs]</a>    <span class="k">def</span> <span class="nf">reserved</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_reserved</span>
+</div>
+<div class="viewcode-block" id="PLCAPI.unreserve_host"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.unreserve_host">[docs]</a>    <span class="k">def</span> <span class="nf">unreserve_host</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node_id</span><span class="p">):</span>
+        <span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">_reserved</span><span class="p">[</span><span class="n">node_id</span><span class="p">]</span>
+</div>
+<div class="viewcode-block" id="PLCAPI.release"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.release">[docs]</a>    <span class="k">def</span> <span class="nf">release</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">count</span> <span class="o">-=</span> <span class="mi">1</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">count</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+            <span class="n">blacklist</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_blacklist</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_blacklist</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_reserved</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ecobj</span><span class="o">.</span><span class="n">get_global</span><span class="p">(</span><span class="s">&#39;PlanetlabNode&#39;</span><span class="p">,</span> <span class="s">&#39;persist_blacklist&#39;</span><span class="p">):</span>
+                <span class="k">if</span> <span class="n">blacklist</span><span class="p">:</span>
+                    <span class="n">to_blacklist</span> <span class="o">=</span> <span class="nb">list</span><span class="p">()</span>
+                    <span class="n">hostnames</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_nodes</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">blacklist</span><span class="p">),</span> <span class="p">[</span><span class="s">&#39;hostname&#39;</span><span class="p">])</span>
+                    <span class="k">for</span> <span class="n">hostname</span> <span class="ow">in</span> <span class="n">hostnames</span><span class="p">:</span>
+                        <span class="n">to_blacklist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">hostname</span><span class="p">[</span><span class="s">&#39;hostname&#39;</span><span class="p">])</span>
+    
+                    <span class="n">nepi_home</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expanduser</span><span class="p">(</span><span class="s">&quot;~&quot;</span><span class="p">),</span> <span class="s">&quot;.nepi&quot;</span><span class="p">)</span>
+                    <span class="n">plblacklist_file</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">nepi_home</span><span class="p">,</span> <span class="s">&quot;plblacklist.txt&quot;</span><span class="p">)</span>
+    
+                    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">plblacklist_file</span><span class="p">,</span> <span class="s">&#39;w&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
+                        <span class="k">for</span> <span class="n">host</span> <span class="ow">in</span> <span class="n">to_blacklist</span><span class="p">:</span>
+                            <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s">&quot;</span><span class="si">%s</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">host</span><span class="p">)</span>
+    
+</div></div>
+<div class="viewcode-block" id="PLCAPIFactory"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPIFactory">[docs]</a><span class="k">class</span> <span class="nc">PLCAPIFactory</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot; </span>
+<span class="sd">    .. note::</span>
+
+<span class="sd">        It allows PlanetLab RMs sharing a same slice, to use a same plcapi instance,</span>
+<span class="sd">        and to sincronize blacklisted and reserved hosts.</span>
+
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="c"># use lock to avoid concurrent access to the Api list at the same times by 2 different threads</span>
+    <span class="n">_lock</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Lock</span><span class="p">()</span>
+    <span class="n">_apis</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
+
+    <span class="nd">@classmethod</span> 
+<div class="viewcode-block" id="PLCAPIFactory.get_api"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPIFactory.get_api">[docs]</a>    <span class="k">def</span> <span class="nf">get_api</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">pl_user</span><span class="p">,</span> <span class="n">pl_pass</span><span class="p">,</span> <span class="n">pl_host</span><span class="p">,</span>
+            <span class="n">pl_ptn</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">proxy</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Get existing PLCAPI instance</span>
+
+<span class="sd">        :param pl_user: Planelab user name (used for web login)</span>
+<span class="sd">        :type pl_user: str</span>
+<span class="sd">        :param pl_pass: Planetlab password (used for web login)</span>
+<span class="sd">        :type pl_pass: str</span>
+<span class="sd">        :param pl_host: Planetlab registry host (e.g. &quot;www.planet-lab.eu&quot;)</span>
+<span class="sd">        :type pl_host: str</span>
+<span class="sd">        :param pl_ptn: XMLRPC service pattern (e.g. https://%(hostname)s:443/PLCAPI/)</span>
+<span class="sd">        :type pl_ptn: str</span>
+<span class="sd">        :param proxy: Proxy service url</span>
+<span class="sd">        :type pl_ptn: str</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="n">pl_user</span> <span class="ow">and</span> <span class="n">pl_pass</span> <span class="ow">and</span> <span class="n">pl_host</span><span class="p">:</span>
+            <span class="n">key</span> <span class="o">=</span> <span class="n">cls</span><span class="o">.</span><span class="n">_make_key</span><span class="p">(</span><span class="n">pl_user</span><span class="p">,</span> <span class="n">pl_host</span><span class="p">)</span>
+            <span class="k">with</span> <span class="n">cls</span><span class="o">.</span><span class="n">_lock</span><span class="p">:</span>
+                <span class="n">api</span> <span class="o">=</span> <span class="n">cls</span><span class="o">.</span><span class="n">_apis</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
+                <span class="k">if</span> <span class="ow">not</span> <span class="n">api</span><span class="p">:</span>
+                    <span class="n">api</span> <span class="o">=</span> <span class="n">cls</span><span class="o">.</span><span class="n">create_api</span><span class="p">(</span><span class="n">pl_user</span><span class="p">,</span> <span class="n">pl_pass</span><span class="p">,</span> <span class="n">pl_host</span><span class="p">,</span> <span class="n">pl_ptn</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">proxy</span><span class="p">)</span>
+                <span class="k">else</span><span class="p">:</span>
+                    <span class="n">api</span><span class="o">.</span><span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>
+                <span class="k">return</span> <span class="n">api</span>
+        <span class="k">return</span> <span class="bp">None</span>
+</div>
+    <span class="nd">@classmethod</span> 
+<div class="viewcode-block" id="PLCAPIFactory.create_api"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPIFactory.create_api">[docs]</a>    <span class="k">def</span> <span class="nf">create_api</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">pl_user</span><span class="p">,</span> <span class="n">pl_pass</span><span class="p">,</span> <span class="n">pl_host</span><span class="p">,</span>
+            <span class="n">pl_ptn</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">proxy</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Create an PLCAPI instance</span>
+
+<span class="sd">        :param pl_user: Planelab user name (used for web login)</span>
+<span class="sd">        :type pl_user: str</span>
+<span class="sd">        :param pl_pass: Planetlab password (used for web login)</span>
+<span class="sd">        :type pl_pass: str</span>
+<span class="sd">        :param pl_host: Planetlab registry host (e.g. &quot;www.planet-lab.eu&quot;)</span>
+<span class="sd">        :type pl_host: str</span>
+<span class="sd">        :param pl_ptn: XMLRPC service pattern (e.g. https://%(hostname)s:443/PLCAPI/)</span>
+<span class="sd">        :type pl_ptn: str</span>
+<span class="sd">        :param proxy: Proxy service url</span>
+<span class="sd">        :type pl_ptn: str</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">api</span> <span class="o">=</span> <span class="n">PLCAPI</span><span class="p">(</span><span class="n">username</span> <span class="o">=</span> <span class="n">pl_user</span><span class="p">,</span> <span class="n">password</span> <span class="o">=</span> <span class="n">pl_pass</span><span class="p">,</span> <span class="n">hostname</span> <span class="o">=</span> <span class="n">pl_host</span><span class="p">,</span>
+            <span class="n">urlpattern</span> <span class="o">=</span> <span class="n">pl_ptn</span><span class="p">,</span> <span class="n">ec</span> <span class="o">=</span> <span class="n">ec</span><span class="p">,</span> <span class="n">proxy</span> <span class="o">=</span> <span class="n">proxy</span><span class="p">)</span>
+        <span class="n">key</span> <span class="o">=</span> <span class="n">cls</span><span class="o">.</span><span class="n">_make_key</span><span class="p">(</span><span class="n">pl_user</span><span class="p">,</span> <span class="n">pl_host</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_apis</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">api</span>
+        <span class="k">return</span> <span class="n">api</span>
+</div>
+    <span class="nd">@classmethod</span> 
+    <span class="k">def</span> <span class="nf">_make_key</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Hash the credentials in order to create a key</span>
+
+<span class="sd">        :param args: list of arguments used to create the hash (user, host, port, ...)</span>
+<span class="sd">        :type args: list of args</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">skey</span> <span class="o">=</span> <span class="s">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">args</span><span class="p">))</span>
+        <span class="k">return</span> <span class="n">hashlib</span><span class="o">.</span><span class="n">md5</span><span class="p">(</span><span class="n">skey</span><span class="p">)</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/planetlab/sfa_node.html b/doc/sphinx/_build/html/_modules/nepi/resources/planetlab/sfa_node.html
new file mode 100644 (file)
index 0000000..772422c
--- /dev/null
@@ -0,0 +1,762 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.planetlab.sfa_node &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.planetlab.sfa_node</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Lucia Guevgeozian &lt;lucia.guevgeozian_odizzio@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">ResourceManager</span><span class="p">,</span> <span class="n">clsinit_copy</span><span class="p">,</span> \
+        <span class="n">ResourceState</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.node</span> <span class="kn">import</span> <span class="n">LinuxNode</span>
+<span class="kn">from</span> <span class="nn">nepi.util.sfaapi</span> <span class="kn">import</span> <span class="n">SFAAPIFactory</span> 
+<span class="kn">from</span> <span class="nn">nepi.util.execfuncs</span> <span class="kn">import</span> <span class="n">lexec</span>
+<span class="kn">from</span> <span class="nn">nepi.util</span> <span class="kn">import</span> <span class="n">sshfuncs</span>
+
+<span class="kn">from</span> <span class="nn">random</span> <span class="kn">import</span> <span class="n">randint</span>
+<span class="kn">import</span> <span class="nn">re</span>
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">weakref</span>
+<span class="kn">import</span> <span class="nn">time</span>
+<span class="kn">import</span> <span class="nn">socket</span>
+<span class="kn">import</span> <span class="nn">threading</span>
+<span class="kn">import</span> <span class="nn">datetime</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="PlanetlabSfaNode"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.sfa_node.PlanetlabSfaNode">[docs]</a><span class="k">class</span> <span class="nc">PlanetlabSfaNode</span><span class="p">(</span><span class="n">LinuxNode</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;planetlab::sfa::Node&quot;</span>
+    <span class="n">_help</span> <span class="o">=</span> <span class="s">&quot;Controls a PlanetLab host accessible using a SSH key &quot;</span> \
+            <span class="s">&quot;and provisioned using SFA&quot;</span>
+    <span class="n">_platform</span> <span class="o">=</span> <span class="s">&quot;planetlab&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+
+        <span class="n">sfa_user</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;sfauser&quot;</span><span class="p">,</span> <span class="s">&quot;SFA user&quot;</span><span class="p">,</span>
+                    <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Credential</span><span class="p">)</span>
+
+        <span class="n">sfa_private_key</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;sfaPrivateKey&quot;</span><span class="p">,</span> <span class="s">&quot;SFA path to the private key </span><span class="se">\</span>
+<span class="s">                            used to generate the user credential&quot;</span><span class="p">)</span>
+
+        <span class="n">city</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;city&quot;</span><span class="p">,</span> <span class="s">&quot;Constrain location (city) during resource </span><span class="se">\</span>
+<span class="s">                discovery. May use wildcards.&quot;</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Filter</span><span class="p">)</span>
+
+        <span class="n">country</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;country&quot;</span><span class="p">,</span> <span class="s">&quot;Constrain location (country) during </span><span class="se">\</span>
+<span class="s">                    resource discovery. May use wildcards.&quot;</span><span class="p">,</span>
+                    <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Filter</span><span class="p">)</span>
+
+        <span class="n">region</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;region&quot;</span><span class="p">,</span> <span class="s">&quot;Constrain location (region) during </span><span class="se">\</span>
+<span class="s">                    resource discovery. May use wildcards.&quot;</span><span class="p">,</span>
+                    <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Filter</span><span class="p">)</span>
+
+        <span class="n">architecture</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;architecture&quot;</span><span class="p">,</span> <span class="s">&quot;Constrain architecture </span><span class="se">\</span>
+<span class="s">                        during resource discovery.&quot;</span><span class="p">,</span>
+                        <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Enumerate</span><span class="p">,</span>
+                        <span class="n">allowed</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;x86_64&quot;</span><span class="p">,</span> 
+                                    <span class="s">&quot;i386&quot;</span><span class="p">],</span>
+                        <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Filter</span><span class="p">)</span>
+
+        <span class="n">operating_system</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;operatingSystem&quot;</span><span class="p">,</span> <span class="s">&quot;Constrain operating </span><span class="se">\</span>
+<span class="s">                            system during resource discovery.&quot;</span><span class="p">,</span>
+                            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Enumerate</span><span class="p">,</span>
+                            <span class="n">allowed</span> <span class="o">=</span>  <span class="p">[</span><span class="s">&quot;f8&quot;</span><span class="p">,</span>
+                                        <span class="s">&quot;f12&quot;</span><span class="p">,</span>
+                                        <span class="s">&quot;f14&quot;</span><span class="p">,</span>
+                                        <span class="s">&quot;centos&quot;</span><span class="p">,</span>
+                                        <span class="s">&quot;other&quot;</span><span class="p">],</span>
+                            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Filter</span><span class="p">)</span>
+
+        <span class="n">min_reliability</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;minReliability&quot;</span><span class="p">,</span> <span class="s">&quot;Constrain reliability </span><span class="se">\</span>
+<span class="s">                            while picking PlanetLab nodes. Specifies a lower </span><span class="se">\</span>
+<span class="s">                            acceptable bound.&quot;</span><span class="p">,</span>
+                            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+                            <span class="nb">range</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">100</span><span class="p">),</span>
+                            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Filter</span><span class="p">)</span>
+
+        <span class="n">max_reliability</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;maxReliability&quot;</span><span class="p">,</span> <span class="s">&quot;Constrain reliability </span><span class="se">\</span>
+<span class="s">                            while picking PlanetLab nodes. Specifies an upper </span><span class="se">\</span>
+<span class="s">                            acceptable bound.&quot;</span><span class="p">,</span>
+                            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+                            <span class="nb">range</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">100</span><span class="p">),</span>
+                            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Filter</span><span class="p">)</span>
+
+        <span class="n">min_bandwidth</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;minBandwidth&quot;</span><span class="p">,</span> <span class="s">&quot;Constrain available </span><span class="se">\</span>
+<span class="s">                            bandwidth while picking PlanetLab nodes. </span><span class="se">\</span>
+<span class="s">                            Specifies a lower acceptable bound.&quot;</span><span class="p">,</span>
+                            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+                            <span class="nb">range</span> <span class="o">=</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="o">**</span><span class="mi">31</span><span class="p">),</span>
+                            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Filter</span><span class="p">)</span>
+
+        <span class="n">max_bandwidth</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;maxBandwidth&quot;</span><span class="p">,</span> <span class="s">&quot;Constrain available </span><span class="se">\</span>
+<span class="s">                            bandwidth while picking PlanetLab nodes. </span><span class="se">\</span>
+<span class="s">                            Specifies an upper acceptable bound.&quot;</span><span class="p">,</span>
+                            <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+                            <span class="nb">range</span> <span class="o">=</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="o">**</span><span class="mi">31</span><span class="p">),</span>
+                            <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Filter</span><span class="p">)</span>
+
+        <span class="n">min_load</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;minLoad&quot;</span><span class="p">,</span> <span class="s">&quot;Constrain node load average while </span><span class="se">\</span>
+<span class="s">                    picking PlanetLab nodes. Specifies a lower acceptable </span><span class="se">\</span>
+<span class="s">                    bound.&quot;</span><span class="p">,</span>
+                    <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+                    <span class="nb">range</span> <span class="o">=</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="o">**</span><span class="mi">31</span><span class="p">),</span>
+                    <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Filter</span><span class="p">)</span>
+
+        <span class="n">max_load</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;maxLoad&quot;</span><span class="p">,</span> <span class="s">&quot;Constrain node load average while </span><span class="se">\</span>
+<span class="s">                    picking PlanetLab nodes. Specifies an upper acceptable </span><span class="se">\</span>
+<span class="s">                    bound.&quot;</span><span class="p">,</span>
+                    <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+                    <span class="nb">range</span> <span class="o">=</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="o">**</span><span class="mi">31</span><span class="p">),</span>
+                    <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Filter</span><span class="p">)</span>
+
+        <span class="n">min_cpu</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;minCpu&quot;</span><span class="p">,</span> <span class="s">&quot;Constrain available cpu time while </span><span class="se">\</span>
+<span class="s">                    picking PlanetLab nodes. Specifies a lower acceptable </span><span class="se">\</span>
+<span class="s">                    bound.&quot;</span><span class="p">,</span>
+                    <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+                    <span class="nb">range</span> <span class="o">=</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">100</span><span class="p">),</span>
+                    <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Filter</span><span class="p">)</span>
+
+        <span class="n">max_cpu</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;maxCpu&quot;</span><span class="p">,</span> <span class="s">&quot;Constrain available cpu time while </span><span class="se">\</span>
+<span class="s">                    picking PlanetLab nodes. Specifies an upper acceptable </span><span class="se">\</span>
+<span class="s">                    bound.&quot;</span><span class="p">,</span>
+                    <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span>
+                    <span class="nb">range</span> <span class="o">=</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">100</span><span class="p">),</span>
+                    <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Filter</span><span class="p">)</span>
+
+        <span class="n">timeframe</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;timeframe&quot;</span><span class="p">,</span> <span class="s">&quot;Past time period in which to check</span><span class="se">\</span>
+<span class="s">                        information about the node. Values are year,month, </span><span class="se">\</span>
+<span class="s">                        week, latest&quot;</span><span class="p">,</span>
+                        <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;week&quot;</span><span class="p">,</span>
+                        <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Enumerate</span><span class="p">,</span>
+                        <span class="n">allowed</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;latest&quot;</span><span class="p">,</span>
+                                    <span class="s">&quot;week&quot;</span><span class="p">,</span>
+                                    <span class="s">&quot;month&quot;</span><span class="p">,</span>
+                                    <span class="s">&quot;year&quot;</span><span class="p">],</span>
+                        <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Filter</span><span class="p">)</span>
+
+        <span class="n">plblacklist</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;persist_blacklist&quot;</span><span class="p">,</span> <span class="s">&quot;Take into account the file plblacklist </span><span class="se">\</span>
+<span class="s">                        in the user&#39;s home directory under .nepi directory. This file </span><span class="se">\</span>
+<span class="s">                        contains a list of PL nodes to blacklist, and at the end </span><span class="se">\</span>
+<span class="s">                        of the experiment execution the new blacklisted nodes are added.&quot;</span><span class="p">,</span>
+                    <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+                    <span class="n">default</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+                    <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Global</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">sfa_user</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">sfa_private_key</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">city</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">country</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">region</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">architecture</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">operating_system</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">min_reliability</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">max_reliability</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">min_bandwidth</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">max_bandwidth</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">min_load</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">max_load</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">min_cpu</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">max_cpu</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">timeframe</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">plblacklist</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">PlanetlabSfaNode</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        
+        <span class="bp">self</span><span class="o">.</span><span class="n">_ecobj</span> <span class="o">=</span> <span class="n">weakref</span><span class="o">.</span><span class="n">ref</span><span class="p">(</span><span class="n">ec</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_sfaapi</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_node_to_provision</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_slicenode</span> <span class="o">=</span> <span class="bp">False</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_hostname</span> <span class="o">=</span> <span class="bp">False</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;gateway&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;gatewayUser&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;gateway&quot;</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;gatewayUser&quot;</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
+
+        <span class="c"># Blacklist file for PL nodes</span>
+        <span class="n">nepi_home</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expanduser</span><span class="p">(</span><span class="s">&quot;~&quot;</span><span class="p">),</span> <span class="s">&quot;.nepi&quot;</span><span class="p">)</span>
+        <span class="n">plblacklist_file</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">nepi_home</span><span class="p">,</span> <span class="s">&quot;plblacklist.txt&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">plblacklist_file</span><span class="p">):</span>
+            <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="n">nepi_home</span><span class="p">):</span>
+                <span class="nb">open</span><span class="p">(</span><span class="n">plblacklist_file</span><span class="p">,</span> <span class="s">&#39;w&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="n">nepi_home</span><span class="p">)</span>
+                <span class="nb">open</span><span class="p">(</span><span class="n">plblacklist_file</span><span class="p">,</span> <span class="s">&#39;w&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+    <span class="k">def</span> <span class="nf">_skip_provision</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">sfa_user</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;sfauser&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">sfa_user</span><span class="p">:</span>
+            <span class="k">return</span> <span class="bp">True</span>
+        <span class="k">else</span><span class="p">:</span> <span class="k">return</span> <span class="bp">False</span>
+    
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="PlanetlabSfaNode.sfaapi"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.sfa_node.PlanetlabSfaNode.sfaapi">[docs]</a>    <span class="k">def</span> <span class="nf">sfaapi</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Property to instanciate the SFA API based in sfi client.</span>
+<span class="sd">        For each SFA method called this instance is used.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_sfaapi</span><span class="p">:</span>
+            <span class="n">sfa_user</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;sfauser&quot;</span><span class="p">)</span>
+            <span class="n">sfa_sm</span> <span class="o">=</span> <span class="s">&quot;http://sfa3.planet-lab.eu:12346/&quot;</span>
+            <span class="n">sfa_auth</span> <span class="o">=</span> <span class="s">&#39;.&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">sfa_user</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">)[:</span><span class="mi">2</span><span class="p">])</span>
+            <span class="n">sfa_registry</span> <span class="o">=</span> <span class="s">&quot;http://sfa3.planet-lab.eu:12345/&quot;</span>
+            <span class="n">sfa_private_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;sfaPrivateKey&quot;</span><span class="p">)</span>
+
+            <span class="n">_sfaapi</span> <span class="o">=</span> <span class="n">SFAAPIFactory</span><span class="o">.</span><span class="n">get_api</span><span class="p">(</span><span class="n">sfa_user</span><span class="p">,</span> <span class="n">sfa_auth</span><span class="p">,</span> 
+                <span class="n">sfa_registry</span><span class="p">,</span> <span class="n">sfa_sm</span><span class="p">,</span> <span class="n">sfa_private_key</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ecobj</span><span class="p">())</span>
+
+            <span class="k">if</span> <span class="ow">not</span> <span class="n">_sfaapi</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">fail_sfaapi</span><span class="p">()</span>
+    
+            <span class="bp">self</span><span class="o">.</span><span class="n">_sfaapi</span> <span class="o">=</span> <span class="n">weakref</span><span class="o">.</span><span class="n">ref</span><span class="p">(</span><span class="n">_sfaapi</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_sfaapi</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="PlanetlabSfaNode.do_discover"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.sfa_node.PlanetlabSfaNode.do_discover">[docs]</a>    <span class="k">def</span> <span class="nf">do_discover</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Based on the attributes defined by the user, discover the suitable </span>
+<span class="sd">        nodes for provision.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_skip_provision</span><span class="p">():</span>
+            <span class="nb">super</span><span class="p">(</span><span class="n">PlanetlabSfaNode</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+            <span class="k">return</span>
+
+        <span class="n">nodes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sfaapi</span><span class="o">.</span><span class="n">get_resources_hrn</span><span class="p">()</span>
+
+        <span class="n">hostname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_hostname</span><span class="p">()</span>
+        <span class="k">if</span> <span class="n">hostname</span><span class="p">:</span>
+            <span class="c"># the user specified one particular node to be provisioned</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_hostname</span> <span class="o">=</span> <span class="bp">True</span>
+            <span class="n">host_hrn</span> <span class="o">=</span> <span class="n">nodes</span><span class="p">[</span><span class="n">hostname</span><span class="p">]</span>
+
+            <span class="c"># check that the node is not blacklisted or being provisioned</span>
+            <span class="c"># by other RM</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_blacklisted</span><span class="p">(</span><span class="n">host_hrn</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_reserved</span><span class="p">(</span><span class="n">host_hrn</span><span class="p">):</span>
+                <span class="c"># Node in reservation</span>
+                <span class="n">ping_ok</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_do_ping</span><span class="p">(</span><span class="n">hostname</span><span class="p">)</span>
+                <span class="k">if</span> <span class="ow">not</span> <span class="n">ping_ok</span><span class="p">:</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">_blacklist_node</span><span class="p">(</span><span class="n">host_hrn</span><span class="p">)</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">fail_node_not_alive</span><span class="p">(</span><span class="n">hostname</span><span class="p">)</span>
+                <span class="k">else</span><span class="p">:</span>
+                    <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_if_in_slice</span><span class="p">([</span><span class="n">host_hrn</span><span class="p">]):</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;The node </span><span class="si">%s</span><span class="s"> is already in the slice&quot;</span> <span class="o">%</span> <span class="n">hostname</span><span class="p">)</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">_slicenode</span> <span class="o">=</span> <span class="bp">True</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">_node_to_provision</span> <span class="o">=</span> <span class="n">host_hrn</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">fail_node_not_available</span><span class="p">(</span><span class="n">hostname</span><span class="p">)</span>
+            <span class="nb">super</span><span class="p">(</span><span class="n">PlanetlabSfaNode</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">hosts_hrn</span> <span class="o">=</span> <span class="n">nodes</span><span class="o">.</span><span class="n">values</span><span class="p">()</span>
+            <span class="n">nodes_inslice</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_if_in_slice</span><span class="p">(</span><span class="n">hosts_hrn</span><span class="p">)</span>
+            <span class="n">nodes_not_inslice</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">hosts_hrn</span><span class="p">)</span> <span class="o">-</span> <span class="nb">set</span><span class="p">(</span><span class="n">nodes_inslice</span><span class="p">))</span>
+            <span class="n">host_hrn</span> <span class="o">=</span> <span class="bp">None</span>
+            <span class="k">if</span> <span class="n">nodes_inslice</span><span class="p">:</span>
+                <span class="n">host_hrn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_choose_random_node</span><span class="p">(</span><span class="n">nodes</span><span class="p">,</span> <span class="n">nodes_inslice</span><span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_slicenode</span> <span class="o">=</span> <span class="bp">True</span>          
+
+            <span class="k">if</span> <span class="ow">not</span> <span class="n">host_hrn</span><span class="p">:</span>
+                <span class="c"># Either there were no matching nodes in the user&#39;s slice, or</span>
+                <span class="c"># the nodes in the slice  were blacklisted or being provisioned</span>
+                <span class="c"># by other RM. Note nodes_not_inslice is never empty</span>
+                <span class="n">host_hrn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_choose_random_node</span><span class="p">(</span><span class="n">nodes</span><span class="p">,</span> <span class="n">nodes_not_inslice</span><span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_slicenode</span> <span class="o">=</span> <span class="bp">False</span>
+
+            <span class="k">if</span> <span class="n">host_hrn</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_node_to_provision</span> <span class="o">=</span> <span class="n">host_hrn</span>
+                <span class="k">try</span><span class="p">:</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">_set_hostname_attr</span><span class="p">(</span><span class="n">host_hrn</span><span class="p">)</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot; Selected node to provision &quot;</span><span class="p">)</span>
+                    <span class="nb">super</span><span class="p">(</span><span class="n">PlanetlabSfaNode</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+                <span class="k">except</span><span class="p">:</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">_blacklist_node</span><span class="p">(</span><span class="n">host_hrn</span><span class="p">)</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+            <span class="k">else</span><span class="p">:</span>
+               <span class="bp">self</span><span class="o">.</span><span class="n">fail_not_enough_nodes</span><span class="p">()</span> 
+    </div>
+    <span class="k">def</span> <span class="nf">_blacklisted</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">host_hrn</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Check in the SFA API that the node is not in the blacklist.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">sfaapi</span><span class="o">.</span><span class="n">blacklisted</span><span class="p">(</span><span class="n">host_hrn</span><span class="p">):</span>
+           <span class="k">return</span> <span class="bp">True</span>
+        <span class="k">return</span> <span class="bp">False</span>
+
+    <span class="k">def</span> <span class="nf">_reserved</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">host_hrn</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Check in the SFA API that the node is not in the reserved</span>
+<span class="sd">        list.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">sfaapi</span><span class="o">.</span><span class="n">reserved</span><span class="p">(</span><span class="n">host_hrn</span><span class="p">):</span>
+            <span class="k">return</span> <span class="bp">True</span>
+        <span class="k">return</span> <span class="bp">False</span>
+            
+<div class="viewcode-block" id="PlanetlabSfaNode.do_provision"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.sfa_node.PlanetlabSfaNode.do_provision">[docs]</a>    <span class="k">def</span> <span class="nf">do_provision</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Add node to user&#39;s slice and verifing that the node is functioning</span>
+<span class="sd">        correctly. Check ssh, file system.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_skip_provision</span><span class="p">():</span>
+            <span class="nb">super</span><span class="p">(</span><span class="n">PlanetlabSfaNode</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_provision</span><span class="p">()</span>
+            <span class="k">return</span>
+
+        <span class="n">provision_ok</span> <span class="o">=</span> <span class="bp">False</span>
+        <span class="n">ssh_ok</span> <span class="o">=</span> <span class="bp">False</span>
+        <span class="n">proc_ok</span> <span class="o">=</span> <span class="bp">False</span>
+        <span class="n">timeout</span> <span class="o">=</span> <span class="mi">1800</span>
+
+        <span class="k">while</span> <span class="ow">not</span> <span class="n">provision_ok</span><span class="p">:</span>
+            <span class="n">node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_node_to_provision</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_slicenode</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_add_node_to_slice</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+            
+                <span class="c"># check ssh connection</span>
+                <span class="n">t</span> <span class="o">=</span> <span class="mi">0</span> 
+                <span class="k">while</span> <span class="n">t</span> <span class="o">&lt;</span> <span class="n">timeout</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">ssh_ok</span><span class="p">:</span>
+
+                    <span class="n">cmd</span> <span class="o">=</span> <span class="s">&#39;echo </span><span class="se">\&#39;</span><span class="s">GOOD NODE</span><span class="se">\&#39;</span><span class="s">&#39;</span>
+                    <span class="p">((</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span><span class="p">)</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">cmd</span><span class="p">)</span>
+                    <span class="k">if</span> <span class="n">out</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&quot;GOOD NODE&quot;</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">:</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span> <span class="s">&quot;No SSH connection, waiting 60s&quot;</span> <span class="p">)</span>
+                        <span class="n">t</span> <span class="o">=</span> <span class="n">t</span> <span class="o">+</span> <span class="mi">60</span>
+                        <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">60</span><span class="p">)</span>
+                        <span class="k">continue</span>
+                    <span class="k">else</span><span class="p">:</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span> <span class="s">&quot;SSH OK&quot;</span> <span class="p">)</span>
+                        <span class="n">ssh_ok</span> <span class="o">=</span> <span class="bp">True</span>
+                        <span class="k">continue</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="n">cmd</span> <span class="o">=</span> <span class="s">&#39;echo </span><span class="se">\&#39;</span><span class="s">GOOD NODE</span><span class="se">\&#39;</span><span class="s">&#39;</span>
+                <span class="p">((</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span><span class="p">)</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">cmd</span><span class="p">)</span>
+                <span class="k">if</span> <span class="ow">not</span> <span class="n">out</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&quot;GOOD NODE&quot;</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">:</span>
+                    <span class="n">ssh_ok</span> <span class="o">=</span> <span class="bp">True</span>
+
+            <span class="k">if</span> <span class="ow">not</span> <span class="n">ssh_ok</span><span class="p">:</span>
+                <span class="c"># the timeout was reach without establishing ssh connection</span>
+                <span class="c"># the node is blacklisted, deleted from the slice, and a new</span>
+                <span class="c"># node to provision is discovered</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s">&quot; Could not SSH login &quot;</span><span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_blacklist_node</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+                <span class="k">continue</span>
+            
+            <span class="c"># check /proc directory is mounted (ssh_ok = True)</span>
+            <span class="c"># and file system is not read only</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="n">cmd</span> <span class="o">=</span> <span class="s">&#39;mount |grep proc&#39;</span>
+                <span class="p">((</span><span class="n">out1</span><span class="p">,</span> <span class="n">err1</span><span class="p">),</span> <span class="n">proc1</span><span class="p">)</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">cmd</span><span class="p">)</span>
+                <span class="n">cmd</span> <span class="o">=</span> <span class="s">&#39;touch /tmp/tmpfile; rm /tmp/tmpfile&#39;</span>
+                <span class="p">((</span><span class="n">out2</span><span class="p">,</span> <span class="n">err2</span><span class="p">),</span> <span class="n">proc2</span><span class="p">)</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">cmd</span><span class="p">)</span>
+                <span class="k">if</span> <span class="n">out1</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&quot;/proc type proc&quot;</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">0</span> <span class="ow">or</span> \
+                    <span class="s">&quot;Read-only file system&quot;</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="n">err2</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s">&quot; Corrupted file system &quot;</span><span class="p">)</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">_blacklist_node</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+                    <span class="k">continue</span>
+            
+                <span class="k">else</span><span class="p">:</span>
+                    <span class="n">provision_ok</span> <span class="o">=</span> <span class="bp">True</span>
+                    <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;hostname&#39;</span><span class="p">):</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">_set_hostname_attr</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>            
+                    <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot; Node provisioned &quot;</span><span class="p">)</span>            
+            
+        <span class="nb">super</span><span class="p">(</span><span class="n">PlanetlabSfaNode</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_provision</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="PlanetlabSfaNode.do_release"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.sfa_node.PlanetlabSfaNode.do_release">[docs]</a>    <span class="k">def</span> <span class="nf">do_release</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">PlanetlabSfaNode</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_release</span><span class="p">()</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">RELEASED</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_skip_provision</span><span class="p">():</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot; Releasing SFA API &quot;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">sfaapi</span><span class="o">.</span><span class="n">release</span><span class="p">()</span>
+
+<span class="c">#    def _filter_based_on_attributes(self):</span>
+<span class="c">#        &quot;&quot;&quot;</span>
+<span class="c">#        Retrive the list of nodes hrn that match user&#39;s constraints </span>
+<span class="c">#        &quot;&quot;&quot;</span>
+<span class="c">#        # Map user&#39;s defined attributes with tagnames of PlanetLab</span>
+<span class="c">#        timeframe = self.get(&quot;timeframe&quot;)[0]</span>
+<span class="c">#        attr_to_tags = {</span>
+<span class="c">#            &#39;city&#39; : &#39;city&#39;,</span>
+<span class="c">#            &#39;country&#39; : &#39;country&#39;,</span>
+<span class="c">#            &#39;region&#39; : &#39;region&#39;,</span>
+<span class="c">#            &#39;architecture&#39; : &#39;arch&#39;,</span>
+<span class="c">#            &#39;operatingSystem&#39; : &#39;fcdistro&#39;,</span>
+<span class="c">#            &#39;minReliability&#39; : &#39;reliability%s&#39; % timeframe,</span>
+<span class="c">#            &#39;maxReliability&#39; : &#39;reliability%s&#39; % timeframe,</span>
+<span class="c">#            &#39;minBandwidth&#39; : &#39;bw%s&#39; % timeframe,</span>
+<span class="c">#            &#39;maxBandwidth&#39; : &#39;bw%s&#39; % timeframe,</span>
+<span class="c">#            &#39;minLoad&#39; : &#39;load%s&#39; % timeframe,</span>
+<span class="c">#            &#39;maxLoad&#39; : &#39;load%s&#39; % timeframe,</span>
+<span class="c">#            &#39;minCpu&#39; : &#39;cpu%s&#39; % timeframe,</span>
+<span class="c">#            &#39;maxCpu&#39; : &#39;cpu%s&#39; % timeframe,</span>
+<span class="c">#        }</span>
+<span class="c">#        </span>
+<span class="c">#        nodes_hrn = []</span>
+<span class="c">#        filters = {}</span>
+<span class="c">#</span>
+<span class="c">#        for attr_name, attr_obj in self._attrs.iteritems():</span>
+<span class="c">#            attr_value = self.get(attr_name)</span>
+<span class="c">#            </span>
+<span class="c">#            if attr_value is not None and attr_obj.has_flag(Flags.Filter) and \</span>
+<span class="c">#                attr_name != &#39;timeframe&#39;:</span>
+<span class="c">#        </span>
+<span class="c">#                attr_tag = attr_to_tags[attr_name]</span>
+<span class="c">#                filters[&#39;tagname&#39;] = attr_tag</span>
+<span class="c">#</span>
+<span class="c">#                # filter nodes by fixed constraints e.g. operating system</span>
+<span class="c">#                if not &#39;min&#39; in attr_name and not &#39;max&#39; in attr_name:</span>
+<span class="c">#                    filters[&#39;value&#39;] = attr_value</span>
+<span class="c">#                    nodes_hrn = self._filter_by_fixed_attr(filters, nodes_hrn)</span>
+<span class="c">#</span>
+<span class="c">#                # filter nodes by range constraints e.g. max bandwidth</span>
+<span class="c">#                elif (&#39;min&#39; or &#39;max&#39;) in attr_name:</span>
+<span class="c">#                    nodes_hrn = self._filter_by_range_attr(attr_name, attr_value, filters, nodes_hrn)</span>
+<span class="c">#</span>
+<span class="c">#        if not filters:</span>
+<span class="c">#            nodes = self.sfaapi.get_resources_hrn()</span>
+<span class="c">#            for node in nodes:</span>
+<span class="c">#                nodes_hrn.append(node[node.key()])</span>
+<span class="c">#        return nodes_hrn</span>
+<span class="c">#                    </span>
+<span class="c">#    def _filter_by_fixed_attr(self, filters, nodes_hrn):</span>
+<span class="c">#        &quot;&quot;&quot;</span>
+<span class="c">#        Query SFA API for nodes matching fixed attributes defined by the</span>
+<span class="c">#        user</span>
+<span class="c">#        &quot;&quot;&quot;</span>
+<span class="c">#        pass</span>
+<span class="c">##        node_tags = self.sfaapi.get_resources_tags(filters)</span>
+<span class="c">##        if node_tags is not None:</span>
+<span class="c">##</span>
+<span class="c">##            if len(nodes_id) == 0:</span>
+<span class="c">##                # first attribute being matched</span>
+<span class="c">##                for node_tag in node_tags:</span>
+<span class="c">##                    nodes_id.append(node_tag[&#39;node_id&#39;])</span>
+<span class="c">##            else:</span>
+<span class="c">##                # remove the nodes ids that don&#39;t match the new attribute</span>
+<span class="c">##                # that is being match</span>
+<span class="c">##</span>
+<span class="c">##                nodes_id_tmp = []</span>
+<span class="c">##                for node_tag in node_tags:</span>
+<span class="c">##                    if node_tag[&#39;node_id&#39;] in nodes_id:</span>
+<span class="c">##                        nodes_id_tmp.append(node_tag[&#39;node_id&#39;])</span>
+<span class="c">##</span>
+<span class="c">##                if len(nodes_id_tmp):</span>
+<span class="c">##                    nodes_id = set(nodes_id) &amp; set(nodes_id_tmp)</span>
+<span class="c">##                else:</span>
+<span class="c">##                    # no node from before match the new constraint</span>
+<span class="c">##                    self.fail_discovery()</span>
+<span class="c">##        else:</span>
+<span class="c">##            # no nodes match the filter applied</span>
+<span class="c">##            self.fail_discovery()</span>
+<span class="c">##</span>
+<span class="c">##        return nodes_id</span>
+<span class="c">#</span>
+<span class="c">#    def _filter_by_range_attr(self, attr_name, attr_value, filters, nodes_id):</span>
+<span class="c">#        &quot;&quot;&quot;</span>
+<span class="c">#        Query PLCAPI for nodes ids matching attributes defined in a certain</span>
+<span class="c">#        range, by the user</span>
+<span class="c">#        &quot;&quot;&quot;</span>
+<span class="c">#        pass</span>
+<span class="c">##        node_tags = self.plapi.get_node_tags(filters)</span>
+<span class="c">##        if node_tags:</span>
+<span class="c">##            </span>
+<span class="c">##            if len(nodes_id) == 0:</span>
+<span class="c">##                # first attribute being matched</span>
+<span class="c">##                for node_tag in node_tags:</span>
+<span class="c">## </span>
+<span class="c">##                   # check that matches the min or max restriction</span>
+<span class="c">##                    if &#39;min&#39; in attr_name and node_tag[&#39;value&#39;] != &#39;n/a&#39; and \</span>
+<span class="c">##                        float(node_tag[&#39;value&#39;]) &gt; attr_value:</span>
+<span class="c">##                        nodes_id.append(node_tag[&#39;node_id&#39;])</span>
+<span class="c">##</span>
+<span class="c">##                    elif &#39;max&#39; in attr_name and node_tag[&#39;value&#39;] != &#39;n/a&#39; and \</span>
+<span class="c">##                        float(node_tag[&#39;value&#39;]) &lt; attr_value:</span>
+<span class="c">##                        nodes_id.append(node_tag[&#39;node_id&#39;])</span>
+<span class="c">##            else:</span>
+<span class="c">##</span>
+<span class="c">##                # remove the nodes ids that don&#39;t match the new attribute</span>
+<span class="c">##                # that is being match</span>
+<span class="c">##                nodes_id_tmp = []</span>
+<span class="c">##                for node_tag in node_tags:</span>
+<span class="c">##</span>
+<span class="c">##                    # check that matches the min or max restriction and was a</span>
+<span class="c">##                    # matching previous filters</span>
+<span class="c">##                    if &#39;min&#39; in attr_name and node_tag[&#39;value&#39;] != &#39;n/a&#39; and \</span>
+<span class="c">##                        float(node_tag[&#39;value&#39;]) &gt; attr_value and \</span>
+<span class="c">##                        node_tag[&#39;node_id&#39;] in nodes_id:</span>
+<span class="c">##                        nodes_id_tmp.append(node_tag[&#39;node_id&#39;])</span>
+<span class="c">##</span>
+<span class="c">##                    elif &#39;max&#39; in attr_name and node_tag[&#39;value&#39;] != &#39;n/a&#39; and \</span>
+<span class="c">##                        float(node_tag[&#39;value&#39;]) &lt; attr_value and \</span>
+<span class="c">##                        node_tag[&#39;node_id&#39;] in nodes_id:</span>
+<span class="c">##                        nodes_id_tmp.append(node_tag[&#39;node_id&#39;])</span>
+<span class="c">##</span>
+<span class="c">##                if len(nodes_id_tmp):</span>
+<span class="c">##                    nodes_id = set(nodes_id) &amp; set(nodes_id_tmp)</span>
+<span class="c">##                else:</span>
+<span class="c">##                    # no node from before match the new constraint</span>
+<span class="c">##                    self.fail_discovery()</span>
+<span class="c">##</span>
+<span class="c">##        else: #TODO CHECK</span>
+<span class="c">##            # no nodes match the filter applied</span>
+<span class="c">##            self.fail_discovery()</span>
+<span class="c">##</span>
+<span class="c">##        return nodes_id</span>
+        </div>
+    <span class="k">def</span> <span class="nf">_choose_random_node</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nodes</span><span class="p">,</span> <span class="n">hosts_hrn</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        From the possible nodes for provision, choose randomly to decrese the</span>
+<span class="sd">        probability of different RMs choosing the same node for provision</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">hosts_hrn</span><span class="p">)</span>
+        <span class="k">while</span> <span class="n">size</span><span class="p">:</span>
+            <span class="n">size</span> <span class="o">=</span> <span class="n">size</span> <span class="o">-</span> <span class="mi">1</span>
+            <span class="n">index</span> <span class="o">=</span> <span class="n">randint</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span>
+            <span class="n">host_hrn</span> <span class="o">=</span> <span class="n">hosts_hrn</span><span class="p">[</span><span class="n">index</span><span class="p">]</span>
+            <span class="n">hosts_hrn</span><span class="p">[</span><span class="n">index</span><span class="p">]</span> <span class="o">=</span> <span class="n">hosts_hrn</span><span class="p">[</span><span class="n">size</span><span class="p">]</span>
+
+            <span class="c"># check the node is not blacklisted or being provision by other RM</span>
+            <span class="c"># and perform ping to check that is really alive</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_blacklisted</span><span class="p">(</span><span class="n">host_hrn</span><span class="p">):</span>
+                <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_reserved</span><span class="p">(</span><span class="n">host_hrn</span><span class="p">):</span>
+                    <span class="k">print</span> <span class="bp">self</span><span class="o">.</span><span class="n">sfaapi</span><span class="o">.</span><span class="n">_reserved</span> <span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">guid</span>
+                    <span class="k">for</span> <span class="n">hostname</span><span class="p">,</span> <span class="n">hrn</span> <span class="ow">in</span> <span class="n">nodes</span><span class="o">.</span><span class="n">iteritems</span><span class="p">():</span>
+                        <span class="k">if</span> <span class="n">host_hrn</span> <span class="o">==</span> <span class="n">hrn</span><span class="p">:</span>
+                            <span class="k">print</span> <span class="s">&#39;hostname&#39;</span> <span class="p">,</span><span class="n">hostname</span>
+                            <span class="n">ping_ok</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_do_ping</span><span class="p">(</span><span class="n">hostname</span><span class="p">)</span>
+                
+                    <span class="k">if</span> <span class="ow">not</span> <span class="n">ping_ok</span><span class="p">:</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">_set_hostname_attr</span><span class="p">(</span><span class="n">hostname</span><span class="p">)</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s">&quot; Node not responding PING &quot;</span><span class="p">)</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">_blacklist_node</span><span class="p">(</span><span class="n">host_hrn</span><span class="p">)</span>
+                    <span class="k">else</span><span class="p">:</span>
+                        <span class="c"># discovered node for provision, added to provision list</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">_node_to_provision</span> <span class="o">=</span> <span class="n">host_hrn</span>
+                        <span class="k">return</span> <span class="n">host_hrn</span>
+
+<span class="c">#    def _get_nodes_id(self, filters=None):</span>
+<span class="c">#        return self.plapi.get_nodes(filters, fields=[&#39;node_id&#39;])</span>
+<span class="c">#</span>
+    <span class="k">def</span> <span class="nf">_add_node_to_slice</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">host_hrn</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Add node to slice, using SFA API.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot; Adding node to slice &quot;</span><span class="p">)</span>
+        <span class="n">slicename</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;username&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;_&#39;</span><span class="p">,</span> <span class="s">&#39;.&#39;</span><span class="p">)</span>
+        <span class="n">slicename</span> <span class="o">=</span> <span class="s">&#39;ple.&#39;</span> <span class="o">+</span> <span class="n">slicename</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">sfaapi</span><span class="o">.</span><span class="n">add_resource_to_slice</span><span class="p">(</span><span class="n">slicename</span><span class="p">,</span> <span class="n">host_hrn</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_delete_from_slice</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Delete every node from slice, using SFA API.</span>
+<span class="sd">        Sfi client doesn&#39;t work for particular node urns.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s">&quot; Deleting node from slice &quot;</span><span class="p">)</span>
+        <span class="n">slicename</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;username&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;_&#39;</span><span class="p">,</span> <span class="s">&#39;.&#39;</span><span class="p">)</span>
+        <span class="n">slicename</span> <span class="o">=</span> <span class="s">&#39;ple.&#39;</span> <span class="o">+</span> <span class="n">slicename</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">sfaapi</span><span class="o">.</span><span class="n">remove_all_from_slice</span><span class="p">(</span><span class="n">slicename</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_get_hostname</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Get the attribute hostname.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">hostname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;hostname&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">hostname</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">hostname</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">return</span> <span class="bp">None</span>
+
+    <span class="k">def</span> <span class="nf">_set_hostname_attr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Query SFAAPI for the hostname of a certain host hrn and sets the</span>
+<span class="sd">        attribute hostname, it will over write the previous value.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">hosts_hrn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sfaapi</span><span class="o">.</span><span class="n">get_resources_hrn</span><span class="p">()</span>
+        <span class="k">for</span> <span class="n">hostname</span><span class="p">,</span> <span class="n">hrn</span>  <span class="ow">in</span> <span class="n">hosts_hrn</span><span class="o">.</span><span class="n">iteritems</span><span class="p">():</span>
+            <span class="k">if</span> <span class="n">hrn</span> <span class="o">==</span> <span class="n">node</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;hostname&quot;</span><span class="p">,</span> <span class="n">hostname</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_check_if_in_slice</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">hosts_hrn</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Check using SFA API if any host hrn from hosts_hrn is in the user&#39;s</span>
+<span class="sd">        slice.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">slicename</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;username&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;_&#39;</span><span class="p">,</span> <span class="s">&#39;.&#39;</span><span class="p">)</span>
+        <span class="n">slicename</span> <span class="o">=</span> <span class="s">&#39;ple.&#39;</span> <span class="o">+</span> <span class="n">slicename</span>
+        <span class="n">slice_nodes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sfaapi</span><span class="o">.</span><span class="n">get_slice_resources</span><span class="p">(</span><span class="n">slicename</span><span class="p">)[</span><span class="s">&#39;resource&#39;</span><span class="p">]</span>
+        <span class="k">if</span> <span class="n">slice_nodes</span><span class="p">:</span>
+            <span class="n">slice_nodes_hrn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sfaapi</span><span class="o">.</span><span class="n">get_resources_hrn</span><span class="p">(</span><span class="n">slice_nodes</span><span class="p">)</span><span class="o">.</span><span class="n">values</span><span class="p">()</span>
+        <span class="k">else</span><span class="p">:</span> <span class="n">slice_nodes_hrn</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="n">nodes_inslice</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">hosts_hrn</span><span class="p">)</span> <span class="o">&amp;</span> <span class="nb">set</span><span class="p">(</span><span class="n">slice_nodes_hrn</span><span class="p">))</span>
+        <span class="k">return</span> <span class="n">nodes_inslice</span>
+
+    <span class="k">def</span> <span class="nf">_do_ping</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">hostname</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Perform ping command on node&#39;s IP matching hostname.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">ping_ok</span> <span class="o">=</span> <span class="bp">False</span>
+        <span class="n">ip</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_ip</span><span class="p">(</span><span class="n">hostname</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">ip</span><span class="p">:</span>
+            <span class="n">command</span> <span class="o">=</span> <span class="s">&quot;ping -c4 </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">ip</span>
+            <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span> <span class="o">=</span> <span class="n">lexec</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+
+            <span class="n">m</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="s">&quot;(\d+)% packet loss&quot;</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">out</span><span class="p">))</span>
+            <span class="k">if</span> <span class="n">m</span> <span class="ow">and</span> <span class="nb">int</span><span class="p">(</span><span class="n">m</span><span class="o">.</span><span class="n">groups</span><span class="p">()[</span><span class="mi">0</span><span class="p">])</span> <span class="o">&lt;</span> <span class="mi">50</span><span class="p">:</span>
+                <span class="n">ping_ok</span> <span class="o">=</span> <span class="bp">True</span>
+
+        <span class="k">return</span> <span class="n">ping_ok</span>
+
+    <span class="k">def</span> <span class="nf">_blacklist_node</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">host_hrn</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Add mal functioning node to blacklist (in SFA API).</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s">&quot; Blacklisting malfunctioning node &quot;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">sfaapi</span><span class="o">.</span><span class="n">blacklist_resource</span><span class="p">(</span><span class="n">host_hrn</span><span class="p">)</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_hostname</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&#39;hostname&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_reserve</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">host_hrn</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Add node to the list of nodes being provisioned, in order for other RMs</span>
+<span class="sd">        to not try to provision the same one again.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">sfaapi</span><span class="o">.</span><span class="n">reserve_resource</span><span class="p">(</span><span class="n">host_hrn</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_get_ip</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">hostname</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Query cache for the IP of a node with certain hostname</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">ip</span> <span class="o">=</span> <span class="n">sshfuncs</span><span class="o">.</span><span class="n">gethostbyname</span><span class="p">(</span><span class="n">hostname</span><span class="p">)</span>
+        <span class="k">except</span><span class="p">:</span>
+            <span class="c"># Fail while trying to find the IP</span>
+            <span class="k">return</span> <span class="bp">None</span>
+        <span class="k">return</span> <span class="n">ip</span>
+
+<div class="viewcode-block" id="PlanetlabSfaNode.fail_discovery"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.sfa_node.PlanetlabSfaNode.fail_discovery">[docs]</a>    <span class="k">def</span> <span class="nf">fail_discovery</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Discovery failed. No candidates found for node&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+        <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+</div>
+<div class="viewcode-block" id="PlanetlabSfaNode.fail_node_not_alive"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.sfa_node.PlanetlabSfaNode.fail_node_not_alive">[docs]</a>    <span class="k">def</span> <span class="nf">fail_node_not_alive</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">hostname</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Node </span><span class="si">%s</span><span class="s"> not alive&quot;</span> <span class="o">%</span> <span class="n">hostname</span>
+        <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+    </div>
+<div class="viewcode-block" id="PlanetlabSfaNode.fail_node_not_available"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.sfa_node.PlanetlabSfaNode.fail_node_not_available">[docs]</a>    <span class="k">def</span> <span class="nf">fail_node_not_available</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">hostname</span><span class="p">):</span>
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Node </span><span class="si">%s</span><span class="s"> not available for provisioning&quot;</span> <span class="o">%</span> <span class="n">hostname</span>
+        <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+</div>
+<div class="viewcode-block" id="PlanetlabSfaNode.fail_not_enough_nodes"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.sfa_node.PlanetlabSfaNode.fail_not_enough_nodes">[docs]</a>    <span class="k">def</span> <span class="nf">fail_not_enough_nodes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Not enough nodes available for provisioning&quot;</span>
+        <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+</div>
+<div class="viewcode-block" id="PlanetlabSfaNode.fail_sfaapi"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.sfa_node.PlanetlabSfaNode.fail_sfaapi">[docs]</a>    <span class="k">def</span> <span class="nf">fail_sfaapi</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Failing while trying to instanciate the SFA API.</span><span class="se">\n</span><span class="s">Set the&quot;</span> <span class="o">+</span> \
+            <span class="s">&quot; attributes sfauser and sfaPrivateKey.&quot;</span>
+        <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+</div>
+<div class="viewcode-block" id="PlanetlabSfaNode.valid_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.sfa_node.PlanetlabSfaNode.valid_connection">[docs]</a>    <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="c"># TODO: Validate!</span>
+        <span class="k">return</span> <span class="bp">True</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/planetlab/tap.html b/doc/sphinx/_build/html/_modules/nepi/resources/planetlab/tap.html
new file mode 100644 (file)
index 0000000..9b0791c
--- /dev/null
@@ -0,0 +1,413 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.planetlab.tap &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.planetlab.tap</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span><span class="p">,</span> <span class="n">ResourceState</span> 
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.tap</span> <span class="kn">import</span> <span class="n">LinuxTap</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.planetlab.node</span> <span class="kn">import</span> <span class="n">PlanetlabNode</span>
+<span class="kn">from</span> <span class="nn">nepi.util.timefuncs</span> <span class="kn">import</span> <span class="n">tnow</span><span class="p">,</span> <span class="n">tdiffsec</span>
+
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">time</span>
+
+<span class="n">PYTHON_VSYS_VERSION</span> <span class="o">=</span> <span class="s">&quot;1.0&quot;</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="PlanetlabTap"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.tap.PlanetlabTap">[docs]</a><span class="k">class</span> <span class="nc">PlanetlabTap</span><span class="p">(</span><span class="n">LinuxTap</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;planetlab::Tap&quot;</span>
+    <span class="n">_help</span> <span class="o">=</span> <span class="s">&quot;Creates a TAP device on a PlanetLab host&quot;</span>
+    <span class="n">_platform</span> <span class="o">=</span> <span class="s">&quot;planetlab&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">snat</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;snat&quot;</span><span class="p">,</span> <span class="s">&quot;Set SNAT=1&quot;</span><span class="p">,</span> 
+                <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">Bool</span><span class="p">,</span>
+                <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+        
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">snat</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">PlanetlabTap</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;tap-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_gre_enabled</span> <span class="o">=</span> <span class="bp">False</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="PlanetlabTap.node"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.tap.PlanetlabTap.node">[docs]</a>    <span class="k">def</span> <span class="nf">node</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">PlanetlabNode</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+        <span class="k">if</span> <span class="n">node</span><span class="p">:</span> <span class="k">return</span> <span class="n">node</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+        <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="s">&quot;TAP/TUN devices must be connected to Node&quot;</span>
+</div>
+<div class="viewcode-block" id="PlanetlabTap.upload_sources"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.tap.PlanetlabTap.upload_sources">[docs]</a>    <span class="k">def</span> <span class="nf">upload_sources</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">scripts</span> <span class="o">=</span> <span class="p">[]</span>
+
+        <span class="c"># vif-creation python script</span>
+        <span class="n">pl_vif_create</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">__file__</span><span class="p">),</span> <span class="s">&quot;scripts&quot;</span><span class="p">,</span>
+                <span class="s">&quot;pl-vif-create.py&quot;</span><span class="p">)</span>
+
+        <span class="n">scripts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">pl_vif_create</span><span class="p">)</span>
+        
+        <span class="c"># vif-up python script</span>
+        <span class="n">pl_vif_up</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">__file__</span><span class="p">),</span> <span class="s">&quot;scripts&quot;</span><span class="p">,</span>
+                <span class="s">&quot;pl-vif-up.py&quot;</span><span class="p">)</span>
+        
+        <span class="n">scripts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">pl_vif_up</span><span class="p">)</span>
+
+        <span class="c"># vif-down python script</span>
+        <span class="n">pl_vif_down</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">__file__</span><span class="p">),</span> <span class="s">&quot;scripts&quot;</span><span class="p">,</span>
+                <span class="s">&quot;pl-vif-down.py&quot;</span><span class="p">)</span>
+        
+        <span class="n">scripts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">pl_vif_down</span><span class="p">)</span>
+
+        <span class="c"># udp-connect python script</span>
+        <span class="n">udp_connect</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">__file__</span><span class="p">),</span> 
+                <span class="s">&quot;..&quot;</span><span class="p">,</span>
+                <span class="s">&quot;linux&quot;</span><span class="p">,</span>
+                <span class="s">&quot;scripts&quot;</span><span class="p">,</span>
+                <span class="s">&quot;linux-udp-connect.py&quot;</span><span class="p">)</span>
+        
+        <span class="n">scripts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">udp_connect</span><span class="p">)</span>
+
+        <span class="c"># tunnel creation python script</span>
+        <span class="n">tunchannel</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">__file__</span><span class="p">),</span> 
+                <span class="s">&quot;..&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;linux&quot;</span><span class="p">,</span>
+                <span class="s">&quot;scripts&quot;</span><span class="p">,</span> 
+                <span class="s">&quot;tunchannel.py&quot;</span><span class="p">)</span>
+
+        <span class="n">scripts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">tunchannel</span><span class="p">)</span>
+
+        <span class="c"># Upload scripts</span>
+        <span class="n">scripts</span> <span class="o">=</span> <span class="s">&quot;;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">scripts</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">upload</span><span class="p">(</span><span class="n">scripts</span><span class="p">,</span>
+                <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">src_dir</span><span class="p">),</span>
+                <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">False</span><span class="p">)</span>
+
+        <span class="c"># upload stop.sh script</span>
+        <span class="n">stop_command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_paths</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_stop_command</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">upload_command</span><span class="p">(</span><span class="n">stop_command</span><span class="p">,</span>
+                <span class="n">shfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">,</span> <span class="s">&quot;stop.sh&quot;</span><span class="p">),</span>
+                <span class="c"># Overwrite file every time. </span>
+                <span class="c"># The stop.sh has the path to the socket, which should change</span>
+                <span class="c"># on every experiment run.</span>
+                <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="PlanetlabTap.upload_start_command"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.tap.PlanetlabTap.upload_start_command">[docs]</a>    <span class="k">def</span> <span class="nf">upload_start_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">PlanetlabTap</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">upload_start_command</span><span class="p">()</span>
+
+        <span class="c"># Planetlab TAPs always add a PI header</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;pi&quot;</span><span class="p">,</span> <span class="bp">True</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">gre_enabled</span><span class="p">:</span>
+            <span class="c"># After creating the TAP, the pl-vif-create.py script</span>
+            <span class="c"># will write the name of the TAP to a file. We wait until</span>
+            <span class="c"># we can read the interface name from the file.</span>
+            <span class="n">vif_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wait_vif_name</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;deviceName&quot;</span><span class="p">,</span> <span class="n">vif_name</span><span class="p">)</span> 
+</div>
+<div class="viewcode-block" id="PlanetlabTap.wait_vif_name"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.tap.PlanetlabTap.wait_vif_name">[docs]</a>    <span class="k">def</span> <span class="nf">wait_vif_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exec_run_home</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Waits until the vif_name file for the command is generated, </span>
+<span class="sd">            and returns the vif_name for the device &quot;&quot;&quot;</span>
+        <span class="n">vif_name</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="n">delay</span> <span class="o">=</span> <span class="mf">0.5</span>
+
+        <span class="c"># The vif_name file will be created in the tap-home, while the</span>
+        <span class="c"># current execution home might be elsewhere to check for errors</span>
+        <span class="c"># (e.g. could be a tunnel-home)</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">exec_run_home</span><span class="p">:</span>
+            <span class="n">exec_run_home</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_home</span>
+
+        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="mi">20</span><span class="p">):</span>
+            <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">check_output</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">,</span> <span class="s">&quot;vif_name&quot;</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="n">proc</span><span class="o">.</span><span class="n">poll</span><span class="p">()</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+                <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">check_errors</span><span class="p">(</span><span class="n">exec_run_home</span><span class="p">)</span>
+                
+                <span class="k">if</span> <span class="n">err</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span>
+                    <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">err</span>
+
+            <span class="k">if</span> <span class="n">out</span><span class="p">:</span>
+                <span class="n">vif_name</span> <span class="o">=</span> <span class="n">out</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
+                <span class="k">break</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="n">delay</span><span class="p">)</span>
+                <span class="n">delay</span> <span class="o">=</span> <span class="n">delay</span> <span class="o">*</span> <span class="mf">1.5</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Couldn&#39;t retrieve vif_name&quot;</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="k">return</span> <span class="n">vif_name</span>
+</div>
+<div class="viewcode-block" id="PlanetlabTap.gre_connect"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.tap.PlanetlabTap.gre_connect">[docs]</a>    <span class="k">def</span> <span class="nf">gre_connect</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="p">,</span> <span class="n">connection_app_home</span><span class="p">,</span>
+            <span class="n">connection_run_home</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">PlanetlabTap</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">gre_connect</span><span class="p">(</span><span class="n">remote_endpoint</span><span class="p">,</span> 
+                <span class="n">connection_app_home</span><span class="p">,</span> <span class="n">connection_run_home</span><span class="p">)</span>
+         <span class="c"># After creating the TAP, the pl-vif-create.py script</span>
+        <span class="c"># will write the name of the TAP to a file. We wait until</span>
+        <span class="c"># we can read the interface name from the file.</span>
+        <span class="n">vif_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wait_vif_name</span><span class="p">(</span><span class="n">exec_run_home</span> <span class="o">=</span> <span class="n">connection_run_home</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;deviceName&quot;</span><span class="p">,</span> <span class="n">vif_name</span><span class="p">)</span> 
+
+        <span class="k">return</span> <span class="bp">True</span>
+</div>
+    <span class="k">def</span> <span class="nf">_gre_connect_command</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="p">,</span> <span class="n">connection_app_home</span><span class="p">,</span> 
+            <span class="n">connection_run_home</span><span class="p">):</span> 
+        <span class="c"># Set the remote endpoint, (private) IP of the device</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;pointopoint&quot;</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ip&quot;</span><span class="p">))</span>
+        <span class="c"># Public IP of the node</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;greRemote&quot;</span><span class="p">,</span> <span class="n">remote_endpoint</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ip&quot;</span><span class="p">))</span>
+
+        <span class="c"># Generate GRE connect command</span>
+
+        <span class="c"># Use vif_down command to first kill existing TAP in GRE mode</span>
+        <span class="n">vif_down_command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_vif_down_command</span>
+
+        <span class="c"># Use pl-vif-up.py script to configure TAP with peer info</span>
+        <span class="n">vif_up_command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_vif_up_command</span>
+        
+        <span class="n">command</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;(&quot;</span><span class="p">]</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">vif_down_command</span><span class="p">)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;) ; (&quot;</span><span class="p">)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">vif_up_command</span><span class="p">)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;)&quot;</span><span class="p">)</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_paths</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">command</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_start_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">gre_enabled</span><span class="p">:</span>
+            <span class="n">command</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">command</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;sudo -S python ${SRC}/pl-vif-create.py&quot;</span><span class="p">]</span>
+            
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-t </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">vif_type</span><span class="p">)</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-a </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ip&quot;</span><span class="p">))</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-n </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;prefix&quot;</span><span class="p">))</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-f </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">vif_name_file</span><span class="p">)</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-S </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">sock_name</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;snat&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+                <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-s&quot;</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;pointopoint&quot;</span><span class="p">):</span>
+                <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-p </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;pointopoint&quot;</span><span class="p">))</span>
+            
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;txqueuelen&quot;</span><span class="p">):</span>
+                <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-q </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;txqueuelen&quot;</span><span class="p">))</span>
+
+        <span class="k">return</span> <span class="s">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_stop_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">gre_enabled</span><span class="p">:</span>
+            <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_vif_down_command</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">command</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;sudo -S &quot;</span><span class="p">]</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;PYTHONPATH=$PYTHONPATH:${SRC}&quot;</span><span class="p">)</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;python ${SRC}/pl-vif-down.py&quot;</span><span class="p">)</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-S </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">sock_name</span><span class="p">)</span>
+            <span class="n">command</span> <span class="o">=</span> <span class="s">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">command</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_vif_up_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">gre_enabled</span><span class="p">:</span>
+            <span class="n">device_name</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">device_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;deviceName&quot;</span><span class="p">)</span>
+
+        <span class="c"># Use pl-vif-up.py script to configure TAP</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;sudo -S &quot;</span><span class="p">]</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;PYTHONPATH=$PYTHONPATH:${SRC}&quot;</span><span class="p">)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;python ${SRC}/pl-vif-up.py&quot;</span><span class="p">)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-u </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;username&quot;</span><span class="p">))</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-N </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">device_name</span><span class="p">)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-t </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">vif_type</span><span class="p">)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-a </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ip&quot;</span><span class="p">))</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-n </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;prefix&quot;</span><span class="p">))</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;snat&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-s&quot;</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;pointopoint&quot;</span><span class="p">):</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-p </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;pointopoint&quot;</span><span class="p">))</span>
+        
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;txqueuelen&quot;</span><span class="p">):</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-q </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;txqueuelen&quot;</span><span class="p">))</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">gre_enabled</span><span class="p">:</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-g </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;greKey&quot;</span><span class="p">))</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-G </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;greRemote&quot;</span><span class="p">))</span>
+        
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-f </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">vif_name_file</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="s">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_vif_down_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">gre_enabled</span><span class="p">:</span>
+            <span class="n">device_name</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">device_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;deviceName&quot;</span><span class="p">)</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;sudo -S &quot;</span><span class="p">]</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;PYTHONPATH=$PYTHONPATH:${SRC}&quot;</span><span class="p">)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;python ${SRC}/pl-vif-down.py&quot;</span><span class="p">)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-N </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="n">device_name</span><span class="p">)</span>
+        
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">gre_enabled</span><span class="p">:</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-u </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;username&quot;</span><span class="p">))</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-t </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">vif_type</span><span class="p">)</span>
+            <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-D&quot;</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="s">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="PlanetlabTap.vif_name_file"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.tap.PlanetlabTap.vif_name_file">[docs]</a>    <span class="k">def</span> <span class="nf">vif_name_file</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">,</span> <span class="s">&quot;vif_name&quot;</span><span class="p">)</span>
+</div>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_install</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="c"># Install python-vsys and python-passfd</span>
+        <span class="n">install_vsys</span> <span class="o">=</span> <span class="p">(</span> <span class="s">&quot; ( &quot;</span>
+                    <span class="s">&quot;   python -c &#39;import vsys, os;  vsys.__version__ == </span><span class="se">\&quot;</span><span class="si">%(version)s</span><span class="se">\&quot;</span><span class="s"> or os._exit(1)&#39; &quot;</span>
+                    <span class="s">&quot; ) &quot;</span>
+                    <span class="s">&quot; || &quot;</span>
+                    <span class="s">&quot; ( &quot;</span>
+                    <span class="s">&quot;   cd ${SRC} ; &quot;</span>
+                    <span class="s">&quot;   hg clone http://nepi.inria.fr/code/python-vsys ; &quot;</span>
+                    <span class="s">&quot;   cd python-vsys ; &quot;</span>
+                    <span class="s">&quot;   make all ; &quot;</span>
+                    <span class="s">&quot;   sudo -S make install &quot;</span>
+                    <span class="s">&quot; )&quot;</span> <span class="p">)</span> <span class="o">%</span> <span class="p">({</span>
+                        <span class="s">&quot;version&quot;</span><span class="p">:</span> <span class="n">PYTHON_VSYS_VERSION</span>
+                        <span class="p">})</span>
+
+        <span class="n">install_passfd</span> <span class="o">=</span> <span class="p">(</span> <span class="s">&quot; ( python -c &#39;import passfd&#39; ) &quot;</span>
+                    <span class="s">&quot; || &quot;</span>
+                    <span class="s">&quot; ( &quot;</span>
+                    <span class="s">&quot;   cd ${SRC} ; &quot;</span>
+                    <span class="s">&quot;   hg clone http://nepi.inria.fr/code/python-passfd ; &quot;</span>
+                    <span class="s">&quot;   cd python-passfd ; &quot;</span>
+                    <span class="s">&quot;   make all ; &quot;</span>
+                    <span class="s">&quot;   sudo -S make install &quot;</span>
+                    <span class="s">&quot; )&quot;</span> <span class="p">)</span>
+
+        <span class="k">return</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s"> ; </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span> <span class="n">install_vsys</span><span class="p">,</span> <span class="n">install_passfd</span> <span class="p">)</span>
+
+<div class="viewcode-block" id="PlanetlabTap.valid_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.tap.PlanetlabTap.valid_connection">[docs]</a>    <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="c"># TODO: Validate!</span>
+        <span class="k">return</span> <span class="bp">True</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/planetlab/tun.html b/doc/sphinx/_build/html/_modules/nepi/resources/planetlab/tun.html
new file mode 100644 (file)
index 0000000..c77c0bb
--- /dev/null
@@ -0,0 +1,129 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.planetlab.tun &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.planetlab.tun</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.planetlab.tap</span> <span class="kn">import</span> <span class="n">PlanetlabTap</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.tap</span> <span class="kn">import</span> <span class="n">LinuxTap</span>
+
+<span class="kn">import</span> <span class="nn">os</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="PlanetlabTun"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.tun.PlanetlabTun">[docs]</a><span class="k">class</span> <span class="nc">PlanetlabTun</span><span class="p">(</span><span class="n">PlanetlabTap</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;planetlab::Tun&quot;</span>
+    <span class="n">_help</span> <span class="o">=</span> <span class="s">&quot;Creates a TUN device on a PlanetLab host&quot;</span>
+    <span class="n">_platform</span> <span class="o">=</span> <span class="s">&quot;planetlab&quot;</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">PlanetlabTun</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_vif_prefix</span> <span class="o">=</span> <span class="s">&quot;tun&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_vif_type</span> <span class="o">=</span> <span class="s">&quot;IFF_TUN&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_vif_type_flag</span> <span class="o">=</span> <span class="n">LinuxTap</span><span class="o">.</span><span class="n">IFF_TUN</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">vif_prefix</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span><span class="p">)</span>
+    
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/resources/planetlab/vroute.html b/doc/sphinx/_build/html/_modules/nepi/resources/planetlab/vroute.html
new file mode 100644 (file)
index 0000000..e75ef01
--- /dev/null
@@ -0,0 +1,276 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.resources.planetlab.vroute &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.resources.planetlab.vroute</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.execution.attribute</span> <span class="kn">import</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">Flags</span><span class="p">,</span> <span class="n">Types</span>
+<span class="kn">from</span> <span class="nn">nepi.execution.resource</span> <span class="kn">import</span> <span class="n">clsinit_copy</span><span class="p">,</span> <span class="n">ResourceState</span> 
+<span class="kn">from</span> <span class="nn">nepi.resources.linux.application</span> <span class="kn">import</span> <span class="n">LinuxApplication</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.planetlab.node</span> <span class="kn">import</span> <span class="n">PlanetlabNode</span>
+<span class="kn">from</span> <span class="nn">nepi.resources.planetlab.tap</span> <span class="kn">import</span> <span class="n">PlanetlabTap</span>
+<span class="kn">from</span> <span class="nn">nepi.util.timefuncs</span> <span class="kn">import</span> <span class="n">tnow</span><span class="p">,</span> <span class="n">tdiffsec</span>
+
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">time</span>
+
+<span class="n">PYTHON_VSYS_VERSION</span> <span class="o">=</span> <span class="s">&quot;1.0&quot;</span>
+
+<span class="nd">@clsinit_copy</span>
+<div class="viewcode-block" id="PlanetlabVroute"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.vroute.PlanetlabVroute">[docs]</a><span class="k">class</span> <span class="nc">PlanetlabVroute</span><span class="p">(</span><span class="n">LinuxApplication</span><span class="p">):</span>
+    <span class="n">_rtype</span> <span class="o">=</span> <span class="s">&quot;planetlab::Vroute&quot;</span>
+    <span class="n">_help</span> <span class="o">=</span> <span class="s">&quot;Creates a Vroute on a PlanetLab host&quot;</span>
+    <span class="n">_platform</span> <span class="o">=</span> <span class="s">&quot;planetlab&quot;</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">_register_attributes</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
+        <span class="n">action</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;action&quot;</span><span class="p">,</span> <span class="s">&quot;Either add or del&quot;</span><span class="p">,</span>
+              <span class="n">allowed</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;add&quot;</span><span class="p">,</span> <span class="s">&quot;del&quot;</span><span class="p">],</span>
+              <span class="n">default</span> <span class="o">=</span> <span class="s">&quot;add&quot;</span><span class="p">,</span>
+              <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">prefix</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;prefix&quot;</span><span class="p">,</span> <span class="s">&quot;IPv4 Prefix&quot;</span><span class="p">,</span>
+              <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">nexthop</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;nexthop&quot;</span><span class="p">,</span> <span class="s">&quot;IPv4 Address of the next hop&quot;</span><span class="p">,</span>
+              <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">network</span> <span class="o">=</span> <span class="n">Attribute</span><span class="p">(</span><span class="s">&quot;network&quot;</span><span class="p">,</span> <span class="s">&quot;IPv4 Network Address&quot;</span><span class="p">,</span>
+              <span class="n">flags</span> <span class="o">=</span> <span class="n">Flags</span><span class="o">.</span><span class="n">Design</span><span class="p">)</span>
+
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">prefix</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">nexthop</span><span class="p">)</span>
+        <span class="n">cls</span><span class="o">.</span><span class="n">_register_attribute</span><span class="p">(</span><span class="n">network</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">PlanetlabVroute</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_home</span> <span class="o">=</span> <span class="s">&quot;vroute-</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">guid</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="PlanetlabVroute.tap"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.vroute.PlanetlabVroute.tap">[docs]</a>    <span class="k">def</span> <span class="nf">tap</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">tap</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">PlanetlabTap</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+        <span class="k">if</span> <span class="n">tap</span><span class="p">:</span> <span class="k">return</span> <span class="n">tap</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+        <span class="k">return</span> <span class="bp">None</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="PlanetlabVroute.node"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.vroute.PlanetlabVroute.node">[docs]</a>    <span class="k">def</span> <span class="nf">node</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">node</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">tap</span><span class="o">.</span><span class="n">get_connected</span><span class="p">(</span><span class="n">PlanetlabNode</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">())</span>
+        <span class="k">if</span> <span class="n">node</span><span class="p">:</span> <span class="k">return</span> <span class="n">node</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+        <span class="k">return</span> <span class="bp">None</span>
+</div>
+<div class="viewcode-block" id="PlanetlabVroute.upload_sources"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.vroute.PlanetlabVroute.upload_sources">[docs]</a>    <span class="k">def</span> <span class="nf">upload_sources</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="c"># upload vif-creation python script</span>
+        <span class="n">pl_vroute</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">__file__</span><span class="p">),</span> 
+                <span class="s">&quot;scripts&quot;</span><span class="p">,</span>
+                <span class="s">&quot;pl-vroute.py&quot;</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">upload</span><span class="p">(</span><span class="n">pl_vroute</span><span class="p">,</span>
+                <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">src_dir</span><span class="p">,</span> <span class="s">&quot;pl-vroute.py&quot;</span><span class="p">),</span>
+                <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">False</span><span class="p">)</span>
+
+        <span class="c"># upload stop.sh script</span>
+        <span class="n">stop_command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_paths</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_stop_command</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">upload</span><span class="p">(</span><span class="n">stop_command</span><span class="p">,</span>
+                <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">,</span> <span class="s">&quot;stop.sh&quot;</span><span class="p">),</span>
+                <span class="n">text</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span>
+                <span class="c"># Overwrite file every time. </span>
+                <span class="c"># The stop.sh has the path to the socket, wich should change</span>
+                <span class="c"># on every experiment run.</span>
+                <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="PlanetlabVroute.upload_start_command"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.vroute.PlanetlabVroute.upload_start_command">[docs]</a>    <span class="k">def</span> <span class="nf">upload_start_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="c"># Overwrite file every time. </span>
+        <span class="c"># The stop.sh has the path to the socket, wich should change</span>
+        <span class="c"># on every experiment run.</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span>
+        <span class="n">shfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">,</span> <span class="s">&quot;start.sh&quot;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">node</span><span class="o">.</span><span class="n">run_and_wait</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_home</span><span class="p">,</span>
+                <span class="n">shfile</span><span class="o">=</span><span class="n">shfile</span><span class="p">,</span>
+                <span class="n">overwrite</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+  </div>
+<div class="viewcode-block" id="PlanetlabVroute.do_deploy"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.vroute.PlanetlabVroute.do_deploy">[docs]</a>    <span class="k">def</span> <span class="nf">do_deploy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">tap</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">tap</span><span class="o">.</span><span class="n">state</span> <span class="o">&lt;</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">PROVISIONED</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">ec</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reschedule_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">deploy</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">):</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_start_command</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_discover</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">do_provision</span><span class="p">()</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;----- READY ---- &quot;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_ready</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="PlanetlabVroute.do_start"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.vroute.PlanetlabVroute.do_start">[docs]</a>    <span class="k">def</span> <span class="nf">do_start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">READY</span><span class="p">:</span>
+            <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Starting command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
+
+            <span class="c"># Vroute started during deployment</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_started</span><span class="p">()</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Failed to execute command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">command</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+</div>
+<div class="viewcode-block" id="PlanetlabVroute.do_stop"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.vroute.PlanetlabVroute.do_stop">[docs]</a>    <span class="k">def</span> <span class="nf">do_stop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;command&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">ResourceState</span><span class="o">.</span><span class="n">STARTED</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Stopping command &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">_stop_command</span><span class="p">)</span>
+
+            <span class="n">command</span> <span class="o">=</span> <span class="s">&quot;bash </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">app_home</span><span class="p">,</span> <span class="s">&quot;stop.sh&quot;</span><span class="p">)</span>
+            <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">execute_command</span><span class="p">(</span><span class="n">command</span><span class="p">,</span>
+                    <span class="n">blocking</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">set_stopped</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="PlanetlabVroute.do_release"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.vroute.PlanetlabVroute.do_release">[docs]</a>    <span class="k">def</span> <span class="nf">do_release</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="c"># Node needs to wait until all associated RMs are released</span>
+        <span class="c"># to be released</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;tearDown&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s">&quot;tearDown&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tear_down_command</span><span class="p">())</span>
+
+        <span class="nb">super</span><span class="p">(</span><span class="n">PlanetlabVroute</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">do_release</span><span class="p">()</span>
+</div>
+    <span class="k">def</span> <span class="nf">_tear_down_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;action&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="s">&quot;del&quot;</span><span class="p">:</span>
+            <span class="k">return</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_stop_command</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_start_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;sudo -S python ${SRC}/pl-vroute.py&quot;</span><span class="p">]</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-a </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;action&quot;</span><span class="p">))</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-n </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;network&quot;</span><span class="p">))</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-p </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;prefix&quot;</span><span class="p">))</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-g </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">tap</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;pointopoint&quot;</span><span class="p">))</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-f </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">tap</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;deviceName&quot;</span><span class="p">))</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+
+        <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_paths</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">command</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">_stop_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;sudo -S python ${SRC}/pl-vroute.py&quot;</span><span class="p">]</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-a </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="s">&quot;del&quot;</span><span class="p">)</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-n </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;network&quot;</span><span class="p">))</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-p </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;prefix&quot;</span><span class="p">))</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-g </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;nexthop&quot;</span><span class="p">))</span>
+        <span class="n">command</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-f </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">tap</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;deviceName&quot;</span><span class="p">))</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+        
+        <span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">replace_paths</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">command</span>
+
+<div class="viewcode-block" id="PlanetlabVroute.valid_connection"><a class="viewcode-back" href="../../../../_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.vroute.PlanetlabVroute.valid_connection">[docs]</a>    <span class="k">def</span> <span class="nf">valid_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span><span class="p">):</span>
+        <span class="c"># TODO: Validate!</span>
+        <span class="k">return</span> <span class="bp">True</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/util/environ.html b/doc/sphinx/_build/html/_modules/nepi/util/environ.html
new file mode 100644 (file)
index 0000000..1544b5a
--- /dev/null
@@ -0,0 +1,293 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.util.environ &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../index.html" />
+    <link rel="up" title="Module code" href="../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.util.environ</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+<span class="c">#         Martin Ferrari &lt;martin.ferrari@inria.fr&gt;</span>
+
+
+
+<span class="kn">import</span> <span class="nn">ctypes</span>
+<span class="kn">import</span> <span class="nn">imp</span>
+<span class="kn">import</span> <span class="nn">sys</span>
+
+<span class="kn">import</span> <span class="nn">os</span><span class="o">,</span> <span class="nn">os.path</span><span class="o">,</span> <span class="nn">re</span><span class="o">,</span> <span class="nn">signal</span><span class="o">,</span> <span class="nn">shutil</span><span class="o">,</span> <span class="nn">socket</span><span class="o">,</span> <span class="nn">subprocess</span><span class="o">,</span> <span class="nn">tempfile</span>
+
+<span class="n">__all__</span> <span class="o">=</span>  <span class="p">[</span><span class="s">&quot;python&quot;</span><span class="p">,</span> <span class="s">&quot;ssh_path&quot;</span><span class="p">]</span>
+<span class="n">__all__</span> <span class="o">+=</span> <span class="p">[</span><span class="s">&quot;rsh&quot;</span><span class="p">,</span> <span class="s">&quot;tcpdump_path&quot;</span><span class="p">,</span> <span class="s">&quot;sshd_path&quot;</span><span class="p">]</span>
+<span class="n">__all__</span> <span class="o">+=</span> <span class="p">[</span><span class="s">&quot;execute&quot;</span><span class="p">,</span> <span class="s">&quot;backticks&quot;</span><span class="p">]</span>
+
+
+<span class="c"># Unittest from Python 2.6 doesn&#39;t have these decorators</span>
+<span class="k">def</span> <span class="nf">_bannerwrap</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
+    <span class="n">name</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">__name__</span>
+    <span class="k">def</span> <span class="nf">banner</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s">&quot;*** WARNING: Skipping test </span><span class="si">%s</span><span class="s">: `</span><span class="si">%s</span><span class="s">&#39;</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span>
+                <span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">text</span><span class="p">))</span>
+        <span class="k">return</span> <span class="bp">None</span>
+    <span class="k">return</span> <span class="n">banner</span>
+
+<span class="k">def</span> <span class="nf">skip</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
+    <span class="k">return</span> <span class="k">lambda</span> <span class="n">f</span><span class="p">:</span> <span class="n">_bannerwrap</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span>
+
+<span class="k">def</span> <span class="nf">skipUnless</span><span class="p">(</span><span class="n">cond</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
+    <span class="k">return</span> <span class="p">(</span><span class="k">lambda</span> <span class="n">f</span><span class="p">:</span> <span class="n">_bannerwrap</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">text</span><span class="p">))</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">cond</span> <span class="k">else</span> <span class="k">lambda</span> <span class="n">f</span><span class="p">:</span> <span class="n">f</span>
+
+<span class="k">def</span> <span class="nf">skipIf</span><span class="p">(</span><span class="n">cond</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
+    <span class="k">return</span> <span class="p">(</span><span class="k">lambda</span> <span class="n">f</span><span class="p">:</span> <span class="n">_bannerwrap</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">text</span><span class="p">))</span> <span class="k">if</span> <span class="n">cond</span> <span class="k">else</span> <span class="k">lambda</span> <span class="n">f</span><span class="p">:</span> <span class="n">f</span>
+
+<span class="k">def</span> <span class="nf">find_bin</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">extra_path</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+    <span class="n">search</span> <span class="o">=</span> <span class="p">[]</span>
+    <span class="k">if</span> <span class="s">&quot;PATH&quot;</span> <span class="ow">in</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="p">:</span>
+        <span class="n">search</span> <span class="o">+=</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="s">&quot;PATH&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;:&quot;</span><span class="p">)</span>
+    <span class="k">for</span> <span class="n">pref</span> <span class="ow">in</span> <span class="p">(</span><span class="s">&quot;/&quot;</span><span class="p">,</span> <span class="s">&quot;/usr/&quot;</span><span class="p">,</span> <span class="s">&quot;/usr/local/&quot;</span><span class="p">):</span>
+        <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="p">(</span><span class="s">&quot;bin&quot;</span><span class="p">,</span> <span class="s">&quot;sbin&quot;</span><span class="p">):</span>
+            <span class="n">search</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">pref</span> <span class="o">+</span> <span class="n">d</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">extra_path</span><span class="p">:</span>
+        <span class="n">search</span> <span class="o">+=</span> <span class="n">extra_path</span>
+
+    <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">search</span><span class="p">:</span>
+            <span class="k">try</span><span class="p">:</span>
+                <span class="n">os</span><span class="o">.</span><span class="n">stat</span><span class="p">(</span><span class="n">d</span> <span class="o">+</span> <span class="s">&quot;/&quot;</span> <span class="o">+</span> <span class="n">name</span><span class="p">)</span>
+                <span class="k">return</span> <span class="n">d</span> <span class="o">+</span> <span class="s">&quot;/&quot;</span> <span class="o">+</span> <span class="n">name</span>
+            <span class="k">except</span> <span class="ne">OSError</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
+                <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">errno</span> <span class="o">!=</span> <span class="n">os</span><span class="o">.</span><span class="n">errno</span><span class="o">.</span><span class="n">ENOENT</span><span class="p">:</span>
+                    <span class="k">raise</span>
+    <span class="k">return</span> <span class="bp">None</span>
+
+<span class="k">def</span> <span class="nf">find_bin_or_die</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">extra_path</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+    <span class="n">r</span> <span class="o">=</span> <span class="n">find_bin</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
+    <span class="k">if</span> <span class="ow">not</span> <span class="n">r</span><span class="p">:</span>
+        <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">((</span><span class="s">&quot;Cannot find `</span><span class="si">%s</span><span class="s">&#39; command, impossible to &quot;</span> <span class="o">+</span>
+                <span class="s">&quot;continue.&quot;</span><span class="p">)</span> <span class="o">%</span> <span class="n">name</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">r</span>
+
+<span class="k">def</span> <span class="nf">find_bin</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">extra_path</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+    <span class="n">search</span> <span class="o">=</span> <span class="p">[]</span>
+    <span class="k">if</span> <span class="s">&quot;PATH&quot;</span> <span class="ow">in</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="p">:</span>
+        <span class="n">search</span> <span class="o">+=</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="s">&quot;PATH&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;:&quot;</span><span class="p">)</span>
+    <span class="k">for</span> <span class="n">pref</span> <span class="ow">in</span> <span class="p">(</span><span class="s">&quot;/&quot;</span><span class="p">,</span> <span class="s">&quot;/usr/&quot;</span><span class="p">,</span> <span class="s">&quot;/usr/local/&quot;</span><span class="p">):</span>
+        <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="p">(</span><span class="s">&quot;bin&quot;</span><span class="p">,</span> <span class="s">&quot;sbin&quot;</span><span class="p">):</span>
+            <span class="n">search</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">pref</span> <span class="o">+</span> <span class="n">d</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">extra_path</span><span class="p">:</span>
+        <span class="n">search</span> <span class="o">+=</span> <span class="n">extra_path</span>
+
+    <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">search</span><span class="p">:</span>
+            <span class="k">try</span><span class="p">:</span>
+                <span class="n">os</span><span class="o">.</span><span class="n">stat</span><span class="p">(</span><span class="n">d</span> <span class="o">+</span> <span class="s">&quot;/&quot;</span> <span class="o">+</span> <span class="n">name</span><span class="p">)</span>
+                <span class="k">return</span> <span class="n">d</span> <span class="o">+</span> <span class="s">&quot;/&quot;</span> <span class="o">+</span> <span class="n">name</span>
+            <span class="k">except</span> <span class="ne">OSError</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
+                <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">errno</span> <span class="o">!=</span> <span class="n">os</span><span class="o">.</span><span class="n">errno</span><span class="o">.</span><span class="n">ENOENT</span><span class="p">:</span>
+                    <span class="k">raise</span>
+    <span class="k">return</span> <span class="bp">None</span>
+
+<span class="n">ssh_path</span> <span class="o">=</span> <span class="n">find_bin_or_die</span><span class="p">(</span><span class="s">&quot;ssh&quot;</span><span class="p">)</span>
+<span class="n">python_path</span> <span class="o">=</span> <span class="n">find_bin_or_die</span><span class="p">(</span><span class="s">&quot;python&quot;</span><span class="p">)</span>
+
+<span class="c"># Optional tools</span>
+<span class="n">rsh_path</span> <span class="o">=</span> <span class="n">find_bin</span><span class="p">(</span><span class="s">&quot;rsh&quot;</span><span class="p">)</span>
+<span class="n">tcpdump_path</span> <span class="o">=</span> <span class="n">find_bin</span><span class="p">(</span><span class="s">&quot;tcpdump&quot;</span><span class="p">)</span>
+<span class="n">sshd_path</span> <span class="o">=</span> <span class="n">find_bin</span><span class="p">(</span><span class="s">&quot;sshd&quot;</span><span class="p">)</span>
+
+<div class="viewcode-block" id="execute"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.environ.execute">[docs]</a><span class="k">def</span> <span class="nf">execute</span><span class="p">(</span><span class="n">cmd</span><span class="p">):</span>
+    <span class="c"># FIXME: create a global debug variable</span>
+    <span class="c">#print &quot;[pid %d]&quot; % os.getpid(), &quot; &quot;.join(cmd)</span>
+    <span class="n">null</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="s">&quot;/dev/null&quot;</span><span class="p">,</span> <span class="s">&quot;r+&quot;</span><span class="p">)</span>
+    <span class="n">p</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="n">stdout</span> <span class="o">=</span> <span class="n">null</span><span class="p">,</span> <span class="n">stderr</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">)</span>
+    <span class="n">out</span><span class="p">,</span> <span class="n">err</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">communicate</span><span class="p">()</span>
+    <span class="k">if</span> <span class="n">p</span><span class="o">.</span><span class="n">returncode</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
+        <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s">&quot;Error executing `</span><span class="si">%s</span><span class="s">&#39;: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="s">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">cmd</span><span class="p">),</span> <span class="n">err</span><span class="p">))</span>
+</div>
+<div class="viewcode-block" id="backticks"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.environ.backticks">[docs]</a><span class="k">def</span> <span class="nf">backticks</span><span class="p">(</span><span class="n">cmd</span><span class="p">):</span>
+    <span class="n">p</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="n">stdout</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span>
+            <span class="n">stderr</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">)</span>
+    <span class="n">out</span><span class="p">,</span> <span class="n">err</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">communicate</span><span class="p">()</span>
+    <span class="k">if</span> <span class="n">p</span><span class="o">.</span><span class="n">returncode</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
+        <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s">&quot;Error executing `</span><span class="si">%s</span><span class="s">&#39;: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="s">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">cmd</span><span class="p">),</span> <span class="n">err</span><span class="p">))</span>
+    <span class="k">return</span> <span class="n">out</span>
+
+
+<span class="c"># SSH stuff</span>
+</div>
+<span class="k">def</span> <span class="nf">gen_ssh_keypair</span><span class="p">(</span><span class="n">filename</span><span class="p">):</span>
+    <span class="n">ssh_keygen</span> <span class="o">=</span> <span class="n">nepi</span><span class="o">.</span><span class="n">util</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">find_bin_or_die</span><span class="p">(</span><span class="s">&quot;ssh-keygen&quot;</span><span class="p">)</span>
+    <span class="n">args</span> <span class="o">=</span> <span class="p">[</span><span class="n">ssh_keygen</span><span class="p">,</span> <span class="s">&#39;-q&#39;</span><span class="p">,</span> <span class="s">&#39;-N&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">,</span> <span class="s">&#39;-f&#39;</span><span class="p">,</span> <span class="n">filename</span><span class="p">]</span>
+    <span class="k">assert</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">(</span><span class="n">args</span><span class="p">)</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span> <span class="o">==</span> <span class="mi">0</span>
+    <span class="k">return</span> <span class="n">filename</span><span class="p">,</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">.pub&quot;</span> <span class="o">%</span> <span class="n">filename</span>
+
+<span class="k">def</span> <span class="nf">add_key_to_agent</span><span class="p">(</span><span class="n">filename</span><span class="p">):</span>
+    <span class="n">ssh_add</span> <span class="o">=</span> <span class="n">nepi</span><span class="o">.</span><span class="n">util</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">find_bin_or_die</span><span class="p">(</span><span class="s">&quot;ssh-add&quot;</span><span class="p">)</span>
+    <span class="n">args</span> <span class="o">=</span> <span class="p">[</span><span class="n">ssh_add</span><span class="p">,</span> <span class="n">filename</span><span class="p">]</span>
+    <span class="n">null</span> <span class="o">=</span> <span class="nb">file</span><span class="p">(</span><span class="s">&quot;/dev/null&quot;</span><span class="p">,</span> <span class="s">&quot;w&quot;</span><span class="p">)</span>
+    <span class="k">assert</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">stderr</span> <span class="o">=</span> <span class="n">null</span><span class="p">)</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span> <span class="o">==</span> <span class="mi">0</span>
+    <span class="n">null</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+<span class="k">def</span> <span class="nf">get_free_port</span><span class="p">():</span>
+    <span class="n">s</span> <span class="o">=</span> <span class="n">socket</span><span class="o">.</span><span class="n">socket</span><span class="p">()</span>
+    <span class="n">s</span><span class="o">.</span><span class="n">bind</span><span class="p">((</span><span class="s">&quot;127.0.0.1&quot;</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
+    <span class="n">port</span> <span class="o">=</span> <span class="n">s</span><span class="o">.</span><span class="n">getsockname</span><span class="p">()[</span><span class="mi">1</span><span class="p">]</span>
+    <span class="k">return</span> <span class="n">port</span>
+
+<span class="n">_SSH_CONF</span> <span class="o">=</span> <span class="s">&quot;&quot;&quot;ListenAddress 127.0.0.1:</span><span class="si">%d</span><span class="s"></span>
+<span class="s">Protocol 2</span>
+<span class="s">HostKey </span><span class="si">%s</span><span class="s"></span>
+<span class="s">UsePrivilegeSeparation no</span>
+<span class="s">PubkeyAuthentication yes</span>
+<span class="s">PasswordAuthentication no</span>
+<span class="s">AuthorizedKeysFile </span><span class="si">%s</span><span class="s"></span>
+<span class="s">UsePAM no</span>
+<span class="s">AllowAgentForwarding yes</span>
+<span class="s">PermitRootLogin yes</span>
+<span class="s">StrictModes no</span>
+<span class="s">PermitUserEnvironment yes</span>
+<span class="s">&quot;&quot;&quot;</span>
+
+<span class="k">def</span> <span class="nf">gen_sshd_config</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">port</span><span class="p">,</span> <span class="n">server_key</span><span class="p">,</span> <span class="n">auth_keys</span><span class="p">):</span>
+    <span class="n">conf</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="s">&quot;w&quot;</span><span class="p">)</span>
+    <span class="n">text</span> <span class="o">=</span> <span class="n">_SSH_CONF</span> <span class="o">%</span> <span class="p">(</span><span class="n">port</span><span class="p">,</span> <span class="n">server_key</span><span class="p">,</span> <span class="n">auth_keys</span><span class="p">)</span>
+    <span class="n">conf</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+    <span class="n">conf</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+    <span class="k">return</span> <span class="n">filename</span>
+
+<span class="k">def</span> <span class="nf">gen_auth_keys</span><span class="p">(</span><span class="n">pubkey</span><span class="p">,</span> <span class="n">output</span><span class="p">,</span> <span class="n">environ</span><span class="p">):</span>
+    <span class="c">#opts = [&#39;from=&quot;127.0.0.1/32&quot;&#39;] # fails in stupid yans setup</span>
+    <span class="n">opts</span> <span class="o">=</span> <span class="p">[]</span>
+    <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">environ</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
+        <span class="n">opts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;environment=&quot;</span><span class="si">%s</span><span class="s">=</span><span class="si">%s</span><span class="s">&quot;&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="n">v</span><span class="p">))</span>
+
+    <span class="n">lines</span> <span class="o">=</span> <span class="nb">file</span><span class="p">(</span><span class="n">pubkey</span><span class="p">)</span><span class="o">.</span><span class="n">readlines</span><span class="p">()</span>
+    <span class="n">pubkey</span> <span class="o">=</span> <span class="n">lines</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">()[</span><span class="mi">0</span><span class="p">:</span><span class="mi">2</span><span class="p">]</span>
+    <span class="n">out</span> <span class="o">=</span> <span class="nb">file</span><span class="p">(</span><span class="n">output</span><span class="p">,</span> <span class="s">&quot;w&quot;</span><span class="p">)</span>
+    <span class="n">out</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s">&quot;</span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="s">&quot;,&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">opts</span><span class="p">),</span> <span class="n">pubkey</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">pubkey</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span>
+    <span class="n">out</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+    <span class="k">return</span> <span class="n">output</span>
+
+<span class="k">def</span> <span class="nf">start_ssh_agent</span><span class="p">():</span>
+    <span class="n">ssh_agent</span> <span class="o">=</span> <span class="n">nepi</span><span class="o">.</span><span class="n">util</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">find_bin_or_die</span><span class="p">(</span><span class="s">&quot;ssh-agent&quot;</span><span class="p">)</span>
+    <span class="n">proc</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="n">ssh_agent</span><span class="p">],</span> <span class="n">stdout</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">)</span>
+    <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">foo</span><span class="p">)</span> <span class="o">=</span> <span class="n">proc</span><span class="o">.</span><span class="n">communicate</span><span class="p">()</span>
+    <span class="k">assert</span> <span class="n">proc</span><span class="o">.</span><span class="n">returncode</span> <span class="o">==</span> <span class="mi">0</span>
+    <span class="n">d</span> <span class="o">=</span> <span class="p">{}</span>
+    <span class="k">for</span> <span class="n">l</span> <span class="ow">in</span> <span class="n">out</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">):</span>
+        <span class="n">match</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="s">&quot;^(\w+)=([^ ;]+);.*&quot;</span><span class="p">,</span> <span class="n">l</span><span class="p">)</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">match</span><span class="p">:</span>
+            <span class="k">continue</span>
+        <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="o">=</span> <span class="n">match</span><span class="o">.</span><span class="n">groups</span><span class="p">()</span>
+        <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span>
+        <span class="n">d</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span>
+    <span class="k">return</span> <span class="n">d</span>
+
+<span class="k">def</span> <span class="nf">stop_ssh_agent</span><span class="p">(</span><span class="n">data</span><span class="p">):</span>
+    <span class="c"># No need to gather the pid, ssh-agent knows how to kill itself; after we</span>
+    <span class="c"># had set up the environment</span>
+    <span class="n">ssh_agent</span> <span class="o">=</span> <span class="n">nepi</span><span class="o">.</span><span class="n">util</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">find_bin_or_die</span><span class="p">(</span><span class="s">&quot;ssh-agent&quot;</span><span class="p">)</span>
+    <span class="n">null</span> <span class="o">=</span> <span class="nb">file</span><span class="p">(</span><span class="s">&quot;/dev/null&quot;</span><span class="p">,</span> <span class="s">&quot;w&quot;</span><span class="p">)</span>
+    <span class="n">proc</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="n">ssh_agent</span><span class="p">,</span> <span class="s">&quot;-k&quot;</span><span class="p">],</span> <span class="n">stdout</span> <span class="o">=</span> <span class="n">null</span><span class="p">)</span>
+    <span class="n">null</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+    <span class="k">assert</span> <span class="n">proc</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span> <span class="o">==</span> <span class="mi">0</span>
+    <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
+        <span class="k">del</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="n">k</span><span class="p">]</span>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/util/execfuncs.html b/doc/sphinx/_build/html/_modules/nepi/util/execfuncs.html
new file mode 100644 (file)
index 0000000..7cfccc9
--- /dev/null
@@ -0,0 +1,356 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.util.execfuncs &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../index.html" />
+    <link rel="up" title="Module code" href="../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.util.execfuncs</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.util.sshfuncs</span> <span class="kn">import</span> <span class="n">ProcStatus</span><span class="p">,</span> <span class="n">STDOUT</span><span class="p">,</span> <span class="n">log</span><span class="p">,</span> <span class="n">shell_escape</span>
+
+<span class="kn">import</span> <span class="nn">logging</span>
+<span class="kn">import</span> <span class="nn">shlex</span>
+<span class="kn">import</span> <span class="nn">subprocess</span>
+
+<div class="viewcode-block" id="lexec"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.execfuncs.lexec">[docs]</a><span class="k">def</span> <span class="nf">lexec</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> 
+        <span class="n">user</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> 
+        <span class="n">sudo</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+        <span class="n">env</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Executes a local command, returns ((stdout,stderr),process)</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="k">if</span> <span class="n">env</span><span class="p">:</span>
+        <span class="n">export</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
+        <span class="k">for</span> <span class="n">envkey</span><span class="p">,</span> <span class="n">envval</span> <span class="ow">in</span> <span class="n">env</span><span class="o">.</span><span class="n">iteritems</span><span class="p">():</span>
+            <span class="n">export</span> <span class="o">+=</span> <span class="s">&#39;</span><span class="si">%s</span><span class="s">=</span><span class="si">%s</span><span class="s"> &#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">envkey</span><span class="p">,</span> <span class="n">envval</span><span class="p">)</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">export</span><span class="p">,</span> <span class="n">command</span><span class="p">)</span>
+
+    <span class="k">if</span> <span class="n">sudo</span><span class="p">:</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot;sudo </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">command</span>
+    
+    <span class="c"># XXX: Doing &#39;su user&#39; blocks waiting for a password on stdin</span>
+    <span class="c">#elif user:</span>
+    <span class="c">#    command = &quot;su %s ; %s &quot; % (user, command)</span>
+
+    <span class="n">proc</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">(</span><span class="n">command</span><span class="p">,</span>
+                <span class="n">shell</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span> 
+                <span class="n">stdout</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span> 
+                <span class="n">stderr</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">)</span>
+
+    <span class="n">out</span> <span class="o">=</span> <span class="n">err</span> <span class="o">=</span> <span class="s">&quot;&quot;</span>
+    <span class="n">log_msg</span> <span class="o">=</span> <span class="s">&quot;lexec - command </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="n">command</span>
+
+    <span class="k">try</span><span class="p">:</span>
+        <span class="n">out</span><span class="p">,</span> <span class="n">err</span> <span class="o">=</span> <span class="n">proc</span><span class="o">.</span><span class="n">communicate</span><span class="p">()</span>
+        <span class="n">log</span><span class="p">(</span><span class="n">log_msg</span><span class="p">,</span> <span class="n">logging</span><span class="o">.</span><span class="n">DEBUG</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+    <span class="k">except</span><span class="p">:</span>
+        <span class="n">log</span><span class="p">(</span><span class="n">log_msg</span><span class="p">,</span> <span class="n">logging</span><span class="o">.</span><span class="n">ERROR</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+        <span class="k">raise</span>
+
+    <span class="k">return</span> <span class="p">((</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="lcopy"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.execfuncs.lcopy">[docs]</a><span class="k">def</span> <span class="nf">lcopy</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">dest</span><span class="p">,</span> <span class="n">recursive</span> <span class="o">=</span> <span class="bp">False</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Copies from/to localy.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    
+    <span class="n">args</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;cp&quot;</span><span class="p">]</span>
+    <span class="k">if</span> <span class="n">recursive</span><span class="p">:</span>
+        <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&quot;-r&quot;</span><span class="p">)</span>
+  
+    <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
+        <span class="n">args</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">source</span><span class="p">)</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">source</span><span class="p">)</span>
+
+    <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dest</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
+        <span class="n">args</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">dest</span><span class="p">)</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">dest</span><span class="p">)</span>
+
+    <span class="n">proc</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> 
+        <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span> 
+        <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">)</span>
+
+    <span class="n">out</span> <span class="o">=</span> <span class="n">err</span> <span class="o">=</span> <span class="s">&quot;&quot;</span>
+    <span class="n">command</span> <span class="o">=</span> <span class="s">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
+    <span class="n">log_msg</span> <span class="o">=</span> <span class="s">&quot; lcopy - command </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="n">command</span>
+
+    <span class="k">try</span><span class="p">:</span>
+        <span class="n">out</span><span class="p">,</span> <span class="n">err</span> <span class="o">=</span> <span class="n">proc</span><span class="o">.</span><span class="n">communicate</span><span class="p">()</span>
+        <span class="n">log</span><span class="p">(</span><span class="n">log_msg</span><span class="p">,</span> <span class="n">logging</span><span class="o">.</span><span class="n">DEBUG</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+    <span class="k">except</span><span class="p">:</span>
+        <span class="n">log</span><span class="p">(</span><span class="n">log_msg</span><span class="p">,</span> <span class="n">logging</span><span class="o">.</span><span class="n">ERROR</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+        <span class="k">raise</span>
+
+    <span class="k">return</span> <span class="p">((</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span><span class="p">)</span>
+   </div>
+<div class="viewcode-block" id="lspawn"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.execfuncs.lspawn">[docs]</a><span class="k">def</span> <span class="nf">lspawn</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="n">pidfile</span><span class="p">,</span> 
+        <span class="n">stdout</span> <span class="o">=</span> <span class="s">&#39;/dev/null&#39;</span><span class="p">,</span> 
+        <span class="n">stderr</span> <span class="o">=</span> <span class="n">STDOUT</span><span class="p">,</span> 
+        <span class="n">stdin</span> <span class="o">=</span> <span class="s">&#39;/dev/null&#39;</span><span class="p">,</span> 
+        <span class="n">home</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> 
+        <span class="n">create_home</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span> 
+        <span class="n">sudo</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+        <span class="n">user</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span> 
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Spawn a local command such that it will continue working asynchronously.</span>
+<span class="sd">    </span>
+<span class="sd">    Parameters:</span>
+<span class="sd">        command: the command to run - it should be a single line.</span>
+<span class="sd">        </span>
+<span class="sd">        pidfile: path of a (ideally unique to this task) pidfile for tracking the process.</span>
+<span class="sd">        </span>
+<span class="sd">        stdout: path of a file to redirect standard output to - must be a string.</span>
+<span class="sd">            Defaults to /dev/null</span>
+<span class="sd">        stderr: path of a file to redirect standard error to - string or the special STDOUT value</span>
+<span class="sd">            to redirect to the same file stdout was redirected to. Defaults to STDOUT.</span>
+<span class="sd">        stdin: path of a file with input to be piped into the command&#39;s standard input</span>
+<span class="sd">        </span>
+<span class="sd">        home: path of a folder to use as working directory - should exist, unless you specify create_home</span>
+<span class="sd">        </span>
+<span class="sd">        create_home: if True, the home folder will be created first with mkdir -p</span>
+<span class="sd">        </span>
+<span class="sd">        sudo: whether the command needs to be executed as root</span>
+<span class="sd">        </span>
+<span class="sd">    Returns:</span>
+<span class="sd">        (stdout, stderr), process</span>
+<span class="sd">        </span>
+<span class="sd">        Of the spawning process, which only captures errors at spawning time.</span>
+<span class="sd">        Usually only useful for diagnostics.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="c"># Start process in a &quot;daemonized&quot; way, using nohup and heavy</span>
+    <span class="c"># stdin/out redirection to avoid connection issues</span>
+    <span class="k">if</span> <span class="n">stderr</span> <span class="ow">is</span> <span class="n">STDOUT</span><span class="p">:</span>
+        <span class="n">stderr</span> <span class="o">=</span> <span class="s">&#39;&amp;1&#39;</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="n">stderr</span> <span class="o">=</span> <span class="s">&#39; &#39;</span> <span class="o">+</span> <span class="n">stderr</span>
+    
+    <span class="n">daemon_command</span> <span class="o">=</span> <span class="s">&#39;{ { </span><span class="si">%(command)s</span><span class="s">  &gt; </span><span class="si">%(stdout)s</span><span class="s"> 2&gt;</span><span class="si">%(stderr)s</span><span class="s"> &lt; </span><span class="si">%(stdin)s</span><span class="s"> &amp; } ; echo $! 1 &gt; </span><span class="si">%(pidfile)s</span><span class="s"> ; }&#39;</span> <span class="o">%</span> <span class="p">{</span>
+        <span class="s">&#39;command&#39;</span> <span class="p">:</span> <span class="n">command</span><span class="p">,</span>
+        <span class="s">&#39;pidfile&#39;</span> <span class="p">:</span> <span class="n">shell_escape</span><span class="p">(</span><span class="n">pidfile</span><span class="p">),</span>
+        <span class="s">&#39;stdout&#39;</span> <span class="p">:</span> <span class="n">stdout</span><span class="p">,</span>
+        <span class="s">&#39;stderr&#39;</span> <span class="p">:</span> <span class="n">stderr</span><span class="p">,</span>
+        <span class="s">&#39;stdin&#39;</span> <span class="p">:</span> <span class="n">stdin</span><span class="p">,</span>
+    <span class="p">}</span>
+    
+    <span class="n">cmd</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%(create)s%(gohome)s</span><span class="s"> rm -f </span><span class="si">%(pidfile)s</span><span class="s"> ; </span><span class="si">%(sudo)s</span><span class="s"> bash -c </span><span class="si">%(command)s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="p">{</span>
+            <span class="s">&#39;command&#39;</span> <span class="p">:</span> <span class="n">shell_escape</span><span class="p">(</span><span class="n">daemon_command</span><span class="p">),</span>
+            <span class="s">&#39;sudo&#39;</span> <span class="p">:</span> <span class="s">&#39;sudo -S&#39;</span> <span class="k">if</span> <span class="n">sudo</span> <span class="k">else</span> <span class="s">&#39;&#39;</span><span class="p">,</span>
+            <span class="s">&#39;pidfile&#39;</span> <span class="p">:</span> <span class="n">shell_escape</span><span class="p">(</span><span class="n">pidfile</span><span class="p">),</span>
+            <span class="s">&#39;gohome&#39;</span> <span class="p">:</span> <span class="s">&#39;cd </span><span class="si">%s</span><span class="s"> ; &#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">shell_escape</span><span class="p">(</span><span class="n">home</span><span class="p">),)</span> <span class="k">if</span> <span class="n">home</span> <span class="k">else</span> <span class="s">&#39;&#39;</span><span class="p">,</span>
+            <span class="s">&#39;create&#39;</span> <span class="p">:</span> <span class="s">&#39;mkdir -p </span><span class="si">%s</span><span class="s"> ; &#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">shell_escape</span><span class="p">(</span><span class="n">home</span><span class="p">),)</span> <span class="k">if</span> <span class="n">create_home</span> <span class="k">else</span> <span class="s">&#39;&#39;</span><span class="p">,</span>
+        <span class="p">}</span>
+
+    <span class="p">(</span><span class="n">out</span><span class="p">,</span><span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="n">lexec</span><span class="p">(</span><span class="n">cmd</span><span class="p">)</span>
+    
+    <span class="k">if</span> <span class="n">proc</span><span class="o">.</span><span class="n">wait</span><span class="p">():</span>
+        <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="s">&quot;Failed to set up application on host </span><span class="si">%s</span><span class="s">: </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">host</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span><span class="n">err</span><span class="p">,)</span>
+
+    <span class="k">return</span> <span class="p">((</span><span class="n">out</span><span class="p">,</span><span class="n">err</span><span class="p">),</span> <span class="n">proc</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="lgetpid"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.execfuncs.lgetpid">[docs]</a><span class="k">def</span> <span class="nf">lgetpid</span><span class="p">(</span><span class="n">pidfile</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Check the pidfile of a process spawned with remote_spawn.</span>
+<span class="sd">    </span>
+<span class="sd">    Parameters:</span>
+<span class="sd">        pidfile: the pidfile passed to remote_span</span>
+<span class="sd">        </span>
+<span class="sd">    Returns:</span>
+<span class="sd">        </span>
+<span class="sd">        A (pid, ppid) tuple useful for calling remote_status and remote_kill,</span>
+<span class="sd">        or None if the pidfile isn&#39;t valid yet (maybe the process is still starting).</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+
+    <span class="p">(</span><span class="n">out</span><span class="p">,</span><span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="n">lexec</span><span class="p">(</span><span class="s">&quot;cat </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">pidfile</span> <span class="p">)</span>
+        
+    <span class="k">if</span> <span class="n">proc</span><span class="o">.</span><span class="n">wait</span><span class="p">():</span>
+        <span class="k">return</span> <span class="bp">None</span>
+    
+    <span class="k">if</span> <span class="n">out</span><span class="p">:</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="k">return</span> <span class="nb">map</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span><span class="n">out</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39; &#39;</span><span class="p">,</span><span class="mi">1</span><span class="p">))</span>
+        <span class="k">except</span><span class="p">:</span>
+            <span class="c"># Ignore, many ways to fail that don&#39;t matter that much</span>
+            <span class="k">return</span> <span class="bp">None</span>
+</div>
+<div class="viewcode-block" id="lstatus"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.execfuncs.lstatus">[docs]</a><span class="k">def</span> <span class="nf">lstatus</span><span class="p">(</span><span class="n">pid</span><span class="p">,</span> <span class="n">ppid</span><span class="p">):</span> 
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Check the status of a process spawned with remote_spawn.</span>
+<span class="sd">    </span>
+<span class="sd">    Parameters:</span>
+<span class="sd">        pid/ppid: pid and parent-pid of the spawned process. See remote_check_pid</span>
+<span class="sd">        </span>
+<span class="sd">    Returns:</span>
+<span class="sd">        </span>
+<span class="sd">        One of NOT_STARTED, RUNNING, FINISHED</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+
+    <span class="p">(</span><span class="n">out</span><span class="p">,</span><span class="n">err</span><span class="p">),</span> <span class="n">proc</span> <span class="o">=</span> <span class="n">lexec</span><span class="p">(</span>
+        <span class="c"># Check only by pid. pid+ppid does not always work (especially with sudo) </span>
+        <span class="s">&quot; (( ps --pid </span><span class="si">%(pid)d</span><span class="s"> -o pid | grep -c </span><span class="si">%(pid)d</span><span class="s"> &amp;&amp; echo &#39;wait&#39;)  || echo &#39;done&#39; ) | tail -n 1&quot;</span> <span class="o">%</span> <span class="p">{</span>
+            <span class="s">&#39;ppid&#39;</span> <span class="p">:</span> <span class="n">ppid</span><span class="p">,</span>
+            <span class="s">&#39;pid&#39;</span> <span class="p">:</span> <span class="n">pid</span><span class="p">,</span>
+        <span class="p">})</span>
+    
+    <span class="k">if</span> <span class="n">proc</span><span class="o">.</span><span class="n">wait</span><span class="p">():</span>
+        <span class="k">return</span> <span class="n">ProcStatus</span><span class="o">.</span><span class="n">NOT_STARTED</span>
+    
+    <span class="n">status</span> <span class="o">=</span> <span class="bp">False</span>
+    <span class="k">if</span> <span class="n">out</span><span class="p">:</span>
+        <span class="n">status</span> <span class="o">=</span> <span class="p">(</span><span class="n">out</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="o">==</span> <span class="s">&#39;wait&#39;</span><span class="p">)</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="k">return</span> <span class="n">ProcStatus</span><span class="o">.</span><span class="n">NOT_STARTED</span>
+
+    <span class="k">return</span> <span class="n">ProcStatus</span><span class="o">.</span><span class="n">RUNNING</span> <span class="k">if</span> <span class="n">status</span> <span class="k">else</span> <span class="n">ProcStatus</span><span class="o">.</span><span class="n">FINISHED</span>
+</div>
+<div class="viewcode-block" id="lkill"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.execfuncs.lkill">[docs]</a><span class="k">def</span> <span class="nf">lkill</span><span class="p">(</span><span class="n">pid</span><span class="p">,</span> <span class="n">ppid</span><span class="p">,</span> <span class="n">sudo</span> <span class="o">=</span> <span class="bp">False</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Kill a process spawned with lspawn.</span>
+<span class="sd">    </span>
+<span class="sd">    First tries a SIGTERM, and if the process does not end in 10 seconds,</span>
+<span class="sd">    it sends a SIGKILL.</span>
+<span class="sd">    </span>
+<span class="sd">    Parameters:</span>
+<span class="sd">        pid/ppid: pid and parent-pid of the spawned process. See remote_check_pid</span>
+<span class="sd">        </span>
+<span class="sd">        sudo: whether the command was run with sudo - careful killing like this.</span>
+<span class="sd">    </span>
+<span class="sd">    Returns:</span>
+<span class="sd">        </span>
+<span class="sd">        Nothing, should have killed the process</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    
+    <span class="n">subkill</span> <span class="o">=</span> <span class="s">&quot;$(ps --ppid </span><span class="si">%(pid)d</span><span class="s"> -o pid h)&quot;</span> <span class="o">%</span> <span class="p">{</span> <span class="s">&#39;pid&#39;</span> <span class="p">:</span> <span class="n">pid</span> <span class="p">}</span>
+    <span class="n">cmd</span> <span class="o">=</span> <span class="s">&quot;&quot;&quot;</span>
+<span class="s">SUBKILL=&quot;</span><span class="si">%(subkill)s</span><span class="s">&quot; ;</span>
+<span class="si">%(sudo)s</span><span class="s"> kill -- -</span><span class="si">%(pid)d</span><span class="s"> $SUBKILL || /bin/true</span>
+<span class="si">%(sudo)s</span><span class="s"> kill </span><span class="si">%(pid)d</span><span class="s"> $SUBKILL || /bin/true</span>
+<span class="s">for x in 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ; do </span>
+<span class="s">    sleep 0.2 </span>
+<span class="s">    if [ `ps --pid </span><span class="si">%(pid)d</span><span class="s"> -o pid | grep -c </span><span class="si">%(pid)d</span><span class="s">` == &#39;0&#39; ]; then</span>
+<span class="s">        break</span>
+<span class="s">    else</span>
+<span class="s">        </span><span class="si">%(sudo)s</span><span class="s"> kill -- -</span><span class="si">%(pid)d</span><span class="s"> $SUBKILL || /bin/true</span>
+<span class="s">        </span><span class="si">%(sudo)s</span><span class="s"> kill </span><span class="si">%(pid)d</span><span class="s"> $SUBKILL || /bin/true</span>
+<span class="s">    fi</span>
+<span class="s">    sleep 1.8</span>
+<span class="s">done</span>
+<span class="s">if [ `ps --pid </span><span class="si">%(pid)d</span><span class="s"> -o pid | grep -c </span><span class="si">%(pid)d</span><span class="s">` != &#39;0&#39; ]; then</span>
+<span class="s">    </span><span class="si">%(sudo)s</span><span class="s"> kill -9 -- -</span><span class="si">%(pid)d</span><span class="s"> $SUBKILL || /bin/true</span>
+<span class="s">    </span><span class="si">%(sudo)s</span><span class="s"> kill -9 </span><span class="si">%(pid)d</span><span class="s"> $SUBKILL || /bin/true</span>
+<span class="s">fi</span>
+<span class="s">&quot;&quot;&quot;</span>
+    <span class="k">if</span> <span class="n">nowait</span><span class="p">:</span>
+        <span class="n">cmd</span> <span class="o">=</span> <span class="s">&quot;( </span><span class="si">%s</span><span class="s"> ) &gt;/dev/null 2&gt;/dev/null &lt;/dev/null &amp;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">cmd</span><span class="p">,)</span>
+
+    <span class="p">(</span><span class="n">out</span><span class="p">,</span><span class="n">err</span><span class="p">),</span><span class="n">proc</span> <span class="o">=</span> <span class="n">lexec</span><span class="p">(</span>
+        <span class="n">cmd</span> <span class="o">%</span> <span class="p">{</span>
+            <span class="s">&#39;ppid&#39;</span> <span class="p">:</span> <span class="n">ppid</span><span class="p">,</span>
+            <span class="s">&#39;pid&#39;</span> <span class="p">:</span> <span class="n">pid</span><span class="p">,</span>
+            <span class="s">&#39;sudo&#39;</span> <span class="p">:</span> <span class="s">&#39;sudo -S&#39;</span> <span class="k">if</span> <span class="n">sudo</span> <span class="k">else</span> <span class="s">&#39;&#39;</span><span class="p">,</span>
+            <span class="s">&#39;subkill&#39;</span> <span class="p">:</span> <span class="n">subkill</span><span class="p">,</span>
+        <span class="p">})</span>
+    
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/util/guid.html b/doc/sphinx/_build/html/_modules/nepi/util/guid.html
new file mode 100644 (file)
index 0000000..3c9b96d
--- /dev/null
@@ -0,0 +1,123 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.util.guid &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../index.html" />
+    <link rel="up" title="Module code" href="../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.util.guid</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="c"># FIXME: This class is not thread-safe. </span>
+<span class="c"># Should it be made thread-safe?</span>
+<div class="viewcode-block" id="GuidGenerator"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.guid.GuidGenerator">[docs]</a><span class="k">class</span> <span class="nc">GuidGenerator</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_last_guid</span> <span class="o">=</span> <span class="mi">0</span>
+
+<div class="viewcode-block" id="GuidGenerator.next"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.guid.GuidGenerator.next">[docs]</a>    <span class="k">def</span> <span class="nf">next</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">guid</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="k">if</span> <span class="n">guid</span> <span class="o">==</span> <span class="bp">None</span><span class="p">:</span>
+            <span class="n">guid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_last_guid</span> <span class="o">+</span> <span class="mi">1</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">_last_guid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_last_guid</span> <span class="k">if</span> <span class="n">guid</span> <span class="o">&lt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_last_guid</span> <span class="k">else</span> <span class="n">guid</span>
+
+        <span class="k">return</span> <span class="n">guid</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/util/logger.html b/doc/sphinx/_build/html/_modules/nepi/util/logger.html
new file mode 100644 (file)
index 0000000..ebcb7ba
--- /dev/null
@@ -0,0 +1,145 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.util.logger &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../index.html" />
+    <link rel="up" title="Module code" href="../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.util.logger</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">import</span> <span class="nn">logging</span>
+
+<div class="viewcode-block" id="Logger"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.logger.Logger">[docs]</a><span class="k">class</span> <span class="nc">Logger</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">logger_component</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="n">logger_component</span><span class="p">)</span>
+
+<div class="viewcode-block" id="Logger.debug"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.logger.Logger.debug">[docs]</a>    <span class="k">def</span> <span class="nf">debug</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg</span><span class="p">,</span> <span class="n">out</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">err</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">logging</span><span class="o">.</span><span class="n">DEBUG</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="Logger.error"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.logger.Logger.error">[docs]</a>    <span class="k">def</span> <span class="nf">error</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg</span><span class="p">,</span> <span class="n">out</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">err</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">logging</span><span class="o">.</span><span class="n">ERROR</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="Logger.warning"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.logger.Logger.warning">[docs]</a>    <span class="k">def</span> <span class="nf">warning</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg</span><span class="p">,</span> <span class="n">out</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">err</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">logging</span><span class="o">.</span><span class="n">WARNING</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="Logger.info"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.logger.Logger.info">[docs]</a>    <span class="k">def</span> <span class="nf">info</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg</span><span class="p">,</span> <span class="n">out</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">err</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">logging</span><span class="o">.</span><span class="n">INFO</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="Logger.log"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.logger.Logger.log">[docs]</a>    <span class="k">def</span> <span class="nf">log</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg</span><span class="p">,</span> <span class="n">level</span><span class="p">,</span> <span class="n">out</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">err</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="k">if</span> <span class="n">out</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">+=</span> <span class="s">&quot; - OUT: </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="n">out</span>
+
+        <span class="k">if</span> <span class="n">err</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">+=</span> <span class="s">&quot; - ERROR: </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="n">err</span>
+
+        <span class="n">msg</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">log_message</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="n">level</span><span class="p">,</span> <span class="n">msg</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="Logger.log_message"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.logger.Logger.log_message">[docs]</a>    <span class="k">def</span> <span class="nf">log_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">msg</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="Logger.logger"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.logger.Logger.logger">[docs]</a>    <span class="k">def</span> <span class="nf">logger</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_logger</span></div></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/util/manifoldapi.html b/doc/sphinx/_build/html/_modules/nepi/util/manifoldapi.html
new file mode 100644 (file)
index 0000000..51245ad
--- /dev/null
@@ -0,0 +1,361 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.util.manifoldapi &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../index.html" />
+    <link rel="up" title="Module code" href="../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.util.manifoldapi</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Lucia Guevgeozian Odizzio &lt;lucia.guevgeozian_odizzio@inria.fr&gt;</span>
+
+<span class="kn">import</span> <span class="nn">xmlrpclib</span>
+<span class="kn">import</span> <span class="nn">hashlib</span>
+<span class="kn">import</span> <span class="nn">threading</span>
+
+
+<div class="viewcode-block" id="MANIFOLDAPI"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.manifoldapi.MANIFOLDAPI">[docs]</a><span class="k">class</span> <span class="nc">MANIFOLDAPI</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    API to query different data platforms as SFA, TopHat, OML Central Server,</span>
+<span class="sd">    using Manifold Framework, the backend of MySlice.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">username</span><span class="p">,</span> <span class="n">password</span><span class="p">,</span> <span class="n">hostname</span><span class="p">,</span> <span class="n">urlpattern</span><span class="p">):</span> 
+        
+        <span class="bp">self</span><span class="o">.</span><span class="n">auth_pwd</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="n">AuthMethod</span><span class="o">=</span><span class="s">&#39;password&#39;</span><span class="p">,</span> <span class="n">Username</span><span class="o">=</span><span class="n">username</span><span class="p">,</span> 
+            <span class="n">AuthString</span><span class="o">=</span><span class="n">password</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_url</span> <span class="o">=</span> <span class="n">urlpattern</span> <span class="o">%</span> <span class="p">{</span><span class="s">&#39;hostname&#39;</span><span class="p">:</span><span class="n">hostname</span><span class="p">}</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">lock</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Lock</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">auth</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_session_key</span><span class="p">()</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="MANIFOLDAPI.api"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.manifoldapi.MANIFOLDAPI.api">[docs]</a>    <span class="k">def</span> <span class="nf">api</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">xmlrpclib</span><span class="o">.</span><span class="n">Server</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_url</span><span class="p">,</span> <span class="n">allow_none</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="MANIFOLDAPI.get_session_key"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.manifoldapi.MANIFOLDAPI.get_session_key">[docs]</a>    <span class="k">def</span> <span class="nf">get_session_key</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Retrieves the session key, in order to use the same session for </span>
+<span class="sd">        queries.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">query</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;timestamp&#39;</span> <span class="p">:</span> <span class="s">&#39;now&#39;</span><span class="p">,</span> <span class="s">&#39;object&#39;</span><span class="p">:</span> <span class="s">&#39;local:session&#39;</span><span class="p">,</span>      
+            <span class="s">&#39;filters&#39;</span> <span class="p">:</span> <span class="p">[],</span> <span class="s">&#39;fields&#39;</span> <span class="p">:</span> <span class="p">[],</span> <span class="s">&#39;action&#39;</span> <span class="p">:</span> <span class="s">&#39;create&#39;</span><span class="p">}</span>
+
+        <span class="n">session</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">api</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">auth_pwd</span><span class="p">,</span> <span class="n">query</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">session</span><span class="p">[</span><span class="s">&#39;value&#39;</span><span class="p">]:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Can not authenticate in Manifold API&quot;</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
+
+        <span class="n">session_key</span> <span class="o">=</span> <span class="n">session</span><span class="p">[</span><span class="s">&#39;value&#39;</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="s">&#39;session&#39;</span><span class="p">]</span>
+        <span class="k">return</span> <span class="nb">dict</span><span class="p">(</span><span class="n">AuthMethod</span><span class="o">=</span><span class="s">&#39;session&#39;</span><span class="p">,</span> <span class="n">session</span><span class="o">=</span><span class="n">session_key</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="MANIFOLDAPI.get_resource_info"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.manifoldapi.MANIFOLDAPI.get_resource_info">[docs]</a>    <span class="k">def</span> <span class="nf">get_resource_info</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filters</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">fields</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Create and execute the Manifold API Query to get the resources </span>
+<span class="sd">        according fields and filters.</span>
+<span class="sd">        :param filters: resource&#39;s constraints for the experiment</span>
+<span class="sd">        :type filters: dict</span>
+<span class="sd">        :param fields: desire fields in the result of the query</span>
+<span class="sd">        :type fields: list</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">query</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;action&#39;</span> <span class="p">:</span> <span class="s">&#39;get&#39;</span><span class="p">,</span> <span class="s">&#39;object&#39;</span> <span class="p">:</span> <span class="s">&#39;resource&#39;</span><span class="p">}</span>
+
+        <span class="k">if</span> <span class="n">filters</span><span class="p">:</span>
+            <span class="n">filters</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_map_attr_to_resource_filters</span><span class="p">(</span><span class="n">filters</span><span class="p">)</span>
+
+            <span class="n">qfilters</span> <span class="o">=</span> <span class="nb">list</span><span class="p">()</span>
+            <span class="k">for</span> <span class="n">filtername</span><span class="p">,</span> <span class="n">filtervalue</span> <span class="ow">in</span> <span class="n">filters</span><span class="o">.</span><span class="n">iteritems</span><span class="p">():</span>
+                <span class="n">newfilter</span> <span class="o">=</span> <span class="p">[</span><span class="n">filtername</span><span class="p">,</span> <span class="s">&quot;==&quot;</span><span class="p">,</span> <span class="n">filtervalue</span><span class="p">]</span>
+                <span class="n">qfilters</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">newfilter</span><span class="p">)</span>
+            
+            <span class="n">query</span><span class="p">[</span><span class="s">&#39;filters&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">qfilters</span>
+
+        <span class="k">if</span> <span class="n">fields</span><span class="p">:</span>
+            <span class="n">fields</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_valid_fields</span><span class="p">(</span><span class="n">fields</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="n">fields</span><span class="p">:</span>
+                <span class="n">query</span><span class="p">[</span><span class="s">&#39;fields&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">fields</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">api</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">auth</span><span class="p">,</span> <span class="n">query</span><span class="p">)[</span><span class="s">&#39;value&#39;</span><span class="p">]</span>
+        </div>
+<div class="viewcode-block" id="MANIFOLDAPI.get_resource_urn"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.manifoldapi.MANIFOLDAPI.get_resource_urn">[docs]</a>    <span class="k">def</span> <span class="nf">get_resource_urn</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filters</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Retrieves the resources urn of the resources matching filters.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_resource_info</span><span class="p">(</span><span class="n">filters</span><span class="p">,</span> <span class="s">&#39;urn&#39;</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="MANIFOLDAPI.get_slice_resources"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.manifoldapi.MANIFOLDAPI.get_slice_resources">[docs]</a>    <span class="k">def</span> <span class="nf">get_slice_resources</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">slicename</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Retrieves resources attached to user&#39;s slice.</span>
+<span class="sd">        return value: list of resources&#39; urn</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="n">query</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;action&#39;</span> <span class="p">:</span> <span class="s">&#39;get&#39;</span><span class="p">,</span> <span class="s">&#39;object&#39;</span> <span class="p">:</span> <span class="s">&#39;resource&#39;</span><span class="p">,</span> 
+            <span class="s">&#39;filters&#39;</span> <span class="p">:</span> <span class="p">[[</span><span class="s">&#39;slice&#39;</span><span class="p">,</span><span class="s">&#39;==&#39;</span><span class="p">,</span> <span class="n">slicename</span><span class="p">]],</span>
+            <span class="s">&#39;fields&#39;</span> <span class="p">:</span> <span class="p">[</span><span class="s">&#39;urn&#39;</span><span class="p">]}</span>
+
+        <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">lock</span><span class="p">:</span>
+            <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">api</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">auth</span><span class="p">,</span> <span class="n">query</span><span class="p">)[</span><span class="s">&#39;value&#39;</span><span class="p">]</span>
+
+        <span class="k">for</span> <span class="n">resource</span> <span class="ow">in</span> <span class="n">value</span><span class="p">:</span>
+            <span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">resource</span><span class="p">[</span><span class="s">&#39;urn&#39;</span><span class="p">])</span>
+        
+        <span class="k">return</span> <span class="n">result</span>
+</div>
+<div class="viewcode-block" id="MANIFOLDAPI.add_resource_to_slice"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.manifoldapi.MANIFOLDAPI.add_resource_to_slice">[docs]</a>    <span class="k">def</span> <span class="nf">add_resource_to_slice</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">slicename</span><span class="p">,</span> <span class="n">resource_urn</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Add resource to user&#39;s slice. The query needs to specify the new</span>
+<span class="sd">        resource plus the previous resources already in the slice.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">resources</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_slice_resources</span><span class="p">(</span><span class="n">slicename</span><span class="p">)</span>
+        <span class="n">resources</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">resource_urn</span><span class="p">)</span> 
+
+        <span class="n">urn_list</span> <span class="o">=</span> <span class="nb">list</span><span class="p">()</span>
+        <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">resources</span><span class="p">:</span>
+            <span class="n">urn_dict</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
+            <span class="n">urn_dict</span><span class="p">[</span><span class="s">&#39;urn&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">r</span>
+            <span class="n">urn_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">urn_dict</span><span class="p">)</span>
+            
+        <span class="n">query</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;action&#39;</span> <span class="p">:</span> <span class="s">&#39;update&#39;</span><span class="p">,</span> <span class="s">&#39;object&#39;</span> <span class="p">:</span> <span class="s">&#39;slice&#39;</span><span class="p">,</span> 
+            <span class="s">&#39;filters&#39;</span> <span class="p">:</span> <span class="p">[[</span><span class="s">&#39;slice_hrn&#39;</span><span class="p">,</span><span class="s">&#39;==&#39;</span><span class="p">,</span> <span class="n">slicename</span><span class="p">]],</span>
+            <span class="s">&#39;params&#39;</span> <span class="p">:</span> <span class="p">{</span><span class="s">&#39;resource&#39;</span> <span class="p">:</span> <span class="n">urn_list</span><span class="p">}}</span>
+        <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">lock</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">api</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">auth</span><span class="p">,</span> <span class="n">query</span><span class="p">)</span>
+
+        <span class="n">resources</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_slice_resources</span><span class="p">(</span><span class="n">slicename</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">resource_urn</span> <span class="ow">in</span> <span class="n">resources</span><span class="p">:</span>
+            <span class="k">return</span> <span class="bp">True</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Failed while trying to add </span><span class="si">%s</span><span class="s"> to slice&quot;</span> <span class="o">%</span> <span class="n">resource_urn</span>
+            <span class="k">print</span> <span class="n">msg</span>
+            <span class="c"># check how to do warning</span>
+            <span class="k">return</span> <span class="bp">False</span>
+</div>
+<div class="viewcode-block" id="MANIFOLDAPI.remove_resource_from_slice"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.manifoldapi.MANIFOLDAPI.remove_resource_from_slice">[docs]</a>    <span class="k">def</span> <span class="nf">remove_resource_from_slice</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">slicename</span><span class="p">,</span> <span class="n">resource_urn</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Remove resource from user&#39;s slice. The query needs to specify the list</span>
+<span class="sd">        of previous resources in the slice without the one to be remove.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">resources</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_slice_resources</span><span class="p">(</span><span class="n">slicename</span><span class="p">)</span>
+        <span class="n">resources</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">resource_urn</span><span class="p">)</span>
+
+        <span class="n">urn_list</span> <span class="o">=</span> <span class="nb">list</span><span class="p">()</span>
+        <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">resources</span><span class="p">:</span>
+            <span class="n">urn_dict</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
+            <span class="n">urn_dict</span><span class="p">[</span><span class="s">&#39;urn&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">r</span>
+            <span class="n">urn_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">urn_dict</span><span class="p">)</span>
+
+        <span class="n">query</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;action&#39;</span> <span class="p">:</span> <span class="s">&#39;update&#39;</span><span class="p">,</span> <span class="s">&#39;object&#39;</span> <span class="p">:</span> <span class="s">&#39;slice&#39;</span><span class="p">,</span>
+            <span class="s">&#39;filters&#39;</span> <span class="p">:</span> <span class="p">[[</span><span class="s">&#39;slice_hrn&#39;</span><span class="p">,</span><span class="s">&#39;==&#39;</span><span class="p">,</span> <span class="n">slicename</span><span class="p">]],</span>
+            <span class="s">&#39;params&#39;</span> <span class="p">:</span> <span class="p">{</span><span class="s">&#39;resource&#39;</span> <span class="p">:</span> <span class="n">urn_list</span><span class="p">}}</span>
+
+        <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">lock</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">api</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">auth</span><span class="p">,</span> <span class="n">query</span><span class="p">)</span>
+
+        <span class="n">resources</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_slice_resources</span><span class="p">(</span><span class="n">slicename</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">resource_urn</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">resources</span><span class="p">:</span>
+            <span class="k">return</span> <span class="bp">True</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Failed while trying to remove </span><span class="si">%s</span><span class="s"> to slice&quot;</span> <span class="o">%</span> <span class="n">resource_urn</span>
+            <span class="c"># check how to do warning</span>
+            <span class="k">return</span> <span class="bp">False</span>
+</div>
+    <span class="k">def</span> <span class="nf">_get_metadata</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        This method is useful to retrive metadata from different platforms</span>
+<span class="sd">        in order to update fields and possible filters.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">query</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;action&#39;</span> <span class="p">:</span> <span class="s">&#39;get&#39;</span><span class="p">,</span> <span class="s">&#39;object&#39;</span> <span class="p">:</span> <span class="s">&#39;local:object&#39;</span><span class="p">,</span> 
+            <span class="s">&#39;filters&#39;</span> <span class="p">:</span> <span class="p">[[</span><span class="s">&#39;table&#39;</span><span class="p">,</span><span class="s">&#39;=&#39;</span><span class="p">,</span><span class="s">&#39;resource&#39;</span><span class="p">]]}</span>
+        
+        <span class="n">res</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">api</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">auth</span><span class="p">,</span> <span class="n">query</span><span class="p">)</span>
+
+        <span class="n">valid_fields</span> <span class="o">=</span> <span class="nb">list</span><span class="p">()</span>
+        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">res</span><span class="p">[</span><span class="s">&#39;value&#39;</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="s">&#39;column&#39;</span><span class="p">]:</span>
+            <span class="n">valid_fields</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">i</span><span class="p">[</span><span class="s">&#39;name&#39;</span><span class="p">])</span>
+
+        <span class="k">return</span> <span class="n">valid_fields</span>
+        
+    <span class="k">def</span> <span class="nf">_map_attr_to_resource_filters</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filters</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Depending on the object used for the Manifold query, the filters and </span>
+<span class="sd">        fields can change its sintaxis. A resource field in a slice object</span>
+<span class="sd">        query adds &#39;resource.&#39; to the field. Other changes don&#39;t follow any </span>
+<span class="sd">        particular convention.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="c">#TODO: find out useful filters</span>
+        <span class="n">attr_to_filter</span> <span class="o">=</span> <span class="p">{</span>
+            <span class="s">&#39;hostname&#39;</span> <span class="p">:</span> <span class="s">&#39;hostname&#39;</span><span class="p">,</span>
+            <span class="s">&#39;longitude&#39;</span> <span class="p">:</span> <span class="s">&#39;longitude&#39;</span><span class="p">,</span>
+            <span class="s">&#39;latitude&#39;</span> <span class="p">:</span> <span class="s">&#39;latitude&#39;</span><span class="p">,</span>
+            <span class="s">&#39;network&#39;</span> <span class="p">:</span> <span class="s">&#39;network&#39;</span><span class="p">,</span>
+            <span class="s">&#39;component_id&#39;</span> <span class="p">:</span> <span class="s">&#39;component_id&#39;</span>
+        <span class="p">}</span>
+
+        <span class="n">mapped_filters</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
+        <span class="k">for</span> <span class="n">filtername</span><span class="p">,</span> <span class="n">filtervalue</span> <span class="ow">in</span> <span class="n">filters</span><span class="o">.</span><span class="n">iteritems</span><span class="p">():</span>
+            <span class="k">if</span> <span class="n">attr_to_filter</span><span class="p">[</span><span class="n">filtername</span><span class="p">]:</span>
+                <span class="n">new_filtername</span> <span class="o">=</span> <span class="n">attr_to_filter</span><span class="p">[</span><span class="n">filtername</span><span class="p">]</span>
+                <span class="n">mapped_filters</span><span class="p">[</span><span class="n">new_filtername</span><span class="p">]</span> <span class="o">=</span> <span class="n">filtervalue</span>
+        
+        <span class="k">return</span> <span class="n">mapped_filters</span>
+         
+    <span class="k">def</span> <span class="nf">_check_valid_fields</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">fields</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        The fields can be a predefine set, define in the Manifold metadata.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">valid_fields</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_metadata</span><span class="p">()</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">fields</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
+            <span class="n">fields</span> <span class="o">=</span> <span class="p">[</span><span class="n">fields</span><span class="p">]</span>
+
+        <span class="k">for</span> <span class="n">field</span> <span class="ow">in</span> <span class="n">fields</span><span class="p">:</span>
+            <span class="k">if</span> <span class="n">field</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">valid_fields</span><span class="p">:</span>
+                <span class="n">fields</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">field</span><span class="p">)</span>
+                <span class="c">#self.warning(&quot; Invalid Manifold field or filter &quot;)</span>
+        
+        <span class="k">return</span> <span class="n">fields</span>
+
+</div>
+<div class="viewcode-block" id="MANIFOLDAPIFactory"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.manifoldapi.MANIFOLDAPIFactory">[docs]</a><span class="k">class</span> <span class="nc">MANIFOLDAPIFactory</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    API Factory to manage a map of MANIFOLDAPI instances as key-value pairs, it</span>
+<span class="sd">    instanciate a single instance per key. The key represents the same SFA, </span>
+<span class="sd">    MF (ManiFold) credentials.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+
+    <span class="n">_lock</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Lock</span><span class="p">()</span>
+    <span class="n">_apis</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
+
+    <span class="nd">@classmethod</span>
+<div class="viewcode-block" id="MANIFOLDAPIFactory.get_api"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.manifoldapi.MANIFOLDAPIFactory.get_api">[docs]</a>    <span class="k">def</span> <span class="nf">get_api</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">username</span><span class="p">,</span> <span class="n">password</span><span class="p">,</span> 
+            <span class="c">#hostname = &quot;manifold.pl.sophia.inria.fr&quot;,</span>
+            <span class="n">hostname</span> <span class="o">=</span><span class="s">&quot;test.myslice.info&quot;</span><span class="p">,</span>
+            <span class="n">urlpattern</span> <span class="o">=</span> <span class="s">&quot;http://</span><span class="si">%(hostname)s</span><span class="s">:7080&quot;</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        :param username: Manifold user (also used for MySlice web login)</span>
+<span class="sd">        :type username: str</span>
+<span class="sd">        :param password: Manifold password (also used for MySlice web login)</span>
+<span class="sd">        :type password: str</span>
+<span class="sd">        :param hostname: Hostname of the Manifold API to query SFA, TopHat, etc</span>
+<span class="sd">        :type hostname: str</span>
+<span class="sd">        :param urlpattern: Url of the Manifold API to query SFA, TopHat, etc</span>
+<span class="sd">        :type urlpattern: str</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+
+        <span class="k">if</span> <span class="n">username</span> <span class="ow">and</span> <span class="n">password</span><span class="p">:</span>
+            <span class="n">key</span> <span class="o">=</span> <span class="n">cls</span><span class="o">.</span><span class="n">make_key</span><span class="p">(</span><span class="n">username</span><span class="p">,</span> <span class="n">password</span><span class="p">)</span>
+            <span class="k">with</span> <span class="n">cls</span><span class="o">.</span><span class="n">_lock</span><span class="p">:</span>
+                <span class="n">api</span> <span class="o">=</span> <span class="n">cls</span><span class="o">.</span><span class="n">_apis</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
+    
+                <span class="k">if</span> <span class="ow">not</span> <span class="n">api</span><span class="p">:</span>
+                    <span class="n">api</span> <span class="o">=</span> <span class="n">MANIFOLDAPI</span><span class="p">(</span><span class="n">username</span><span class="p">,</span> <span class="n">password</span><span class="p">,</span> <span class="n">hostname</span><span class="p">,</span> <span class="n">urlpattern</span><span class="p">)</span>
+                    <span class="n">cls</span><span class="o">.</span><span class="n">_apis</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">api</span>
+
+                <span class="k">return</span> <span class="n">api</span>
+
+        <span class="k">return</span> <span class="bp">None</span>
+</div>
+    <span class="nd">@classmethod</span>
+<div class="viewcode-block" id="MANIFOLDAPIFactory.make_key"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.manifoldapi.MANIFOLDAPIFactory.make_key">[docs]</a>    <span class="k">def</span> <span class="nf">make_key</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
+        <span class="n">skey</span> <span class="o">=</span> <span class="s">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">args</span><span class="p">))</span>
+        <span class="k">return</span> <span class="n">hashlib</span><span class="o">.</span><span class="n">md5</span><span class="p">(</span><span class="n">skey</span><span class="p">)</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/util/netgraph.html b/doc/sphinx/_build/html/_modules/nepi/util/netgraph.html
new file mode 100644 (file)
index 0000000..c1c5ad8
--- /dev/null
@@ -0,0 +1,434 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.util.netgraph &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../index.html" />
+    <link rel="up" title="Module code" href="../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.util.netgraph</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">import</span> <span class="nn">ipaddr</span>
+<span class="kn">import</span> <span class="nn">networkx</span>
+<span class="kn">import</span> <span class="nn">math</span>
+<span class="kn">import</span> <span class="nn">random</span>
+
+<div class="viewcode-block" id="TopologyType"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.netgraph.TopologyType">[docs]</a><span class="k">class</span> <span class="nc">TopologyType</span><span class="p">:</span>
+    <span class="n">LINEAR</span> <span class="o">=</span> <span class="s">&quot;linear&quot;</span>
+    <span class="n">LADDER</span> <span class="o">=</span> <span class="s">&quot;ladder&quot;</span>
+    <span class="n">MESH</span> <span class="o">=</span> <span class="s">&quot;mesh&quot;</span>
+    <span class="n">TREE</span> <span class="o">=</span> <span class="s">&quot;tree&quot;</span>
+    <span class="n">STAR</span> <span class="o">=</span> <span class="s">&quot;star&quot;</span>
+    <span class="n">ADHOC</span> <span class="o">=</span> <span class="s">&quot;adhoc&quot;</span>
+
+<span class="c">## TODO: </span>
+<span class="c">##      - AQ: Add support for hypergraphs (to be able to add hyper edges to </span>
+<span class="c">##        model CSMA or wireless networks)</span>
+</div>
+<div class="viewcode-block" id="NetGraph"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.netgraph.NetGraph">[docs]</a><span class="k">class</span> <span class="nc">NetGraph</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot; NetGraph represents a network topology. </span>
+<span class="sd">    Network graphs are internally using the networkx library.</span>
+
+<span class="sd">    &quot;&quot;&quot;</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; A graph can be generated using a specified pattern </span>
+<span class="sd">        (LADDER, MESH, TREE, etc), or provided as an argument.</span>
+
+<span class="sd">            :param topology: Undirected graph to use as internal representation </span>
+<span class="sd">            :type topology: networkx.Graph</span>
+
+<span class="sd">            :param topo_type: One of TopologyType.{LINEAR,LADDER,MESH,TREE,STAR}</span>
+<span class="sd">            used to automatically generate the topology graph. </span>
+<span class="sd">            :type topo_type: TopologyType</span>
+
+<span class="sd">            :param node_count: Number of nodes in the topology to be generated. </span>
+<span class="sd">            :type node_count: int</span>
+
+<span class="sd">            :param branches: Number of branches (arms) for the STAR topology. </span>
+<span class="sd">            :type branches: int</span>
+
+
+<span class="sd">            :param assign_ips: Automatically assign IP addresses to each node. </span>
+<span class="sd">            :type assign_ips: bool</span>
+
+<span class="sd">            :param network: Base network segment for IP address assignment.</span>
+<span class="sd">            :type network: str</span>
+
+<span class="sd">            :param prefix: Base network prefix for IP address assignment.</span>
+<span class="sd">            :type prefix: int</span>
+
+<span class="sd">            :param version: IP version for IP address assignment.</span>
+<span class="sd">            :type version: int</span>
+
+<span class="sd">            :param assign_st: Select source and target nodes on the graph.</span>
+<span class="sd">            :type assign_st: bool</span>
+
+<span class="sd">          :param sources_targets: dictionary with the list of sources (key =</span>
+<span class="sd">            &quot;sources&quot;) and list of targets (key = &quot;targets&quot;) if defined, ignore</span>
+<span class="sd">            assign_st</span>
+<span class="sd">          :type sources_targets: dictionary of lists</span>
+
+<span class="sd">          :param leaf_source: if True, random sources will be selected only </span>
+<span class="sd">            from leaf nodes.</span>
+<span class="sd">          :type leaf_source: bool</span>
+
+<span class="sd">        NOTE: Only point-to-point like network topologies are supported for now.</span>
+<span class="sd">                (Wireless and Ethernet networks were several nodes share the same</span>
+<span class="sd">                edge (hyperedge) can not be modeled for the moment).</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_topology</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;topology&quot;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_topo_type</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;topo_type&quot;</span><span class="p">,</span> <span class="n">TopologyType</span><span class="o">.</span><span class="n">ADHOC</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="p">:</span>
+            <span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;node_count&quot;</span><span class="p">):</span>
+                <span class="n">node_count</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">&quot;node_count&quot;</span><span class="p">]</span>
+                <span class="n">branches</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;branches&quot;</span><span class="p">)</span>
+
+                <span class="bp">self</span><span class="o">.</span><span class="n">_topology</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">generate_topology</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">topo_type</span><span class="p">,</span> 
+                        <span class="n">node_count</span><span class="p">,</span> <span class="n">branches</span> <span class="o">=</span> <span class="n">branches</span><span class="p">)</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_topology</span> <span class="o">=</span> <span class="n">networkx</span><span class="o">.</span><span class="n">Graph</span><span class="p">()</span>
+
+        <span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;assign_ips&quot;</span><span class="p">):</span>
+            <span class="n">network</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;network&quot;</span><span class="p">,</span> <span class="s">&quot;10.0.0.0&quot;</span><span class="p">)</span>
+            <span class="n">prefix</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;prefix&quot;</span><span class="p">,</span> <span class="mi">8</span><span class="p">)</span>
+            <span class="n">version</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;version&quot;</span><span class="p">,</span> <span class="mi">4</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">assign_p2p_ips</span><span class="p">(</span><span class="n">network</span> <span class="o">=</span> <span class="n">network</span><span class="p">,</span> <span class="n">prefix</span> <span class="o">=</span> <span class="n">prefix</span><span class="p">,</span> 
+                    <span class="n">version</span> <span class="o">=</span> <span class="n">version</span><span class="p">)</span>
+
+       <span class="n">sources_targets</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;sources_targets&quot;</span><span class="p">)</span>
+       <span class="k">if</span> <span class="n">sources_targets</span><span class="p">:</span>
+            <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">set_source</span><span class="p">(</span><span class="n">n</span><span class="p">)</span> <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">sources_targets</span><span class="p">[</span><span class="s">&quot;sources&quot;</span><span class="p">]]</span>
+           <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">set_target</span><span class="p">(</span><span class="n">n</span><span class="p">)</span> <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">sources_targets</span><span class="p">[</span><span class="s">&quot;targets&quot;</span><span class="p">]]</span>
+       <span class="k">elif</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;assign_st&quot;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">select_target_zero</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">select_random_source</span><span class="p">(</span><span class="n">is_leaf</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;leaf_source&quot;</span><span class="p">))</span>
+
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NetGraph.topology"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.netgraph.NetGraph.topology">[docs]</a>    <span class="k">def</span> <span class="nf">topology</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_topology</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NetGraph.topo_type"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.netgraph.NetGraph.topo_type">[docs]</a>    <span class="k">def</span> <span class="nf">topo_type</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_topo_type</span>
+</div>
+    <span class="nd">@property</span>
+<div class="viewcode-block" id="NetGraph.order"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.netgraph.NetGraph.order">[docs]</a>    <span class="k">def</span> <span class="nf">order</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="o">.</span><span class="n">order</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="NetGraph.nodes"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.netgraph.NetGraph.nodes">[docs]</a>    <span class="k">def</span> <span class="nf">nodes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="o">.</span><span class="n">nodes</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="NetGraph.edges"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.netgraph.NetGraph.edges">[docs]</a>    <span class="k">def</span> <span class="nf">edges</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="o">.</span><span class="n">edges</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="NetGraph.generate_topology"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.netgraph.NetGraph.generate_topology">[docs]</a>    <span class="k">def</span> <span class="nf">generate_topology</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">topo_type</span><span class="p">,</span> <span class="n">node_count</span><span class="p">,</span> <span class="n">branches</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+        <span class="k">if</span> <span class="n">topo_type</span> <span class="o">==</span> <span class="n">TopologyType</span><span class="o">.</span><span class="n">LADDER</span><span class="p">:</span>
+            <span class="n">total_nodes</span> <span class="o">=</span> <span class="n">node_count</span><span class="o">/</span><span class="mi">2</span>
+            <span class="n">graph</span> <span class="o">=</span> <span class="n">networkx</span><span class="o">.</span><span class="n">ladder_graph</span><span class="p">(</span><span class="n">total_nodes</span><span class="p">)</span>
+
+        <span class="k">elif</span> <span class="n">topo_type</span> <span class="o">==</span> <span class="n">TopologyType</span><span class="o">.</span><span class="n">LINEAR</span><span class="p">:</span>
+            <span class="n">graph</span> <span class="o">=</span> <span class="n">networkx</span><span class="o">.</span><span class="n">path_graph</span><span class="p">(</span><span class="n">node_count</span><span class="p">)</span>
+
+        <span class="k">elif</span> <span class="n">topo_type</span> <span class="o">==</span> <span class="n">TopologyType</span><span class="o">.</span><span class="n">MESH</span><span class="p">:</span>
+            <span class="n">graph</span> <span class="o">=</span> <span class="n">networkx</span><span class="o">.</span><span class="n">complete_graph</span><span class="p">(</span><span class="n">node_count</span><span class="p">)</span>
+
+        <span class="k">elif</span> <span class="n">topo_type</span> <span class="o">==</span> <span class="n">TopologyType</span><span class="o">.</span><span class="n">TREE</span><span class="p">:</span>
+            <span class="n">h</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="n">node_count</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span><span class="o">/</span><span class="n">math</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span>
+            <span class="n">graph</span> <span class="o">=</span> <span class="n">networkx</span><span class="o">.</span><span class="n">balanced_tree</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="n">h</span><span class="p">)</span>
+
+        <span class="k">elif</span> <span class="n">topo_type</span> <span class="o">==</span> <span class="n">TopologyType</span><span class="o">.</span><span class="n">STAR</span><span class="p">:</span>
+            <span class="n">graph</span> <span class="o">=</span> <span class="n">networkx</span><span class="o">.</span><span class="n">Graph</span><span class="p">()</span>
+            <span class="n">graph</span><span class="o">.</span><span class="n">add_node</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+
+            <span class="n">nodesinbranch</span> <span class="o">=</span> <span class="p">(</span><span class="n">node_count</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span><span class="o">/</span> <span class="n">BRANCHES</span>
+            <span class="n">c</span> <span class="o">=</span> <span class="mi">1</span>
+
+            <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="n">BRANCHES</span><span class="p">):</span>
+                <span class="n">prev</span> <span class="o">=</span> <span class="mi">0</span>
+                <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">nodesinbranch</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span>
+                    <span class="n">graph</span><span class="o">.</span><span class="n">add_node</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
+                    <span class="n">graph</span><span class="o">.</span><span class="n">add_edge</span><span class="p">(</span><span class="n">prev</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span>
+                    <span class="n">prev</span> <span class="o">=</span> <span class="n">c</span>
+                    <span class="n">c</span> <span class="o">+=</span> <span class="mi">1</span>
+
+        <span class="k">return</span> <span class="n">graph</span>
+</div>
+<div class="viewcode-block" id="NetGraph.add_node"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.netgraph.NetGraph.add_node">[docs]</a>    <span class="k">def</span> <span class="nf">add_node</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nid</span><span class="p">):</span>
+        <span class="k">if</span> <span class="n">nid</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="p">:</span> 
+            <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="o">.</span><span class="n">add_node</span><span class="p">(</span><span class="n">nid</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NetGraph.add_edge"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.netgraph.NetGraph.add_edge">[docs]</a>    <span class="k">def</span> <span class="nf">add_edge</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nid1</span><span class="p">,</span> <span class="n">nid2</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">add_node</span><span class="p">(</span><span class="n">nid1</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">add_node</span><span class="p">(</span> <span class="n">nid2</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">nid1</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="p">[</span><span class="n">nid2</span><span class="p">]:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="o">.</span><span class="n">add_edge</span><span class="p">(</span><span class="n">nid2</span><span class="p">,</span> <span class="n">nid1</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NetGraph.annotate_node_ip"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.netgraph.NetGraph.annotate_node_ip">[docs]</a>    <span class="k">def</span> <span class="nf">annotate_node_ip</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nid</span><span class="p">,</span> <span class="n">ip</span><span class="p">):</span>
+        <span class="k">if</span> <span class="s">&quot;ips&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="o">.</span><span class="n">node</span><span class="p">[</span><span class="n">nid</span><span class="p">]:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="o">.</span><span class="n">node</span><span class="p">[</span><span class="n">nid</span><span class="p">][</span><span class="s">&quot;ips&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="nb">list</span><span class="p">()</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="o">.</span><span class="n">node</span><span class="p">[</span><span class="n">nid</span><span class="p">][</span><span class="s">&quot;ips&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">ip</span><span class="p">)</span>
+ </div>
+<div class="viewcode-block" id="NetGraph.node_ip_annotations"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.netgraph.NetGraph.node_ip_annotations">[docs]</a>    <span class="k">def</span> <span class="nf">node_ip_annotations</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nid</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="o">.</span><span class="n">node</span><span class="p">[</span><span class="n">nid</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;ips&quot;</span><span class="p">,</span> <span class="p">[])</span>
+   </div>
+<div class="viewcode-block" id="NetGraph.annotate_node"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.netgraph.NetGraph.annotate_node">[docs]</a>    <span class="k">def</span> <span class="nf">annotate_node</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nid</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">int</span><span class="p">)</span> <span class="ow">and</span> \
+                <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">float</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">bool</span><span class="p">):</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="s">&quot;Non-serializable annotation&quot;</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="o">.</span><span class="n">node</span><span class="p">[</span><span class="n">nid</span><span class="p">][</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span>
+    </div>
+<div class="viewcode-block" id="NetGraph.node_annotation"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.netgraph.NetGraph.node_annotation">[docs]</a>    <span class="k">def</span> <span class="nf">node_annotation</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nid</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="o">.</span><span class="n">node</span><span class="p">[</span><span class="n">nid</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NetGraph.node_annotations"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.netgraph.NetGraph.node_annotations">[docs]</a>    <span class="k">def</span> <span class="nf">node_annotations</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nid</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="o">.</span><span class="n">node</span><span class="p">[</span><span class="n">nid</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span>
+    </div>
+<div class="viewcode-block" id="NetGraph.del_node_annotation"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.netgraph.NetGraph.del_node_annotation">[docs]</a>    <span class="k">def</span> <span class="nf">del_node_annotation</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nid</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
+        <span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="o">.</span><span class="n">node</span><span class="p">[</span><span class="n">nid</span><span class="p">][</span><span class="n">name</span><span class="p">]</span>
+</div>
+<div class="viewcode-block" id="NetGraph.annotate_edge"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.netgraph.NetGraph.annotate_edge">[docs]</a>    <span class="k">def</span> <span class="nf">annotate_edge</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nid1</span><span class="p">,</span> <span class="n">nid2</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">int</span><span class="p">)</span> <span class="ow">and</span> \
+                <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">float</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">bool</span><span class="p">):</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="s">&quot;Non-serializable annotation&quot;</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="o">.</span><span class="n">edge</span><span class="p">[</span><span class="n">nid1</span><span class="p">][</span><span class="n">nid2</span><span class="p">][</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span>
+   </div>
+<div class="viewcode-block" id="NetGraph.annotate_edge_net"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.netgraph.NetGraph.annotate_edge_net">[docs]</a>    <span class="k">def</span> <span class="nf">annotate_edge_net</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nid1</span><span class="p">,</span> <span class="n">nid2</span><span class="p">,</span> <span class="n">ip1</span><span class="p">,</span> <span class="n">ip2</span><span class="p">,</span> <span class="n">mask</span><span class="p">,</span> <span class="n">network</span><span class="p">,</span> 
+            <span class="n">prefixlen</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="o">.</span><span class="n">edge</span><span class="p">[</span><span class="n">nid1</span><span class="p">][</span><span class="n">nid2</span><span class="p">][</span><span class="s">&quot;net&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="o">.</span><span class="n">edge</span><span class="p">[</span><span class="n">nid1</span><span class="p">][</span><span class="n">nid2</span><span class="p">][</span><span class="s">&quot;net&quot;</span><span class="p">][</span><span class="n">nid1</span><span class="p">]</span> <span class="o">=</span> <span class="n">ip1</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="o">.</span><span class="n">edge</span><span class="p">[</span><span class="n">nid1</span><span class="p">][</span><span class="n">nid2</span><span class="p">][</span><span class="s">&quot;net&quot;</span><span class="p">][</span><span class="n">nid2</span><span class="p">]</span> <span class="o">=</span> <span class="n">ip2</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="o">.</span><span class="n">edge</span><span class="p">[</span><span class="n">nid1</span><span class="p">][</span><span class="n">nid2</span><span class="p">][</span><span class="s">&quot;net&quot;</span><span class="p">][</span><span class="s">&quot;mask&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">mask</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="o">.</span><span class="n">edge</span><span class="p">[</span><span class="n">nid1</span><span class="p">][</span><span class="n">nid2</span><span class="p">][</span><span class="s">&quot;net&quot;</span><span class="p">][</span><span class="s">&quot;network&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">network</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="o">.</span><span class="n">edge</span><span class="p">[</span><span class="n">nid1</span><span class="p">][</span><span class="n">nid2</span><span class="p">][</span><span class="s">&quot;net&quot;</span><span class="p">][</span><span class="s">&quot;prefix&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">prefixlen</span>
+</div>
+<div class="viewcode-block" id="NetGraph.edge_net_annotation"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.netgraph.NetGraph.edge_net_annotation">[docs]</a>    <span class="k">def</span> <span class="nf">edge_net_annotation</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nid1</span><span class="p">,</span> <span class="n">nid2</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="o">.</span><span class="n">edge</span><span class="p">[</span><span class="n">nid1</span><span class="p">][</span><span class="n">nid2</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;net&quot;</span><span class="p">,</span> <span class="nb">dict</span><span class="p">())</span>
+ </div>
+<div class="viewcode-block" id="NetGraph.edge_annotation"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.netgraph.NetGraph.edge_annotation">[docs]</a>    <span class="k">def</span> <span class="nf">edge_annotation</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nid1</span><span class="p">,</span> <span class="n">nid2</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="o">.</span><span class="n">edge</span><span class="p">[</span><span class="n">nid1</span><span class="p">][</span><span class="n">nid2</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
+ </div>
+<div class="viewcode-block" id="NetGraph.edge_annotations"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.netgraph.NetGraph.edge_annotations">[docs]</a>    <span class="k">def</span> <span class="nf">edge_annotations</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nid1</span><span class="p">,</span> <span class="n">nid2</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="o">.</span><span class="n">edge</span><span class="p">[</span><span class="n">nid1</span><span class="p">][</span><span class="n">nid2</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span>
+    </div>
+<div class="viewcode-block" id="NetGraph.del_edge_annotation"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.netgraph.NetGraph.del_edge_annotation">[docs]</a>    <span class="k">def</span> <span class="nf">del_edge_annotation</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nid1</span><span class="p">,</span> <span class="n">nid2</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
+        <span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="o">.</span><span class="n">edge</span><span class="p">[</span><span class="n">nid1</span><span class="p">][</span><span class="n">nid2</span><span class="p">][</span><span class="n">name</span><span class="p">]</span>
+</div>
+<div class="viewcode-block" id="NetGraph.assign_p2p_ips"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.netgraph.NetGraph.assign_p2p_ips">[docs]</a>    <span class="k">def</span> <span class="nf">assign_p2p_ips</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">network</span> <span class="o">=</span> <span class="s">&quot;10.0.0.0&quot;</span><span class="p">,</span> <span class="n">prefix</span> <span class="o">=</span> <span class="mi">8</span><span class="p">,</span> <span class="n">version</span> <span class="o">=</span> <span class="mi">4</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Assign IP addresses to each end of each edge of the network graph,</span>
+<span class="sd">        computing all the point to point subnets and addresses in the network</span>
+<span class="sd">        representation.</span>
+
+<span class="sd">            :param network: Base network address used for subnetting. </span>
+<span class="sd">            :type network: str</span>
+
+<span class="sd">            :param prefix: Prefix for the base network address used for subnetting.</span>
+<span class="sd">            :type prefixt: int</span>
+
+<span class="sd">            :param version: IP version (either 4 or 6).</span>
+<span class="sd">            :type version: int</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="n">networkx</span><span class="o">.</span><span class="n">number_connected_components</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s">&quot;Disconnected graph!!&quot;</span><span class="p">)</span>
+
+        <span class="c"># Assign IP addresses to host</span>
+        <span class="n">netblock</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">/</span><span class="si">%d</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">network</span><span class="p">,</span> <span class="n">prefix</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">version</span> <span class="o">==</span> <span class="mi">4</span><span class="p">:</span>
+            <span class="n">net</span> <span class="o">=</span> <span class="n">ipaddr</span><span class="o">.</span><span class="n">IPv4Network</span><span class="p">(</span><span class="n">netblock</span><span class="p">)</span>
+            <span class="n">new_prefix</span> <span class="o">=</span> <span class="mi">30</span>
+        <span class="k">elif</span> <span class="n">version</span> <span class="o">==</span> <span class="mi">6</span><span class="p">:</span>
+            <span class="n">net</span> <span class="o">=</span> <span class="n">ipaddr</span><span class="o">.</span><span class="n">IPv6Network</span><span class="p">(</span><span class="n">netblock</span><span class="p">)</span>
+            <span class="n">new_prefix</span> <span class="o">=</span> <span class="mi">30</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="s">&quot;Invalid IP version </span><span class="si">%d</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">version</span>
+        
+        <span class="c">## Clear all previusly assigned IPs</span>
+        <span class="k">for</span> <span class="n">nid</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="o">.</span><span class="n">nodes</span><span class="p">():</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="o">.</span><span class="n">node</span><span class="p">[</span><span class="n">nid</span><span class="p">][</span><span class="s">&quot;ips&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="nb">list</span><span class="p">()</span>
+
+        <span class="c">## Generate and assign new IPs</span>
+        <span class="n">sub_itr</span> <span class="o">=</span> <span class="n">net</span><span class="o">.</span><span class="n">iter_subnets</span><span class="p">(</span><span class="n">new_prefix</span> <span class="o">=</span> <span class="n">new_prefix</span><span class="p">)</span>
+        
+        <span class="k">for</span> <span class="n">nid1</span><span class="p">,</span> <span class="n">nid2</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="o">.</span><span class="n">edges</span><span class="p">():</span>
+            <span class="c">#### Compute subnets for each link</span>
+            
+            <span class="c"># get a subnet of base_add with prefix /30</span>
+            <span class="n">subnet</span> <span class="o">=</span> <span class="n">sub_itr</span><span class="o">.</span><span class="n">next</span><span class="p">()</span>
+            <span class="n">mask</span> <span class="o">=</span> <span class="n">subnet</span><span class="o">.</span><span class="n">netmask</span><span class="o">.</span><span class="n">exploded</span>
+            <span class="n">network</span> <span class="o">=</span> <span class="n">subnet</span><span class="o">.</span><span class="n">network</span><span class="o">.</span><span class="n">exploded</span>
+            <span class="n">prefixlen</span> <span class="o">=</span> <span class="n">subnet</span><span class="o">.</span><span class="n">prefixlen</span>
+
+            <span class="c"># get host addresses in that subnet</span>
+            <span class="n">i</span> <span class="o">=</span> <span class="n">subnet</span><span class="o">.</span><span class="n">iterhosts</span><span class="p">()</span>
+            <span class="n">addr1</span> <span class="o">=</span> <span class="n">i</span><span class="o">.</span><span class="n">next</span><span class="p">()</span>
+            <span class="n">addr2</span> <span class="o">=</span> <span class="n">i</span><span class="o">.</span><span class="n">next</span><span class="p">()</span>
+
+            <span class="n">ip1</span> <span class="o">=</span> <span class="n">addr1</span><span class="o">.</span><span class="n">exploded</span>
+            <span class="n">ip2</span> <span class="o">=</span> <span class="n">addr2</span><span class="o">.</span><span class="n">exploded</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">annotate_edge_net</span><span class="p">(</span><span class="n">nid1</span><span class="p">,</span> <span class="n">nid2</span><span class="p">,</span> <span class="n">ip1</span><span class="p">,</span> <span class="n">ip2</span><span class="p">,</span> <span class="n">mask</span><span class="p">,</span> <span class="n">network</span><span class="p">,</span> 
+                    <span class="n">prefixlen</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">annotate_node_ip</span><span class="p">(</span><span class="n">nid1</span><span class="p">,</span> <span class="n">ip1</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">annotate_node_ip</span><span class="p">(</span><span class="n">nid2</span><span class="p">,</span> <span class="n">ip2</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NetGraph.get_p2p_info"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.netgraph.NetGraph.get_p2p_info">[docs]</a>    <span class="k">def</span> <span class="nf">get_p2p_info</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nid1</span><span class="p">,</span> <span class="n">nid2</span><span class="p">):</span>
+        <span class="n">net</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="o">.</span><span class="n">edge</span><span class="p">[</span><span class="n">nid1</span><span class="p">][</span><span class="n">nid2</span><span class="p">][</span><span class="s">&quot;net&quot;</span><span class="p">]</span>
+        <span class="k">return</span> <span class="p">(</span> <span class="n">net</span><span class="p">[</span><span class="n">nid1</span><span class="p">],</span> <span class="n">net</span><span class="p">[</span><span class="n">nid2</span><span class="p">],</span> <span class="n">net</span><span class="p">[</span><span class="s">&quot;mask&quot;</span><span class="p">],</span> <span class="n">net</span><span class="p">[</span><span class="s">&quot;network&quot;</span><span class="p">],</span> 
+                <span class="n">net</span><span class="p">[</span><span class="s">&quot;prefixlen&quot;</span><span class="p">]</span> <span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NetGraph.set_source"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.netgraph.NetGraph.set_source">[docs]</a>    <span class="k">def</span> <span class="nf">set_source</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nid</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="o">.</span><span class="n">node</span><span class="p">[</span><span class="n">nid</span><span class="p">][</span><span class="s">&quot;source&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">True</span>
+</div>
+<div class="viewcode-block" id="NetGraph.is_source"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.netgraph.NetGraph.is_source">[docs]</a>    <span class="k">def</span> <span class="nf">is_source</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nid</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="o">.</span><span class="n">node</span><span class="p">[</span><span class="n">nid</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;source&quot;</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NetGraph.set_target"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.netgraph.NetGraph.set_target">[docs]</a>    <span class="k">def</span> <span class="nf">set_target</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nid</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="o">.</span><span class="n">node</span><span class="p">[</span><span class="n">nid</span><span class="p">][</span><span class="s">&quot;target&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">True</span>
+</div>
+<div class="viewcode-block" id="NetGraph.is_target"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.netgraph.NetGraph.is_target">[docs]</a>    <span class="k">def</span> <span class="nf">is_target</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nid</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="o">.</span><span class="n">node</span><span class="p">[</span><span class="n">nid</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;target&quot;</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NetGraph.targets"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.netgraph.NetGraph.targets">[docs]</a>    <span class="k">def</span> <span class="nf">targets</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the nodes that are targets &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="p">[</span><span class="n">nid</span> <span class="k">for</span> <span class="n">nid</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="o">.</span><span class="n">nodes</span><span class="p">()</span> \
+                <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="o">.</span><span class="n">node</span><span class="p">[</span><span class="n">nid</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;target&quot;</span><span class="p">)]</span>
+</div>
+<div class="viewcode-block" id="NetGraph.sources"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.netgraph.NetGraph.sources">[docs]</a>    <span class="k">def</span> <span class="nf">sources</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Returns the nodes that are sources &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="p">[</span><span class="n">nid</span> <span class="k">for</span> <span class="n">nid</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="o">.</span><span class="n">nodes</span><span class="p">()</span> \
+                <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="o">.</span><span class="n">node</span><span class="p">[</span><span class="n">nid</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;source&quot;</span><span class="p">)]</span>
+</div>
+<div class="viewcode-block" id="NetGraph.select_target_zero"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.netgraph.NetGraph.select_target_zero">[docs]</a>    <span class="k">def</span> <span class="nf">select_target_zero</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Mark the node 0 as target</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">nid</span> <span class="o">=</span> <span class="mi">0</span> <span class="k">if</span> <span class="mi">0</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="o">.</span><span class="n">nodes</span><span class="p">()</span> <span class="k">else</span> <span class="s">&quot;0&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">set_target</span><span class="p">(</span><span class="n">nid</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="NetGraph.select_random_source"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.netgraph.NetGraph.select_random_source">[docs]</a>    <span class="k">def</span> <span class="nf">select_random_source</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;  Mark a random node as source. </span>
+<span class="sd">        &quot;&quot;&quot;</span>
+
+        <span class="c"># The ladder is a special case because is not symmetric.</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">topo_type</span> <span class="o">==</span> <span class="n">TopologyType</span><span class="o">.</span><span class="n">LADDER</span><span class="p">:</span>
+            <span class="n">total_nodes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">order</span><span class="o">/</span><span class="mi">2</span>
+            <span class="n">leaf1</span> <span class="o">=</span> <span class="n">total_nodes</span>
+            <span class="n">leaf2</span> <span class="o">=</span> <span class="n">total_nodes</span> <span class="o">-</span> <span class="mi">1</span>
+            <span class="n">leaves</span> <span class="o">=</span> <span class="p">[</span><span class="n">leaf1</span><span class="p">,</span> <span class="n">leaf2</span><span class="p">]</span>
+            <span class="n">source</span> <span class="o">=</span> <span class="n">leaves</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">random</span><span class="o">.</span><span class="n">randint</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">leaves</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">))</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="c"># options must not be already sources or targets</span>
+            <span class="n">options</span> <span class="o">=</span> <span class="p">[</span> <span class="n">k</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span><span class="n">v</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="o">.</span><span class="n">degree</span><span class="p">()</span><span class="o">.</span><span class="n">iteritems</span><span class="p">()</span> \
+                    <span class="k">if</span> <span class="p">(</span><span class="ow">not</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;is_leaf&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">v</span> <span class="o">==</span> <span class="mi">1</span><span class="p">)</span>  \
+                        <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="o">.</span><span class="n">node</span><span class="p">[</span><span class="n">k</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;source&quot;</span><span class="p">)</span> \
+                        <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">topology</span><span class="o">.</span><span class="n">node</span><span class="p">[</span><span class="n">k</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;target&quot;</span><span class="p">)]</span>
+            <span class="n">source</span> <span class="o">=</span> <span class="n">options</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">random</span><span class="o">.</span><span class="n">randint</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">options</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">))</span>
+        
+        <span class="bp">self</span><span class="o">.</span><span class="n">set_source</span><span class="p">(</span><span class="n">source</span><span class="p">)</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/util/parallel.html b/doc/sphinx/_build/html/_modules/nepi/util/parallel.html
new file mode 100644 (file)
index 0000000..24b0692
--- /dev/null
@@ -0,0 +1,255 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.util.parallel &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../index.html" />
+    <link rel="up" title="Module code" href="../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.util.parallel</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Claudio Freire &lt;claudio-daniel.freire@inria.fr&gt;</span>
+<span class="c">#         Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+<span class="c">#</span>
+
+<span class="kn">import</span> <span class="nn">threading</span>
+<span class="kn">import</span> <span class="nn">Queue</span>
+<span class="kn">import</span> <span class="nn">traceback</span>
+<span class="kn">import</span> <span class="nn">sys</span>
+<span class="kn">import</span> <span class="nn">os</span>
+
+<span class="n">N_PROCS</span> <span class="o">=</span> <span class="bp">None</span>
+
+<div class="viewcode-block" id="WorkerThread"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.parallel.WorkerThread">[docs]</a><span class="k">class</span> <span class="nc">WorkerThread</span><span class="p">(</span><span class="n">threading</span><span class="o">.</span><span class="n">Thread</span><span class="p">):</span>
+<div class="viewcode-block" id="WorkerThread.QUIT"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.parallel.WorkerThread.QUIT">[docs]</a>    <span class="k">class</span> <span class="nc">QUIT</span><span class="p">:</span>
+        <span class="k">pass</span>
+</div>
+<div class="viewcode-block" id="WorkerThread.run"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.parallel.WorkerThread.run">[docs]</a>    <span class="k">def</span> <span class="nf">run</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">while</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="n">task</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">queue</span><span class="o">.</span><span class="n">get</span><span class="p">()</span>
+
+            <span class="k">if</span> <span class="n">task</span> <span class="ow">is</span> <span class="bp">self</span><span class="o">.</span><span class="n">QUIT</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">queue</span><span class="o">.</span><span class="n">task_done</span><span class="p">()</span>
+                <span class="k">break</span>
+
+            <span class="k">try</span><span class="p">:</span>
+                <span class="k">try</span><span class="p">:</span>
+                    <span class="nb">callable</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span> <span class="o">=</span> <span class="n">task</span>
+                    <span class="n">rv</span> <span class="o">=</span> <span class="nb">callable</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+                    
+                    <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">rvqueue</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">rvqueue</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="n">rv</span><span class="p">)</span>
+                <span class="k">finally</span><span class="p">:</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">queue</span><span class="o">.</span><span class="n">task_done</span><span class="p">()</span>
+            <span class="k">except</span><span class="p">:</span>
+                <span class="n">traceback</span><span class="o">.</span><span class="n">print_exc</span><span class="p">(</span><span class="nb">file</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">delayed_exceptions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">exc_info</span><span class="p">())</span>
+</div>
+<div class="viewcode-block" id="WorkerThread.attach"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.parallel.WorkerThread.attach">[docs]</a>    <span class="k">def</span> <span class="nf">attach</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">queue</span><span class="p">,</span> <span class="n">rvqueue</span><span class="p">,</span> <span class="n">delayed_exceptions</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">queue</span> <span class="o">=</span> <span class="n">queue</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">rvqueue</span> <span class="o">=</span> <span class="n">rvqueue</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">delayed_exceptions</span> <span class="o">=</span> <span class="n">delayed_exceptions</span>
+   </div>
+<div class="viewcode-block" id="WorkerThread.quit"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.parallel.WorkerThread.quit">[docs]</a>    <span class="k">def</span> <span class="nf">quit</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">queue</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">QUIT</span><span class="p">)</span>
+</div></div>
+<div class="viewcode-block" id="ParallelRun"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.parallel.ParallelRun">[docs]</a><span class="k">class</span> <span class="nc">ParallelRun</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">maxthreads</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">maxqueue</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">results</span> <span class="o">=</span> <span class="bp">True</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">maxqueue</span> <span class="o">=</span> <span class="n">maxqueue</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">maxthreads</span> <span class="o">=</span> <span class="n">maxthreads</span>
+        
+        <span class="bp">self</span><span class="o">.</span><span class="n">queue</span> <span class="o">=</span> <span class="n">Queue</span><span class="o">.</span><span class="n">Queue</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">maxqueue</span> <span class="ow">or</span> <span class="mi">0</span><span class="p">)</span>
+        
+        <span class="bp">self</span><span class="o">.</span><span class="n">delayed_exceptions</span> <span class="o">=</span> <span class="p">[]</span>
+        
+        <span class="k">if</span> <span class="n">results</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">rvqueue</span> <span class="o">=</span> <span class="n">Queue</span><span class="o">.</span><span class="n">Queue</span><span class="p">()</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">rvqueue</span> <span class="o">=</span> <span class="bp">None</span>
+    
+        <span class="bp">self</span><span class="o">.</span><span class="n">initialize_workers</span><span class="p">()</span>
+
+<div class="viewcode-block" id="ParallelRun.initialize_workers"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.parallel.ParallelRun.initialize_workers">[docs]</a>    <span class="k">def</span> <span class="nf">initialize_workers</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">global</span> <span class="n">N_PROCS</span>
+
+        <span class="n">maxthreads</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">maxthreads</span>
+       
+        <span class="c"># Compute maximum number of threads allowed by the system</span>
+        <span class="k">if</span> <span class="n">maxthreads</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
+            <span class="k">if</span> <span class="n">N_PROCS</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
+                <span class="k">try</span><span class="p">:</span>
+                    <span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="s">&quot;/proc/cpuinfo&quot;</span><span class="p">)</span>
+                    <span class="k">try</span><span class="p">:</span>
+                        <span class="n">N_PROCS</span> <span class="o">=</span> <span class="nb">sum</span><span class="p">(</span><span class="s">&quot;processor&quot;</span> <span class="ow">in</span> <span class="n">l</span> <span class="k">for</span> <span class="n">l</span> <span class="ow">in</span> <span class="n">f</span><span class="p">)</span>
+                    <span class="k">finally</span><span class="p">:</span>
+                        <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+                <span class="k">except</span><span class="p">:</span>
+                    <span class="k">pass</span>
+            <span class="n">maxthreads</span> <span class="o">=</span> <span class="n">N_PROCS</span>
+        
+        <span class="k">if</span> <span class="n">maxthreads</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
+            <span class="n">maxthreads</span> <span class="o">=</span> <span class="mi">4</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">workers</span> <span class="o">=</span> <span class="p">[]</span>
+
+        <span class="c"># initialize workers</span>
+        <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="n">maxthreads</span><span class="p">):</span>
+            <span class="n">worker</span> <span class="o">=</span> <span class="n">WorkerThread</span><span class="p">()</span>
+            <span class="n">worker</span><span class="o">.</span><span class="n">attach</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">queue</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">rvqueue</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">delayed_exceptions</span><span class="p">)</span>
+            <span class="n">worker</span><span class="o">.</span><span class="n">setDaemon</span><span class="p">(</span><span class="bp">True</span><span class="p">)</span>
+
+            <span class="bp">self</span><span class="o">.</span><span class="n">workers</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">worker</span><span class="p">)</span>
+    </div>
+    <span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">destroy</span><span class="p">()</span>
+
+<div class="viewcode-block" id="ParallelRun.empty"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.parallel.ParallelRun.empty">[docs]</a>    <span class="k">def</span> <span class="nf">empty</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">while</span> <span class="bp">True</span><span class="p">:</span>
+            <span class="k">try</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">queue</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">block</span> <span class="o">=</span> <span class="bp">False</span><span class="p">)</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">queue</span><span class="o">.</span><span class="n">task_done</span><span class="p">()</span>
+            <span class="k">except</span> <span class="n">Queue</span><span class="o">.</span><span class="n">Empty</span><span class="p">:</span>
+                <span class="k">break</span>
+  </div>
+<div class="viewcode-block" id="ParallelRun.destroy"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.parallel.ParallelRun.destroy">[docs]</a>    <span class="k">def</span> <span class="nf">destroy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">join</span><span class="p">()</span>
+
+        <span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">workers</span><span class="p">[:]</span>
+        </div>
+<div class="viewcode-block" id="ParallelRun.put"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.parallel.ParallelRun.put">[docs]</a>    <span class="k">def</span> <span class="nf">put</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">callable</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">queue</span><span class="o">.</span><span class="n">put</span><span class="p">((</span><span class="nb">callable</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">))</span>
+    </div>
+<div class="viewcode-block" id="ParallelRun.put_nowait"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.parallel.ParallelRun.put_nowait">[docs]</a>    <span class="k">def</span> <span class="nf">put_nowait</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">callable</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">queue</span><span class="o">.</span><span class="n">put_nowait</span><span class="p">((</span><span class="nb">callable</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">))</span>
+</div>
+<div class="viewcode-block" id="ParallelRun.start"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.parallel.ParallelRun.start">[docs]</a>    <span class="k">def</span> <span class="nf">start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">for</span> <span class="n">worker</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">workers</span><span class="p">:</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="n">worker</span><span class="o">.</span><span class="n">isAlive</span><span class="p">():</span>
+                <span class="n">worker</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
+    </div>
+<div class="viewcode-block" id="ParallelRun.join"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.parallel.ParallelRun.join">[docs]</a>    <span class="k">def</span> <span class="nf">join</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="c"># Wait until all queued tasks have been processed</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">queue</span><span class="o">.</span><span class="n">join</span><span class="p">()</span>
+
+        <span class="k">for</span> <span class="n">worker</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">workers</span><span class="p">:</span>
+            <span class="n">worker</span><span class="o">.</span><span class="n">quit</span><span class="p">()</span>
+
+        <span class="k">for</span> <span class="n">worker</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">workers</span><span class="p">:</span>
+            <span class="n">worker</span><span class="o">.</span><span class="n">join</span><span class="p">()</span>
+    </div>
+<div class="viewcode-block" id="ParallelRun.sync"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.parallel.ParallelRun.sync">[docs]</a>    <span class="k">def</span> <span class="nf">sync</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">delayed_exceptions</span><span class="p">:</span>
+            <span class="n">typ</span><span class="p">,</span><span class="n">val</span><span class="p">,</span><span class="n">loc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">delayed_exceptions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+            <span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">delayed_exceptions</span><span class="p">[:]</span>
+            <span class="k">raise</span> <span class="n">typ</span><span class="p">,</span><span class="n">val</span><span class="p">,</span><span class="n">loc</span>
+        </div>
+    <span class="k">def</span> <span class="nf">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">rvqueue</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
+            <span class="k">while</span> <span class="bp">True</span><span class="p">:</span>
+                <span class="k">try</span><span class="p">:</span>
+                    <span class="k">yield</span> <span class="bp">self</span><span class="o">.</span><span class="n">rvqueue</span><span class="o">.</span><span class="n">get_nowait</span><span class="p">()</span>
+                <span class="k">except</span> <span class="n">Queue</span><span class="o">.</span><span class="n">Empty</span><span class="p">:</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">queue</span><span class="o">.</span><span class="n">join</span><span class="p">()</span>
+                    <span class="k">try</span><span class="p">:</span>
+                        <span class="k">yield</span> <span class="bp">self</span><span class="o">.</span><span class="n">rvqueue</span><span class="o">.</span><span class="n">get_nowait</span><span class="p">()</span>
+                    <span class="k">except</span> <span class="n">Queue</span><span class="o">.</span><span class="n">Empty</span><span class="p">:</span>
+                        <span class="k">raise</span> <span class="ne">StopIteration</span>
+            </div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/util/parsers/xml_parser.html b/doc/sphinx/_build/html/_modules/nepi/util/parsers/xml_parser.html
new file mode 100644 (file)
index 0000000..1d92a07
--- /dev/null
@@ -0,0 +1,549 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.util.parsers.xml_parser &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
+    <link rel="up" title="Module code" href="../../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.util.parsers.xml_parser</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">from</span> <span class="nn">nepi.util.netgraph</span> <span class="kn">import</span> <span class="n">NetGraph</span><span class="p">,</span> <span class="n">TopologyType</span> 
+<span class="kn">from</span> <span class="nn">nepi.util.timefuncs</span> <span class="kn">import</span> <span class="n">stformat</span><span class="p">,</span> <span class="n">tsformat</span>
+
+<span class="kn">from</span> <span class="nn">xml.dom</span> <span class="kn">import</span> <span class="n">minidom</span>
+
+<span class="kn">import</span> <span class="nn">datetime</span>
+<span class="kn">import</span> <span class="nn">sys</span>
+<span class="kn">import</span> <span class="nn">os</span>
+
+<span class="n">STRING</span> <span class="o">=</span> <span class="s">&quot;string&quot;</span>
+<span class="n">BOOL</span> <span class="o">=</span> <span class="s">&quot;bool&quot;</span>
+<span class="n">INTEGER</span> <span class="o">=</span> <span class="s">&quot;integer&quot;</span>
+<span class="n">DOUBLE</span> <span class="o">=</span> <span class="s">&quot;float&quot;</span>
+
+<div class="viewcode-block" id="xmlencode"><a class="viewcode-back" href="../../../../_layout/nepi.util.parsers.html#nepi.util.parsers.xml_parser.xmlencode">[docs]</a><span class="k">def</span> <span class="nf">xmlencode</span><span class="p">(</span><span class="n">s</span><span class="p">):</span>
+    <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
+        <span class="n">rv</span> <span class="o">=</span> <span class="n">s</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s">&quot;latin1&quot;</span><span class="p">)</span>
+    <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="p">):</span>
+        <span class="n">rv</span> <span class="o">=</span> <span class="n">tsformat</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
+    <span class="k">elif</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="nb">unicode</span><span class="p">):</span>
+        <span class="n">rv</span> <span class="o">=</span> <span class="nb">unicode</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="n">rv</span> <span class="o">=</span> <span class="n">s</span>
+    <span class="k">return</span> <span class="n">rv</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">u&#39;</span><span class="se">\x00</span><span class="s">&#39;</span><span class="p">,</span><span class="s">u&#39;&amp;#0000;&#39;</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="xmldecode"><a class="viewcode-back" href="../../../../_layout/nepi.util.parsers.html#nepi.util.parsers.xml_parser.xmldecode">[docs]</a><span class="k">def</span> <span class="nf">xmldecode</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">cast</span> <span class="o">=</span> <span class="nb">str</span><span class="p">):</span>
+    <span class="n">ret</span> <span class="o">=</span> <span class="n">s</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">u&#39;&amp;#0000&#39;</span><span class="p">,</span><span class="s">u&#39;</span><span class="se">\x00</span><span class="s">&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s">&quot;ascii&quot;</span><span class="p">)</span>
+    <span class="n">ret</span> <span class="o">=</span> <span class="n">cast</span><span class="p">(</span><span class="n">ret</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">s</span> <span class="o">==</span> <span class="s">&quot;None&quot;</span><span class="p">:</span>
+        <span class="k">return</span> <span class="bp">None</span>
+    <span class="k">return</span> <span class="n">ret</span>
+</div>
+<div class="viewcode-block" id="from_type"><a class="viewcode-back" href="../../../../_layout/nepi.util.parsers.html#nepi.util.parsers.xml_parser.from_type">[docs]</a><span class="k">def</span> <span class="nf">from_type</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
+    <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">bool</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">BOOL</span>
+    <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">int</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">INTEGER</span>
+    <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">float</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">DOUBLE</span>
+
+    <span class="k">return</span> <span class="n">STRING</span>
+</div>
+<div class="viewcode-block" id="to_type"><a class="viewcode-back" href="../../../../_layout/nepi.util.parsers.html#nepi.util.parsers.xml_parser.to_type">[docs]</a><span class="k">def</span> <span class="nf">to_type</span><span class="p">(</span><span class="nb">type</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
+    <span class="k">if</span> <span class="ow">not</span> <span class="n">value</span><span class="p">:</span>
+        <span class="k">return</span> <span class="n">value</span>
+
+    <span class="k">if</span> <span class="nb">type</span> <span class="o">==</span> <span class="n">STRING</span><span class="p">:</span>
+        <span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
+    <span class="k">if</span> <span class="nb">type</span> <span class="o">==</span> <span class="n">BOOL</span><span class="p">:</span>
+        <span class="k">return</span> <span class="n">value</span> <span class="o">==</span> <span class="s">&quot;True&quot;</span>
+    <span class="k">if</span> <span class="nb">type</span> <span class="o">==</span> <span class="n">INTEGER</span><span class="p">:</span>
+        <span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
+    <span class="k">if</span> <span class="nb">type</span> <span class="o">==</span> <span class="n">DOUBLE</span><span class="p">:</span>
+        <span class="k">return</span> <span class="nb">float</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="ECXMLParser"><a class="viewcode-back" href="../../../../_layout/nepi.util.parsers.html#nepi.util.parsers.xml_parser.ECXMLParser">[docs]</a><span class="k">class</span> <span class="nc">ECXMLParser</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+<div class="viewcode-block" id="ECXMLParser.to_xml"><a class="viewcode-back" href="../../../../_layout/nepi.util.parsers.html#nepi.util.parsers.xml_parser.ECXMLParser.to_xml">[docs]</a>    <span class="k">def</span> <span class="nf">to_xml</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">):</span>
+        
+        <span class="n">doc</span> <span class="o">=</span> <span class="n">minidom</span><span class="o">.</span><span class="n">Document</span><span class="p">()</span>
+        
+        <span class="bp">self</span><span class="o">.</span><span class="n">_ec_to_xml</span><span class="p">(</span><span class="n">doc</span><span class="p">,</span> <span class="n">ec</span><span class="p">)</span>
+       
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">xml</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">toprettyxml</span><span class="p">(</span><span class="n">indent</span><span class="o">=</span><span class="s">&quot;    &quot;</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="s">&quot;UTF-8&quot;</span><span class="p">)</span>
+        <span class="k">except</span><span class="p">:</span>
+            <span class="k">print</span> <span class="o">&gt;&gt;</span><span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="p">,</span> <span class="s">&quot;Oops: generating XML from </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">data</span><span class="p">,)</span>
+            <span class="k">raise</span>
+        
+        <span class="k">return</span> <span class="n">xml</span>
+</div>
+    <span class="k">def</span> <span class="nf">_ec_to_xml</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">doc</span><span class="p">,</span> <span class="n">ec</span><span class="p">):</span>
+        <span class="n">ecnode</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="s">&quot;experiment&quot;</span><span class="p">)</span>
+        <span class="n">ecnode</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="s">&quot;exp_id&quot;</span><span class="p">,</span> <span class="n">xmlencode</span><span class="p">(</span><span class="n">ec</span><span class="o">.</span><span class="n">exp_id</span><span class="p">))</span>
+        <span class="n">ecnode</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="s">&quot;run_id&quot;</span><span class="p">,</span> <span class="n">xmlencode</span><span class="p">(</span><span class="n">ec</span><span class="o">.</span><span class="n">run_id</span><span class="p">))</span>
+        <span class="n">ecnode</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="s">&quot;nthreads&quot;</span><span class="p">,</span> <span class="n">xmlencode</span><span class="p">(</span><span class="n">ec</span><span class="o">.</span><span class="n">nthreads</span><span class="p">))</span>
+        <span class="n">ecnode</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="s">&quot;local_dir&quot;</span><span class="p">,</span> <span class="n">xmlencode</span><span class="p">(</span><span class="n">ec</span><span class="o">.</span><span class="n">local_dir</span><span class="p">))</span>
+        <span class="n">doc</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">ecnode</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">ec</span><span class="o">.</span><span class="n">netgraph</span> <span class="o">!=</span> <span class="bp">None</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_netgraph_to_xml</span><span class="p">(</span><span class="n">doc</span><span class="p">,</span> <span class="n">ecnode</span><span class="p">,</span> <span class="n">ec</span><span class="p">)</span>
+
+        <span class="n">rmsnode</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="s">&quot;rms&quot;</span><span class="p">)</span>
+        <span class="n">ecnode</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">rmsnode</span><span class="p">)</span>
+
+        <span class="k">for</span> <span class="n">guid</span><span class="p">,</span> <span class="n">rm</span> <span class="ow">in</span> <span class="n">ec</span><span class="o">.</span><span class="n">_resources</span><span class="o">.</span><span class="n">iteritems</span><span class="p">():</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_rm_to_xml</span><span class="p">(</span><span class="n">doc</span><span class="p">,</span> <span class="n">rmsnode</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">,</span> <span class="n">rm</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">doc</span>
+    
+    <span class="k">def</span> <span class="nf">_netgraph_to_xml</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">doc</span><span class="p">,</span> <span class="n">ecnode</span><span class="p">,</span> <span class="n">ec</span><span class="p">):</span>
+        <span class="n">ngnode</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="s">&quot;topology&quot;</span><span class="p">)</span>
+        <span class="n">ngnode</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="s">&quot;topo-type&quot;</span><span class="p">,</span> <span class="n">xmlencode</span><span class="p">(</span><span class="n">ec</span><span class="o">.</span><span class="n">netgraph</span><span class="o">.</span><span class="n">topo_type</span><span class="p">))</span>
+        <span class="n">ecnode</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">ngnode</span><span class="p">)</span>
+        
+        <span class="bp">self</span><span class="o">.</span> <span class="n">_netgraph_nodes_to_xml</span><span class="p">(</span><span class="n">doc</span><span class="p">,</span> <span class="n">ngnode</span><span class="p">,</span> <span class="n">ec</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span> <span class="n">_netgraph_edges_to_xml</span><span class="p">(</span><span class="n">doc</span><span class="p">,</span> <span class="n">ngnode</span><span class="p">,</span> <span class="n">ec</span><span class="p">)</span>
+        
+    <span class="k">def</span> <span class="nf">_netgraph_nodes_to_xml</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">doc</span><span class="p">,</span> <span class="n">ngnode</span><span class="p">,</span> <span class="n">ec</span><span class="p">):</span>
+        <span class="n">ngnsnode</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="s">&quot;nodes&quot;</span><span class="p">)</span>
+        <span class="n">ngnode</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">ngnsnode</span><span class="p">)</span>
+
+        <span class="k">for</span> <span class="n">nid</span> <span class="ow">in</span> <span class="n">ec</span><span class="o">.</span><span class="n">netgraph</span><span class="o">.</span><span class="n">nodes</span><span class="p">():</span>
+            <span class="n">ngnnode</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="s">&quot;node&quot;</span><span class="p">)</span>
+            <span class="n">ngnnode</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="s">&quot;nid&quot;</span><span class="p">,</span> <span class="n">xmlencode</span><span class="p">(</span><span class="n">nid</span><span class="p">))</span>
+            <span class="n">ngnnode</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="s">&quot;nid-type&quot;</span><span class="p">,</span> <span class="n">from_type</span><span class="p">(</span><span class="n">nid</span><span class="p">))</span>
+            <span class="n">ngnsnode</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">ngnnode</span><span class="p">)</span>
+
+            <span class="c"># Mark ources and targets</span>
+            <span class="k">if</span> <span class="n">ec</span><span class="o">.</span><span class="n">netgraph</span><span class="o">.</span><span class="n">is_source</span><span class="p">(</span><span class="n">nid</span><span class="p">):</span>
+                <span class="n">ngnnode</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="s">&quot;source&quot;</span><span class="p">,</span> <span class="n">xmlencode</span><span class="p">(</span><span class="bp">True</span><span class="p">))</span>
+
+            <span class="k">if</span> <span class="n">ec</span><span class="o">.</span><span class="n">netgraph</span><span class="o">.</span><span class="n">is_target</span><span class="p">(</span><span class="n">nid</span><span class="p">):</span>
+                <span class="n">ngnnode</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="s">&quot;target&quot;</span><span class="p">,</span> <span class="n">xmlencode</span><span class="p">(</span><span class="bp">True</span><span class="p">))</span>
+
+            <span class="c"># Node annotations</span>
+            <span class="n">annosnode</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="s">&quot;node-annotations&quot;</span><span class="p">)</span>
+            <span class="n">add_annotations</span> <span class="o">=</span> <span class="bp">False</span>
+            <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">ec</span><span class="o">.</span><span class="n">netgraph</span><span class="o">.</span><span class="n">node_annotations</span><span class="p">(</span><span class="n">nid</span><span class="p">):</span>
+                <span class="n">add_annotations</span> <span class="o">=</span> <span class="bp">True</span>
+                <span class="n">value</span> <span class="o">=</span> <span class="n">ec</span><span class="o">.</span><span class="n">netgraph</span><span class="o">.</span><span class="n">node_annotation</span><span class="p">(</span><span class="n">nid</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
+                <span class="n">annonode</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="s">&quot;node-annotation&quot;</span><span class="p">)</span>
+                <span class="n">annonode</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="s">&quot;name&quot;</span><span class="p">,</span> <span class="n">xmlencode</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
+                <span class="n">annonode</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="s">&quot;value&quot;</span><span class="p">,</span> <span class="n">xmlencode</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
+                <span class="n">annonode</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="s">&quot;type&quot;</span><span class="p">,</span> <span class="n">from_type</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
+                <span class="n">annosnode</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">annonode</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="n">add_annotations</span><span class="p">:</span>
+                <span class="n">ngnnode</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">annosnode</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_netgraph_edges_to_xml</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">doc</span><span class="p">,</span> <span class="n">ngnode</span><span class="p">,</span> <span class="n">ec</span><span class="p">):</span>
+        <span class="n">ngesnode</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="s">&quot;edges&quot;</span><span class="p">)</span>
+        <span class="n">ngnode</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">ngesnode</span><span class="p">)</span>
+
+        <span class="k">for</span> <span class="n">nid1</span><span class="p">,</span> <span class="n">nid2</span> <span class="ow">in</span> <span class="n">ec</span><span class="o">.</span><span class="n">netgraph</span><span class="o">.</span><span class="n">edges</span><span class="p">():</span>
+            <span class="n">ngenode</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="s">&quot;edge&quot;</span><span class="p">)</span>
+            <span class="n">ngenode</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="s">&quot;nid1&quot;</span><span class="p">,</span> <span class="n">xmlencode</span><span class="p">(</span><span class="n">nid1</span><span class="p">))</span>
+            <span class="n">ngenode</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="s">&quot;nid1-type&quot;</span><span class="p">,</span> <span class="n">from_type</span><span class="p">(</span><span class="n">nid1</span><span class="p">))</span>
+            <span class="n">ngenode</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="s">&quot;nid2&quot;</span><span class="p">,</span> <span class="n">xmlencode</span><span class="p">(</span><span class="n">nid2</span><span class="p">))</span>
+            <span class="n">ngenode</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="s">&quot;nid2-type&quot;</span><span class="p">,</span> <span class="n">from_type</span><span class="p">(</span><span class="n">nid2</span><span class="p">))</span>
+            <span class="n">ngesnode</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">ngenode</span><span class="p">)</span>
+
+            <span class="c"># Edge annotations</span>
+            <span class="n">annosnode</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="s">&quot;edge-annotations&quot;</span><span class="p">)</span>
+            <span class="n">add_annotations</span> <span class="o">=</span> <span class="bp">False</span>
+            <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">ec</span><span class="o">.</span><span class="n">netgraph</span><span class="o">.</span><span class="n">edge_annotations</span><span class="p">(</span><span class="n">nid1</span><span class="p">,</span> <span class="n">nid2</span><span class="p">):</span>
+                <span class="n">add_annotations</span> <span class="o">=</span> <span class="bp">True</span>
+                <span class="n">value</span> <span class="o">=</span> <span class="n">ec</span><span class="o">.</span><span class="n">netgraph</span><span class="o">.</span><span class="n">edge_annotation</span><span class="p">(</span><span class="n">nid1</span><span class="p">,</span> <span class="n">nid2</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
+                <span class="n">annonode</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="s">&quot;edge-annotation&quot;</span><span class="p">)</span>
+                <span class="n">annonode</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="s">&quot;name&quot;</span><span class="p">,</span> <span class="n">xmlencode</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
+                <span class="n">annonode</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="s">&quot;value&quot;</span><span class="p">,</span> <span class="n">xmlencode</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
+                <span class="n">annonode</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="s">&quot;type&quot;</span><span class="p">,</span> <span class="n">from_type</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
+                <span class="n">annosnode</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">annonode</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="n">add_annotations</span><span class="p">:</span>
+                <span class="n">ngenode</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">annosnode</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_rm_to_xml</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">doc</span><span class="p">,</span> <span class="n">rmsnode</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">guid</span><span class="p">,</span> <span class="n">rm</span><span class="p">):</span>
+        <span class="n">rmnode</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="s">&quot;rm&quot;</span><span class="p">)</span>
+        <span class="n">rmnode</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="s">&quot;guid&quot;</span><span class="p">,</span> <span class="n">xmlencode</span><span class="p">(</span><span class="n">guid</span><span class="p">))</span>
+        <span class="n">rmnode</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="s">&quot;rtype&quot;</span><span class="p">,</span> <span class="n">xmlencode</span><span class="p">(</span><span class="n">rm</span><span class="o">.</span><span class="n">_rtype</span><span class="p">))</span>
+        <span class="n">rmnode</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="s">&quot;state&quot;</span><span class="p">,</span> <span class="n">xmlencode</span><span class="p">(</span><span class="n">rm</span><span class="o">.</span><span class="n">_state</span><span class="p">))</span>
+        <span class="k">if</span> <span class="n">rm</span><span class="o">.</span><span class="n">_start_time</span><span class="p">:</span>
+            <span class="n">rmnode</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="s">&quot;start_time&quot;</span><span class="p">,</span> <span class="n">xmlencode</span><span class="p">(</span><span class="n">rm</span><span class="o">.</span><span class="n">_start_time</span><span class="p">))</span>
+        <span class="k">if</span> <span class="n">rm</span><span class="o">.</span><span class="n">_stop_time</span><span class="p">:</span>
+            <span class="n">rmnode</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="s">&quot;stop_time&quot;</span><span class="p">,</span> <span class="n">xmlencode</span><span class="p">(</span><span class="n">rm</span><span class="o">.</span><span class="n">_stop_time</span><span class="p">))</span>
+        <span class="k">if</span> <span class="n">rm</span><span class="o">.</span><span class="n">_discover_time</span><span class="p">:</span>
+            <span class="n">rmnode</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="s">&quot;discover_time&quot;</span><span class="p">,</span> <span class="n">xmlencode</span><span class="p">(</span><span class="n">rm</span><span class="o">.</span><span class="n">_discover_time</span><span class="p">))</span>
+        <span class="k">if</span> <span class="n">rm</span><span class="o">.</span><span class="n">_provision_time</span><span class="p">:</span>    
+            <span class="n">rmnode</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="s">&quot;provision_time&quot;</span><span class="p">,</span> <span class="n">xmlencode</span><span class="p">(</span><span class="n">rm</span><span class="o">.</span><span class="n">_provision_time</span><span class="p">))</span>
+        <span class="k">if</span> <span class="n">rm</span><span class="o">.</span><span class="n">_ready_time</span><span class="p">:</span>
+            <span class="n">rmnode</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="s">&quot;ready_time&quot;</span><span class="p">,</span> <span class="n">xmlencode</span><span class="p">(</span><span class="n">rm</span><span class="o">.</span><span class="n">_ready_time</span><span class="p">))</span>
+        <span class="k">if</span> <span class="n">rm</span><span class="o">.</span><span class="n">_release_time</span><span class="p">:</span>
+            <span class="n">rmnode</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="s">&quot;release_time&quot;</span><span class="p">,</span> <span class="n">xmlencode</span><span class="p">(</span><span class="n">rm</span><span class="o">.</span><span class="n">_release_time</span><span class="p">))</span>
+        <span class="k">if</span> <span class="n">rm</span><span class="o">.</span><span class="n">_failed_time</span><span class="p">:</span>
+            <span class="n">rmnode</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="s">&quot;failed_time&quot;</span><span class="p">,</span> <span class="n">xmlencode</span><span class="p">(</span><span class="n">rm</span><span class="o">.</span><span class="n">_failed_time</span><span class="p">))</span>
+        <span class="n">rmsnode</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">rmnode</span><span class="p">)</span>
+
+        <span class="n">anode</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="s">&quot;attributes&quot;</span><span class="p">)</span>
+        <span class="n">attributes</span> <span class="o">=</span> <span class="bp">False</span>
+
+        <span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="n">rm</span><span class="o">.</span><span class="n">_attrs</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
+            <span class="k">if</span> <span class="n">attr</span><span class="o">.</span><span class="n">has_changed</span><span class="p">:</span>
+                <span class="n">attributes</span> <span class="o">=</span> <span class="bp">True</span>
+                <span class="n">aanode</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="s">&quot;attribute&quot;</span><span class="p">)</span>
+                <span class="n">aanode</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="s">&quot;name&quot;</span><span class="p">,</span> <span class="n">xmlencode</span><span class="p">(</span><span class="n">attr</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
+                <span class="n">aanode</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="s">&quot;value&quot;</span><span class="p">,</span> <span class="n">xmlencode</span><span class="p">(</span><span class="n">attr</span><span class="o">.</span><span class="n">value</span><span class="p">))</span>
+                <span class="n">aanode</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="s">&quot;type&quot;</span><span class="p">,</span> <span class="n">from_type</span><span class="p">(</span><span class="n">attr</span><span class="o">.</span><span class="n">value</span><span class="p">))</span>
+                <span class="n">anode</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">aanode</span><span class="p">)</span>
+    
+        <span class="k">if</span> <span class="n">attributes</span><span class="p">:</span> 
+            <span class="n">rmnode</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">anode</span><span class="p">)</span>
+
+        <span class="n">cnode</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="s">&quot;connections&quot;</span><span class="p">)</span>
+        <span class="n">connections</span> <span class="o">=</span> <span class="bp">False</span>
+        
+        <span class="k">for</span> <span class="n">guid</span> <span class="ow">in</span> <span class="n">rm</span><span class="o">.</span><span class="n">_connections</span><span class="p">:</span>
+            <span class="n">connections</span> <span class="o">=</span> <span class="bp">True</span>
+            <span class="n">ccnode</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="s">&quot;connection&quot;</span><span class="p">)</span>
+            <span class="n">ccnode</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="s">&quot;guid&quot;</span><span class="p">,</span> <span class="n">xmlencode</span><span class="p">(</span><span class="n">guid</span><span class="p">))</span>
+            <span class="n">cnode</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">ccnode</span><span class="p">)</span>
+        
+        <span class="k">if</span> <span class="n">connections</span><span class="p">:</span>
+           <span class="n">rmnode</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">cnode</span><span class="p">)</span>
+
+        <span class="n">cnnode</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="s">&quot;conditions&quot;</span><span class="p">)</span>
+        <span class="n">conditions</span> <span class="o">=</span> <span class="bp">False</span>
+
+        <span class="k">for</span> <span class="n">action</span><span class="p">,</span> <span class="n">conds</span> <span class="ow">in</span> <span class="n">rm</span><span class="o">.</span><span class="n">_conditions</span><span class="o">.</span><span class="n">iteritems</span><span class="p">():</span>
+            <span class="n">conditions</span> <span class="o">=</span> <span class="bp">True</span>
+            <span class="k">for</span> <span class="p">(</span><span class="n">group</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span> <span class="ow">in</span> <span class="n">conds</span><span class="p">:</span>
+                <span class="n">ccnnode</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="s">&quot;condition&quot;</span><span class="p">)</span>
+                <span class="n">ccnnode</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="s">&quot;action&quot;</span><span class="p">,</span> <span class="n">xmlencode</span><span class="p">(</span><span class="n">action</span><span class="p">))</span>
+                <span class="n">ccnnode</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="s">&quot;group&quot;</span><span class="p">,</span> <span class="n">xmlencode</span><span class="p">(</span><span class="n">group</span><span class="p">))</span>
+                <span class="n">ccnnode</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="s">&quot;state&quot;</span><span class="p">,</span> <span class="n">xmlencode</span><span class="p">(</span><span class="n">state</span><span class="p">))</span>
+                <span class="n">ccnnode</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="s">&quot;time&quot;</span><span class="p">,</span> <span class="n">xmlencode</span><span class="p">(</span><span class="n">time</span><span class="p">))</span>
+                <span class="n">cnnode</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">ccnnode</span><span class="p">)</span>
+        
+        <span class="k">if</span> <span class="n">conditions</span><span class="p">:</span>
+           <span class="n">rmnode</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">cnnode</span><span class="p">)</span>
+
+        <span class="n">tnode</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="s">&quot;traces&quot;</span><span class="p">)</span>
+        <span class="n">traces</span> <span class="o">=</span> <span class="bp">False</span>
+
+        <span class="k">for</span> <span class="n">trace</span> <span class="ow">in</span> <span class="n">rm</span><span class="o">.</span><span class="n">_trcs</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
+            <span class="k">if</span> <span class="n">trace</span><span class="o">.</span><span class="n">enabled</span><span class="p">:</span>
+                <span class="n">traces</span> <span class="o">=</span> <span class="bp">True</span>
+                <span class="n">ttnode</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="s">&quot;trace&quot;</span><span class="p">)</span>
+                <span class="n">ttnode</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="s">&quot;name&quot;</span><span class="p">,</span> <span class="n">xmlencode</span><span class="p">(</span><span class="n">trace</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
+                <span class="n">tnode</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">ttnode</span><span class="p">)</span>
+    
+        <span class="k">if</span> <span class="n">traces</span><span class="p">:</span> 
+            <span class="n">rmnode</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">tnode</span><span class="p">)</span>
+
+<div class="viewcode-block" id="ECXMLParser.from_xml"><a class="viewcode-back" href="../../../../_layout/nepi.util.parsers.html#nepi.util.parsers.xml_parser.ECXMLParser.from_xml">[docs]</a>    <span class="k">def</span> <span class="nf">from_xml</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">xml</span><span class="p">):</span>
+        <span class="n">doc</span> <span class="o">=</span> <span class="n">minidom</span><span class="o">.</span><span class="n">parseString</span><span class="p">(</span><span class="n">xml</span><span class="p">)</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ec_from_xml</span><span class="p">(</span><span class="n">doc</span><span class="p">)</span>
+</div>
+    <span class="k">def</span> <span class="nf">_ec_from_xml</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">doc</span><span class="p">):</span>
+        <span class="kn">from</span> <span class="nn">nepi.execution.ec</span> <span class="kn">import</span> <span class="n">ExperimentController</span>
+        <span class="n">ec</span> <span class="o">=</span> <span class="bp">None</span>
+        
+        <span class="n">ecnode_list</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">getElementsByTagName</span><span class="p">(</span><span class="s">&quot;experiment&quot;</span><span class="p">)</span>
+        <span class="k">for</span> <span class="n">ecnode</span> <span class="ow">in</span> <span class="n">ecnode_list</span><span class="p">:</span>
+            <span class="k">if</span> <span class="n">ecnode</span><span class="o">.</span><span class="n">nodeType</span> <span class="o">==</span> <span class="n">doc</span><span class="o">.</span><span class="n">ELEMENT_NODE</span><span class="p">:</span>
+                <span class="n">exp_id</span> <span class="o">=</span> <span class="n">xmldecode</span><span class="p">(</span><span class="n">ecnode</span><span class="o">.</span><span class="n">getAttribute</span><span class="p">(</span><span class="s">&quot;exp_id&quot;</span><span class="p">))</span>
+                <span class="n">run_id</span> <span class="o">=</span> <span class="n">xmldecode</span><span class="p">(</span><span class="n">ecnode</span><span class="o">.</span><span class="n">getAttribute</span><span class="p">(</span><span class="s">&quot;run_id&quot;</span><span class="p">))</span>
+                <span class="n">local_dir</span> <span class="o">=</span> <span class="n">xmldecode</span><span class="p">(</span><span class="n">ecnode</span><span class="o">.</span><span class="n">getAttribute</span><span class="p">(</span><span class="s">&quot;local_dir&quot;</span><span class="p">))</span>
+
+                <span class="c"># Configure number of preocessing threads</span>
+                <span class="n">nthreads</span> <span class="o">=</span> <span class="n">xmldecode</span><span class="p">(</span><span class="n">ecnode</span><span class="o">.</span><span class="n">getAttribute</span><span class="p">(</span><span class="s">&quot;nthreads&quot;</span><span class="p">))</span>
+                <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="s">&quot;NEPI_NTHREADS&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">nthreads</span>
+
+                <span class="c"># Deserialize netgraph</span>
+                <span class="n">topology</span> <span class="o">=</span> <span class="bp">None</span>
+                <span class="n">topo_type</span> <span class="o">=</span> <span class="bp">None</span>
+
+                <span class="n">netgraph</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_netgraph_from_xml</span><span class="p">(</span><span class="n">doc</span><span class="p">,</span> <span class="n">ecnode</span><span class="p">)</span>
+                
+                <span class="k">if</span> <span class="n">netgraph</span><span class="p">:</span>
+                    <span class="n">topo_type</span> <span class="o">=</span> <span class="n">netgraph</span><span class="o">.</span><span class="n">topo_type</span>
+                    <span class="n">topology</span> <span class="o">=</span> <span class="n">netgraph</span><span class="o">.</span><span class="n">topology</span>
+
+                <span class="c"># Instantiate EC</span>
+                <span class="n">ec</span> <span class="o">=</span> <span class="n">ExperimentController</span><span class="p">(</span><span class="n">exp_id</span> <span class="o">=</span> <span class="n">exp_id</span><span class="p">,</span> <span class="n">local_dir</span> <span class="o">=</span> <span class="n">local_dir</span><span class="p">,</span> 
+                        <span class="n">topology</span> <span class="o">=</span> <span class="n">topology</span><span class="p">,</span> <span class="n">topo_type</span> <span class="o">=</span> <span class="n">topo_type</span><span class="p">)</span>
+
+                <span class="n">connections</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+
+                <span class="n">rmsnode_list</span> <span class="o">=</span> <span class="n">ecnode</span><span class="o">.</span><span class="n">getElementsByTagName</span><span class="p">(</span><span class="s">&quot;rms&quot;</span><span class="p">)</span>
+                <span class="k">if</span> <span class="n">rmsnode_list</span><span class="p">:</span>
+                    <span class="n">rmnode_list</span> <span class="o">=</span> <span class="n">rmsnode_list</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">getElementsByTagName</span><span class="p">(</span><span class="s">&quot;rm&quot;</span><span class="p">)</span> 
+                    <span class="k">for</span> <span class="n">rmnode</span> <span class="ow">in</span> <span class="n">rmnode_list</span><span class="p">:</span>
+                        <span class="k">if</span> <span class="n">rmnode</span><span class="o">.</span><span class="n">nodeType</span> <span class="o">==</span> <span class="n">doc</span><span class="o">.</span><span class="n">ELEMENT_NODE</span><span class="p">:</span>
+                            <span class="bp">self</span><span class="o">.</span><span class="n">_rm_from_xml</span><span class="p">(</span><span class="n">doc</span><span class="p">,</span> <span class="n">rmnode</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">connections</span><span class="p">)</span>
+
+                <span class="k">for</span> <span class="p">(</span><span class="n">guid1</span><span class="p">,</span> <span class="n">guid2</span><span class="p">)</span> <span class="ow">in</span> <span class="n">connections</span><span class="p">:</span>
+                    <span class="n">ec</span><span class="o">.</span><span class="n">register_connection</span><span class="p">(</span><span class="n">guid1</span><span class="p">,</span> <span class="n">guid2</span><span class="p">)</span>
+
+                <span class="k">break</span>
+
+        <span class="k">return</span> <span class="n">ec</span>
+
+    <span class="k">def</span> <span class="nf">_netgraph_from_xml</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">doc</span><span class="p">,</span> <span class="n">ecnode</span><span class="p">):</span>
+        <span class="n">netgraph</span> <span class="o">=</span> <span class="bp">None</span>
+
+        <span class="n">topology</span> <span class="o">=</span> <span class="n">ecnode</span><span class="o">.</span><span class="n">getElementsByTagName</span><span class="p">(</span><span class="s">&quot;topology&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">topology</span><span class="p">:</span>
+            <span class="n">topology</span> <span class="o">=</span> <span class="n">topology</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+            <span class="n">topo_type</span> <span class="o">=</span> <span class="n">xmldecode</span><span class="p">(</span><span class="n">topology</span><span class="o">.</span><span class="n">getAttribute</span><span class="p">(</span><span class="s">&quot;topo-type&quot;</span><span class="p">))</span>
+
+            <span class="n">netgraph</span> <span class="o">=</span> <span class="n">NetGraph</span><span class="p">(</span><span class="n">topo_type</span> <span class="o">=</span> <span class="n">topo_type</span><span class="p">)</span>
+
+            <span class="n">ngnsnode_list</span> <span class="o">=</span> <span class="n">topology</span><span class="o">.</span><span class="n">getElementsByTagName</span><span class="p">(</span><span class="s">&quot;nodes&quot;</span><span class="p">)</span>
+            <span class="k">if</span> <span class="n">ngnsnode_list</span><span class="p">:</span>
+                <span class="n">ngnsnode</span> <span class="o">=</span> <span class="n">ngnsnode_list</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">getElementsByTagName</span><span class="p">(</span><span class="s">&quot;node&quot;</span><span class="p">)</span> 
+                <span class="k">for</span> <span class="n">ngnnode</span> <span class="ow">in</span> <span class="n">ngnsnode</span><span class="p">:</span>
+                    <span class="n">nid</span> <span class="o">=</span> <span class="n">xmldecode</span><span class="p">(</span><span class="n">ngnnode</span><span class="o">.</span><span class="n">getAttribute</span><span class="p">(</span><span class="s">&quot;nid&quot;</span><span class="p">))</span>
+                    <span class="n">tipe</span> <span class="o">=</span> <span class="n">xmldecode</span><span class="p">(</span><span class="n">ngnnode</span><span class="o">.</span><span class="n">getAttribute</span><span class="p">(</span><span class="s">&quot;nid-type&quot;</span><span class="p">))</span>
+                    <span class="n">nid</span> <span class="o">=</span> <span class="n">to_type</span><span class="p">(</span><span class="n">tipe</span><span class="p">,</span> <span class="n">nid</span><span class="p">)</span>
+                    <span class="n">netgraph</span><span class="o">.</span><span class="n">add_node</span><span class="p">(</span><span class="n">nid</span><span class="p">)</span>
+
+                    <span class="k">if</span> <span class="n">ngnnode</span><span class="o">.</span><span class="n">hasAttribute</span><span class="p">(</span><span class="s">&quot;source&quot;</span><span class="p">):</span>
+                        <span class="n">netgraph</span><span class="o">.</span><span class="n">set_source</span><span class="p">(</span><span class="n">nid</span><span class="p">)</span>
+                    <span class="k">if</span> <span class="n">ngnnode</span><span class="o">.</span><span class="n">hasAttribute</span><span class="p">(</span><span class="s">&quot;target&quot;</span><span class="p">):</span>
+                        <span class="n">netgraph</span><span class="o">.</span><span class="n">set_target</span><span class="p">(</span><span class="n">nid</span><span class="p">)</span>
+
+                    <span class="n">annosnode_list</span> <span class="o">=</span> <span class="n">ngnnode</span><span class="o">.</span><span class="n">getElementsByTagName</span><span class="p">(</span><span class="s">&quot;node-annotations&quot;</span><span class="p">)</span>
+                    
+                    <span class="k">if</span> <span class="n">annosnode_list</span><span class="p">:</span>
+                        <span class="n">annosnode</span> <span class="o">=</span> <span class="n">annosnode_list</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">getElementsByTagName</span><span class="p">(</span><span class="s">&quot;node-annotation&quot;</span><span class="p">)</span> 
+                        <span class="k">for</span> <span class="n">annonode</span> <span class="ow">in</span> <span class="n">annosnode</span><span class="p">:</span>
+                            <span class="n">name</span> <span class="o">=</span> <span class="n">xmldecode</span><span class="p">(</span><span class="n">annonode</span><span class="o">.</span><span class="n">getAttribute</span><span class="p">(</span><span class="s">&quot;name&quot;</span><span class="p">))</span>
+
+                            <span class="k">if</span> <span class="n">name</span> <span class="o">==</span> <span class="s">&quot;ips&quot;</span><span class="p">:</span>
+                                <span class="n">ips</span> <span class="o">=</span> <span class="n">xmldecode</span><span class="p">(</span><span class="n">annonode</span><span class="o">.</span><span class="n">getAttribute</span><span class="p">(</span><span class="s">&quot;value&quot;</span><span class="p">),</span> <span class="nb">eval</span><span class="p">)</span> <span class="c"># list</span>
+                                <span class="k">for</span> <span class="n">ip</span> <span class="ow">in</span> <span class="n">ips</span><span class="p">:</span>
+                                    <span class="n">netgraph</span><span class="o">.</span><span class="n">annotate_node_ip</span><span class="p">(</span><span class="n">nid</span><span class="p">,</span> <span class="n">ip</span><span class="p">)</span>
+                            <span class="k">else</span><span class="p">:</span>
+                                <span class="n">value</span> <span class="o">=</span> <span class="n">xmldecode</span><span class="p">(</span><span class="n">annonode</span><span class="o">.</span><span class="n">getAttribute</span><span class="p">(</span><span class="s">&quot;value&quot;</span><span class="p">))</span>
+                                <span class="n">tipe</span> <span class="o">=</span> <span class="n">xmldecode</span><span class="p">(</span><span class="n">annonode</span><span class="o">.</span><span class="n">getAttribute</span><span class="p">(</span><span class="s">&quot;type&quot;</span><span class="p">))</span>
+                                <span class="n">value</span> <span class="o">=</span> <span class="n">to_type</span><span class="p">(</span><span class="n">tipe</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
+                                <span class="n">netgraph</span><span class="o">.</span><span class="n">annotate_node</span><span class="p">(</span><span class="n">nid</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
+
+            <span class="n">ngesnode_list</span> <span class="o">=</span> <span class="n">topology</span><span class="o">.</span><span class="n">getElementsByTagName</span><span class="p">(</span><span class="s">&quot;edges&quot;</span><span class="p">)</span> 
+            <span class="k">if</span> <span class="n">ngesnode_list</span><span class="p">:</span>
+                <span class="n">ngesnode</span> <span class="o">=</span> <span class="n">ngesnode_list</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">getElementsByTagName</span><span class="p">(</span><span class="s">&quot;edge&quot;</span><span class="p">)</span> 
+                <span class="k">for</span> <span class="n">ngenode</span> <span class="ow">in</span> <span class="n">ngesnode</span><span class="p">:</span>
+                    <span class="n">nid1</span> <span class="o">=</span> <span class="n">xmldecode</span><span class="p">(</span><span class="n">ngenode</span><span class="o">.</span><span class="n">getAttribute</span><span class="p">(</span><span class="s">&quot;nid1&quot;</span><span class="p">))</span>
+                    <span class="n">tipe1</span> <span class="o">=</span> <span class="n">xmldecode</span><span class="p">(</span><span class="n">ngenode</span><span class="o">.</span><span class="n">getAttribute</span><span class="p">(</span><span class="s">&quot;nid1-type&quot;</span><span class="p">))</span>
+                    <span class="n">nid1</span> <span class="o">=</span> <span class="n">to_type</span><span class="p">(</span><span class="n">tipe1</span><span class="p">,</span> <span class="n">nid1</span><span class="p">)</span>
+
+                    <span class="n">nid2</span> <span class="o">=</span> <span class="n">xmldecode</span><span class="p">(</span><span class="n">ngenode</span><span class="o">.</span><span class="n">getAttribute</span><span class="p">(</span><span class="s">&quot;nid2&quot;</span><span class="p">))</span>
+                    <span class="n">tipe2</span> <span class="o">=</span> <span class="n">xmldecode</span><span class="p">(</span><span class="n">ngenode</span><span class="o">.</span><span class="n">getAttribute</span><span class="p">(</span><span class="s">&quot;nid2-type&quot;</span><span class="p">))</span>
+                    <span class="n">nid2</span> <span class="o">=</span> <span class="n">to_type</span><span class="p">(</span><span class="n">tipe2</span><span class="p">,</span> <span class="n">nid2</span><span class="p">)</span>
+
+                    <span class="n">netgraph</span><span class="o">.</span><span class="n">add_edge</span><span class="p">(</span><span class="n">nid1</span><span class="p">,</span> <span class="n">nid2</span><span class="p">)</span>
+
+                    <span class="n">annosnode_list</span> <span class="o">=</span> <span class="n">ngenode</span><span class="o">.</span><span class="n">getElementsByTagName</span><span class="p">(</span><span class="s">&quot;edge-annotations&quot;</span><span class="p">)</span>
+                    <span class="k">if</span> <span class="n">annosnode_list</span><span class="p">:</span>
+                        <span class="n">annosnode</span> <span class="o">=</span> <span class="n">annosnode_list</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">getElementsByTagName</span><span class="p">(</span><span class="s">&quot;edge-annotation&quot;</span><span class="p">)</span> 
+                        <span class="k">for</span> <span class="n">annonode</span> <span class="ow">in</span> <span class="n">annosnode</span><span class="p">:</span>
+                            <span class="n">name</span> <span class="o">=</span> <span class="n">xmldecode</span><span class="p">(</span><span class="n">annonode</span><span class="o">.</span><span class="n">getAttribute</span><span class="p">(</span><span class="s">&quot;name&quot;</span><span class="p">))</span>
+
+                            <span class="k">if</span> <span class="n">name</span> <span class="o">==</span> <span class="s">&quot;net&quot;</span><span class="p">:</span>
+                                <span class="n">net</span> <span class="o">=</span> <span class="n">xmldecode</span><span class="p">(</span><span class="n">annonode</span><span class="o">.</span><span class="n">getAttribute</span><span class="p">(</span><span class="s">&quot;value&quot;</span><span class="p">),</span> <span class="nb">eval</span><span class="p">)</span> <span class="c"># dict</span>
+                                <span class="n">netgraph</span><span class="o">.</span><span class="n">annotate_edge_net</span><span class="p">(</span><span class="n">nid1</span><span class="p">,</span> <span class="n">nid2</span><span class="p">,</span> <span class="n">net</span><span class="p">[</span><span class="n">nid1</span><span class="p">],</span> <span class="n">net</span><span class="p">[</span><span class="n">nid2</span><span class="p">],</span> 
+                                        <span class="n">net</span><span class="p">[</span><span class="s">&quot;mask&quot;</span><span class="p">],</span> <span class="n">net</span><span class="p">[</span><span class="s">&quot;network&quot;</span><span class="p">],</span> <span class="n">net</span><span class="p">[</span><span class="s">&quot;prefix&quot;</span><span class="p">])</span>
+                            <span class="k">else</span><span class="p">:</span>
+                                <span class="n">value</span> <span class="o">=</span> <span class="n">xmldecode</span><span class="p">(</span><span class="n">annonode</span><span class="o">.</span><span class="n">getAttribute</span><span class="p">(</span><span class="s">&quot;value&quot;</span><span class="p">))</span>
+                                <span class="n">tipe</span> <span class="o">=</span> <span class="n">xmldecode</span><span class="p">(</span><span class="n">annonode</span><span class="o">.</span><span class="n">getAttribute</span><span class="p">(</span><span class="s">&quot;type&quot;</span><span class="p">))</span>
+                                <span class="n">value</span> <span class="o">=</span> <span class="n">to_type</span><span class="p">(</span><span class="n">tipe</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
+                                <span class="n">netgraph</span><span class="o">.</span><span class="n">annotate_edge</span><span class="p">(</span><span class="n">nid1</span><span class="p">,</span> <span class="n">nid2</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">netgraph</span>
+
+    <span class="k">def</span> <span class="nf">_rm_from_xml</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">doc</span><span class="p">,</span> <span class="n">rmnode</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">connections</span><span class="p">):</span>
+        <span class="n">start_time</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="n">stop_time</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="n">discover_time</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="n">provision_time</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="n">ready_time</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="n">release_time</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="n">failed_time</span> <span class="o">=</span> <span class="bp">None</span>
+
+        <span class="n">guid</span> <span class="o">=</span> <span class="n">xmldecode</span><span class="p">(</span><span class="n">rmnode</span><span class="o">.</span><span class="n">getAttribute</span><span class="p">(</span><span class="s">&quot;guid&quot;</span><span class="p">),</span> <span class="nb">int</span><span class="p">)</span>
+        <span class="n">rtype</span> <span class="o">=</span> <span class="n">xmldecode</span><span class="p">(</span><span class="n">rmnode</span><span class="o">.</span><span class="n">getAttribute</span><span class="p">(</span><span class="s">&quot;rtype&quot;</span><span class="p">))</span>
+
+        <span class="c"># FOR NOW ONLY STATE NEW IS ALLOWED</span>
+        <span class="n">state</span> <span class="o">=</span> <span class="mi">0</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        state = xmldecode(rmnode.getAttribute(&quot;state&quot;), int)</span>
+
+<span class="sd">        if rmnode.hasAttribute(&quot;start_time&quot;):</span>
+<span class="sd">            start_time = xmldecode(rmnode.getAttribute(&quot;start_time&quot;), </span>
+<span class="sd">                    datetime.datetime)</span>
+<span class="sd">        if rmnode.hasAttribute(&quot;stop_time&quot;):</span>
+<span class="sd">            stop_time = xmldecode(rmnode.getAttribute(&quot;stop_time&quot;), </span>
+<span class="sd">                    datetime.datetime)</span>
+<span class="sd">        if rmnode.hasAttribute(&quot;discover_time&quot;):</span>
+<span class="sd">            dicover_time = xmldecode(rmnode.getAttribute(&quot;discover_time&quot;), </span>
+<span class="sd">                    datetime.datetime)</span>
+<span class="sd">        if rmnode.hasAttribute(&quot;provision_time&quot;):</span>
+<span class="sd">            provision_time = xmldecode(rmnode.getAttribute(&quot;provision_time&quot;),</span>
+<span class="sd">                    datetime.datetime)</span>
+<span class="sd">        if rmnode.hasAttribute(&quot;ready_time&quot;):</span>
+<span class="sd">            ready_time = xmldecode(rmnode.getAttribute(&quot;ready_time&quot;),</span>
+<span class="sd">                    datetime.datetime)</span>
+<span class="sd">        if rmnode.hasAttribute(&quot;release_time&quot;):</span>
+<span class="sd">            release_time = xmldecode(rmnode.getAttribute(&quot;release_time&quot;),</span>
+<span class="sd">                    datetime.datetime)</span>
+<span class="sd">        if rmnode.hasAttribute(&quot;failed_time&quot;):</span>
+<span class="sd">            failed_time = xmldecode(rmnode.getAttribute(&quot;failed_time&quot;),</span>
+<span class="sd">                    datetime.datetime)</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+
+        <span class="n">ec</span><span class="o">.</span><span class="n">register_resource</span><span class="p">(</span><span class="n">rtype</span><span class="p">,</span> <span class="n">guid</span> <span class="o">=</span> <span class="n">guid</span><span class="p">)</span>
+        <span class="n">rm</span> <span class="o">=</span> <span class="n">ec</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">guid</span><span class="p">)</span>
+        <span class="n">rm</span><span class="o">.</span><span class="n">set_state_time</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="s">&quot;_start_time&quot;</span><span class="p">,</span> <span class="n">start_time</span><span class="p">)</span>
+        <span class="n">rm</span><span class="o">.</span><span class="n">set_state_time</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="s">&quot;_stop_time&quot;</span><span class="p">,</span> <span class="n">stop_time</span><span class="p">)</span>
+        <span class="n">rm</span><span class="o">.</span><span class="n">set_state_time</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="s">&quot;_discover_time&quot;</span><span class="p">,</span> <span class="n">discover_time</span><span class="p">)</span>
+        <span class="n">rm</span><span class="o">.</span><span class="n">set_state_time</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="s">&quot;_provision_time&quot;</span><span class="p">,</span> <span class="n">provision_time</span><span class="p">)</span>
+        <span class="n">rm</span><span class="o">.</span><span class="n">set_state_time</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="s">&quot;_ready_time&quot;</span><span class="p">,</span> <span class="n">ready_time</span><span class="p">)</span>
+        <span class="n">rm</span><span class="o">.</span><span class="n">set_state_time</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="s">&quot;_release_time&quot;</span><span class="p">,</span> <span class="n">release_time</span><span class="p">)</span>
+        <span class="n">rm</span><span class="o">.</span><span class="n">set_state_time</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="s">&quot;_failed_time&quot;</span><span class="p">,</span> <span class="n">failed_time</span><span class="p">)</span>
+        
+        <span class="n">anode_list</span> <span class="o">=</span> <span class="n">rmnode</span><span class="o">.</span><span class="n">getElementsByTagName</span><span class="p">(</span><span class="s">&quot;attributes&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">anode_list</span><span class="p">:</span>
+            <span class="n">aanode_list</span> <span class="o">=</span> <span class="n">anode_list</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">getElementsByTagName</span><span class="p">(</span><span class="s">&quot;attribute&quot;</span><span class="p">)</span> 
+            <span class="k">for</span> <span class="n">aanode</span> <span class="ow">in</span> <span class="n">aanode_list</span><span class="p">:</span>
+                <span class="n">name</span> <span class="o">=</span> <span class="n">xmldecode</span><span class="p">(</span><span class="n">aanode</span><span class="o">.</span><span class="n">getAttribute</span><span class="p">(</span><span class="s">&quot;name&quot;</span><span class="p">))</span>
+                <span class="n">value</span> <span class="o">=</span> <span class="n">xmldecode</span><span class="p">(</span><span class="n">aanode</span><span class="o">.</span><span class="n">getAttribute</span><span class="p">(</span><span class="s">&quot;value&quot;</span><span class="p">))</span>
+                <span class="n">tipe</span> <span class="o">=</span> <span class="n">xmldecode</span><span class="p">(</span><span class="n">aanode</span><span class="o">.</span><span class="n">getAttribute</span><span class="p">(</span><span class="s">&quot;type&quot;</span><span class="p">))</span>
+                <span class="n">value</span> <span class="o">=</span> <span class="n">to_type</span><span class="p">(</span><span class="n">tipe</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
+                <span class="n">rm</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
+
+        <span class="n">cnode_list</span> <span class="o">=</span> <span class="n">rmnode</span><span class="o">.</span><span class="n">getElementsByTagName</span><span class="p">(</span><span class="s">&quot;connections&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">cnode_list</span><span class="p">:</span>
+            <span class="n">ccnode_list</span> <span class="o">=</span> <span class="n">cnode_list</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">getElementsByTagName</span><span class="p">(</span><span class="s">&quot;connection&quot;</span><span class="p">)</span> 
+            <span class="k">for</span> <span class="n">ccnode</span> <span class="ow">in</span> <span class="n">ccnode_list</span><span class="p">:</span>
+                <span class="n">guid2</span> <span class="o">=</span> <span class="n">xmldecode</span><span class="p">(</span><span class="n">ccnode</span><span class="o">.</span><span class="n">getAttribute</span><span class="p">(</span><span class="s">&quot;guid&quot;</span><span class="p">),</span> <span class="nb">int</span><span class="p">)</span>
+                <span class="n">connections</span><span class="o">.</span><span class="n">add</span><span class="p">((</span><span class="n">guid</span><span class="p">,</span> <span class="n">guid2</span><span class="p">))</span>
+
+        <span class="n">tnode_list</span> <span class="o">=</span> <span class="n">rmnode</span><span class="o">.</span><span class="n">getElementsByTagName</span><span class="p">(</span><span class="s">&quot;traces&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">tnode_list</span><span class="p">:</span>
+            <span class="n">ttnode_list</span> <span class="o">=</span> <span class="n">tnode_list</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">getElementsByTagName</span><span class="p">(</span><span class="s">&quot;trace&quot;</span><span class="p">)</span> 
+            <span class="k">for</span> <span class="n">ttnode</span> <span class="ow">in</span> <span class="n">ttnode_list</span><span class="p">:</span>
+                <span class="n">name</span> <span class="o">=</span> <span class="n">xmldecode</span><span class="p">(</span><span class="n">ttnode</span><span class="o">.</span><span class="n">getAttribute</span><span class="p">(</span><span class="s">&quot;name&quot;</span><span class="p">))</span>
+                <span class="n">ec</span><span class="o">.</span><span class="n">enable_trace</span><span class="p">(</span><span class="n">guid</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
+
+        <span class="n">cnnode_list</span> <span class="o">=</span> <span class="n">rmnode</span><span class="o">.</span><span class="n">getElementsByTagName</span><span class="p">(</span><span class="s">&quot;conditions&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">cnnode_list</span><span class="p">:</span>
+            <span class="n">ccnnode_list</span> <span class="o">=</span> <span class="n">cnnode_list</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">getElementsByTagName</span><span class="p">(</span><span class="s">&quot;condition&quot;</span><span class="p">)</span> 
+            <span class="k">for</span> <span class="n">ccnnode</span> <span class="ow">in</span> <span class="n">ccnnode_list</span><span class="p">:</span>
+                <span class="n">action</span> <span class="o">=</span> <span class="n">xmldecode</span><span class="p">(</span><span class="n">ccnnode</span><span class="o">.</span><span class="n">getAttribute</span><span class="p">(</span><span class="s">&quot;action&quot;</span><span class="p">),</span> <span class="nb">int</span><span class="p">)</span>
+                <span class="n">group</span> <span class="o">=</span> <span class="n">xmldecode</span><span class="p">(</span><span class="n">ccnnode</span><span class="o">.</span><span class="n">getAttribute</span><span class="p">(</span><span class="s">&quot;group&quot;</span><span class="p">),</span> <span class="nb">eval</span><span class="p">)</span> <span class="c"># list</span>
+                <span class="n">state</span> <span class="o">=</span> <span class="n">xmldecode</span><span class="p">(</span><span class="n">ccnnode</span><span class="o">.</span><span class="n">getAttribute</span><span class="p">(</span><span class="s">&quot;state&quot;</span><span class="p">),</span> <span class="nb">int</span><span class="p">)</span>
+                <span class="n">time</span> <span class="o">=</span> <span class="n">xmldecode</span><span class="p">(</span><span class="n">ccnnode</span><span class="o">.</span><span class="n">getAttribute</span><span class="p">(</span><span class="s">&quot;time&quot;</span><span class="p">))</span>
+                <span class="n">time</span> <span class="o">=</span> <span class="n">to_type</span><span class="p">(</span><span class="s">&#39;STRING&#39;</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
+                <span class="n">ec</span><span class="o">.</span><span class="n">register_condition</span><span class="p">(</span><span class="n">guid</span><span class="p">,</span> <span class="n">action</span><span class="p">,</span> <span class="n">group</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">time</span> <span class="o">=</span> <span class="n">time</span><span class="p">)</span>
+                 </div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/util/plotter.html b/doc/sphinx/_build/html/_modules/nepi/util/plotter.html
new file mode 100644 (file)
index 0000000..3276b3c
--- /dev/null
@@ -0,0 +1,198 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.util.plotter &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../index.html" />
+    <link rel="up" title="Module code" href="../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.util.plotter</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">import</span> <span class="nn">logging</span>
+<span class="kn">import</span> <span class="nn">os</span>
+
+<span class="k">try</span><span class="p">:</span>
+    <span class="kn">import</span> <span class="nn">networkx</span>
+<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
+    <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Networkx library is not installed, you will not be able to plot.&quot;</span>
+    <span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">Logger</span><span class="p">(</span><span class="s">&quot;Plotter&quot;</span><span class="p">)</span>
+    <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+
+<span class="k">try</span><span class="p">:</span>
+    <span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="kn">as</span> <span class="nn">plt</span>
+<span class="k">except</span><span class="p">:</span>
+    <span class="n">msg</span> <span class="o">=</span> <span class="p">(</span><span class="s">&quot;Matplotlib library is not installed or X11 is not enabled. &quot;</span>
+        <span class="s">&quot;You will not be able generate PNG plots.&quot;</span><span class="p">)</span>
+    <span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">Logger</span><span class="p">(</span><span class="s">&quot;Plotter&quot;</span><span class="p">)</span>
+    <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+
+<div class="viewcode-block" id="PFormats"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.plotter.PFormats">[docs]</a><span class="k">class</span> <span class="nc">PFormats</span><span class="p">:</span>
+    <span class="n">DOT</span> <span class="o">=</span> <span class="s">&quot;dot&quot;</span>
+    <span class="n">FIGURE</span> <span class="o">=</span> <span class="s">&quot;figure&quot;</span>
+</div>
+<div class="viewcode-block" id="ECPlotter"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.plotter.ECPlotter">[docs]</a><span class="k">class</span> <span class="nc">ECPlotter</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+<div class="viewcode-block" id="ECPlotter.plot"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.plotter.ECPlotter.plot">[docs]</a>    <span class="k">def</span> <span class="nf">plot</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">dirpath</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">format</span><span class="o">=</span> <span class="n">PFormats</span><span class="o">.</span><span class="n">FIGURE</span><span class="p">,</span> 
+            <span class="n">show</span> <span class="o">=</span> <span class="bp">False</span><span class="p">):</span>
+        <span class="n">graph</span><span class="p">,</span> <span class="n">labels</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ec2graph</span><span class="p">(</span><span class="n">ec</span><span class="p">)</span>
+
+        <span class="n">add_extension</span> <span class="o">=</span> <span class="bp">False</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">dirpath</span><span class="p">:</span>
+            <span class="kn">import</span> <span class="nn">tempfile</span>
+            <span class="n">dirpath</span> <span class="o">=</span> <span class="n">tempfile</span><span class="o">.</span><span class="n">mkdtemp</span><span class="p">()</span>
+        
+        <span class="n">fpath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">dirpath</span><span class="p">,</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">_</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">ec</span><span class="o">.</span><span class="n">exp_id</span><span class="p">,</span> <span class="n">ec</span><span class="o">.</span><span class="n">run_id</span><span class="p">))</span> 
+
+        <span class="k">if</span> <span class="n">format</span> <span class="o">==</span> <span class="n">PFormats</span><span class="o">.</span><span class="n">FIGURE</span><span class="p">:</span>
+            <span class="n">pos</span> <span class="o">=</span> <span class="n">networkx</span><span class="o">.</span><span class="n">graphviz_layout</span><span class="p">(</span><span class="n">graph</span><span class="p">,</span> <span class="n">prog</span><span class="o">=</span><span class="s">&quot;neato&quot;</span><span class="p">)</span>
+            <span class="n">networkx</span><span class="o">.</span><span class="n">draw</span><span class="p">(</span><span class="n">graph</span><span class="p">,</span> <span class="n">pos</span> <span class="o">=</span> <span class="n">pos</span><span class="p">,</span> <span class="n">node_color</span><span class="o">=</span><span class="s">&quot;white&quot;</span><span class="p">,</span> 
+                    <span class="n">node_size</span> <span class="o">=</span> <span class="mi">500</span><span class="p">,</span> <span class="n">with_labels</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+           
+            <span class="n">label</span> <span class="o">=</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="k">lambda</span> <span class="n">v</span><span class="p">:</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">v</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">v</span><span class="p">[</span><span class="mi">1</span><span class="p">]),</span> <span class="n">labels</span><span class="o">.</span><span class="n">iteritems</span><span class="p">()))</span>
+            <span class="n">plt</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="n">label</span><span class="p">,</span> <span class="n">xy</span><span class="o">=</span><span class="p">(</span><span class="mf">0.05</span><span class="p">,</span> <span class="mf">0.95</span><span class="p">),</span> <span class="n">xycoords</span><span class="o">=</span><span class="s">&#39;axes fraction&#39;</span><span class="p">)</span>
+           
+            <span class="n">fpath</span> <span class="o">+=</span> <span class="s">&quot;.png&quot;</span>
+
+            <span class="n">plt</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span><span class="n">fpath</span><span class="p">,</span> <span class="n">bbox_inches</span><span class="o">=</span><span class="s">&quot;tight&quot;</span><span class="p">)</span>
+            
+            <span class="k">if</span> <span class="n">show</span><span class="p">:</span>
+                <span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
+
+        <span class="k">elif</span> <span class="n">format</span> <span class="o">==</span> <span class="n">PFormats</span><span class="o">.</span><span class="n">DOT</span><span class="p">:</span>
+            <span class="n">fpath</span> <span class="o">+=</span> <span class="s">&quot;.dot&quot;</span>
+
+            <span class="n">networkx</span><span class="o">.</span><span class="n">write_dot</span><span class="p">(</span><span class="n">graph</span><span class="p">,</span> <span class="n">fpath</span><span class="p">)</span>
+            
+            <span class="k">if</span> <span class="n">show</span><span class="p">:</span>
+                <span class="kn">import</span> <span class="nn">subprocess</span>
+                <span class="n">subprocess</span><span class="o">.</span><span class="n">call</span><span class="p">([</span><span class="s">&quot;dot&quot;</span><span class="p">,</span> <span class="s">&quot;-Tps&quot;</span><span class="p">,</span> <span class="n">fpath</span><span class="p">,</span> <span class="s">&quot;-o&quot;</span><span class="p">,</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">.ps&quot;</span> <span class="o">%</span> <span class="n">fpath</span><span class="p">])</span>
+                <span class="n">subprocess</span><span class="o">.</span><span class="n">call</span><span class="p">([</span><span class="s">&quot;evince&quot;</span><span class="p">,</span><span class="s">&quot;</span><span class="si">%s</span><span class="s">.ps&quot;</span> <span class="o">%</span> <span class="n">fpath</span><span class="p">])</span>
+        
+        <span class="k">return</span> <span class="n">fpath</span>
+</div>
+    <span class="k">def</span> <span class="nf">_ec2graph</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">):</span>
+        <span class="n">graph</span> <span class="o">=</span> <span class="n">networkx</span><span class="o">.</span><span class="n">Graph</span><span class="p">(</span><span class="n">graph</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="n">overlap</span> <span class="o">=</span> <span class="s">&quot;false&quot;</span><span class="p">))</span>
+
+        <span class="n">labels</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
+        <span class="n">connections</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+
+        <span class="k">for</span> <span class="n">guid</span><span class="p">,</span> <span class="n">rm</span> <span class="ow">in</span> <span class="n">ec</span><span class="o">.</span><span class="n">_resources</span><span class="o">.</span><span class="n">iteritems</span><span class="p">():</span>
+            <span class="n">label</span> <span class="o">=</span> <span class="n">rm</span><span class="o">.</span><span class="n">get_rtype</span><span class="p">()</span>
+
+            <span class="n">graph</span><span class="o">.</span><span class="n">add_node</span><span class="p">(</span><span class="n">guid</span><span class="p">,</span>
+                <span class="n">label</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%d</span><span class="s"> </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">guid</span><span class="p">,</span> <span class="n">label</span><span class="p">),</span>
+                <span class="n">width</span> <span class="o">=</span> <span class="mi">50</span><span class="o">/</span><span class="mf">72.0</span><span class="p">,</span> <span class="c"># 1 inch = 72 points</span>
+                <span class="n">height</span> <span class="o">=</span> <span class="mi">50</span><span class="o">/</span><span class="mf">72.0</span><span class="p">,</span> 
+                <span class="n">shape</span> <span class="o">=</span> <span class="s">&quot;circle&quot;</span><span class="p">)</span>
+
+            <span class="n">labels</span><span class="p">[</span><span class="n">guid</span><span class="p">]</span> <span class="o">=</span> <span class="n">label</span>
+
+            <span class="k">for</span> <span class="n">guid2</span> <span class="ow">in</span> <span class="n">rm</span><span class="o">.</span><span class="n">connections</span><span class="p">:</span>
+                <span class="c"># Avoid adding a same connection twice</span>
+                <span class="k">if</span> <span class="p">(</span><span class="n">guid2</span><span class="p">,</span> <span class="n">guid</span><span class="p">)</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">connections</span><span class="p">:</span>
+                    <span class="n">connections</span><span class="o">.</span><span class="n">add</span><span class="p">((</span><span class="n">guid</span><span class="p">,</span> <span class="n">guid2</span><span class="p">))</span>
+
+        <span class="k">for</span> <span class="p">(</span><span class="n">guid1</span><span class="p">,</span> <span class="n">guid2</span><span class="p">)</span> <span class="ow">in</span> <span class="n">connections</span><span class="p">:</span>
+            <span class="n">graph</span><span class="o">.</span><span class="n">add_edge</span><span class="p">(</span><span class="n">guid1</span><span class="p">,</span> <span class="n">guid2</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">graph</span><span class="p">,</span> <span class="n">labels</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/util/rmatcher.html b/doc/sphinx/_build/html/_modules/nepi/util/rmatcher.html
new file mode 100644 (file)
index 0000000..3279823
--- /dev/null
@@ -0,0 +1,155 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.util.rmatcher &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../index.html" />
+    <link rel="up" title="Module code" href="../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.util.rmatcher</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<div class="viewcode-block" id="match_tags"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.rmatcher.match_tags">[docs]</a><span class="k">def</span> <span class="nf">match_tags</span><span class="p">(</span><span class="n">box</span><span class="p">,</span> <span class="n">all_tags</span><span class="p">,</span> <span class="n">exact_tags</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot; returns True if box has required tags &quot;&quot;&quot;</span>
+    <span class="n">tall</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">all_tags</span><span class="p">)</span>
+    <span class="n">texact</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">exact_tags</span><span class="p">)</span>
+
+    <span class="k">if</span> <span class="n">texact</span> <span class="ow">and</span> <span class="n">box</span><span class="o">.</span><span class="n">connections</span> <span class="o">==</span> <span class="n">texact</span><span class="p">:</span>
+        <span class="k">return</span> <span class="bp">True</span>
+
+    <span class="k">if</span> <span class="n">tall</span> <span class="ow">and</span> <span class="n">tall</span><span class="o">.</span><span class="n">issubset</span><span class="p">(</span><span class="n">box</span><span class="o">.</span><span class="n">connections</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">True</span>
+
+    <span class="k">return</span> <span class="bp">False</span>
+</div>
+<div class="viewcode-block" id="find_boxes"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.rmatcher.find_boxes">[docs]</a><span class="k">def</span> <span class="nf">find_boxes</span><span class="p">(</span><span class="n">box</span><span class="p">,</span> <span class="n">all_tags</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">exact_tags</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">max_depth</span> <span class="o">=</span> <span class="mi">1</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot; Look for the connected boxes with the required tags, doing breath-first</span>
+<span class="sd">    search, until max_depth ( max_depth = None will traverse the entire graph ).</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="k">if</span> <span class="ow">not</span> <span class="n">all_tags</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">exact_tags</span><span class="p">:</span>
+        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;No matching criteria for resources.&quot;</span>
+        <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+
+    <span class="n">queue</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+    <span class="c"># enqueue (depth, box) </span>
+    <span class="n">queue</span><span class="o">.</span><span class="n">add</span><span class="p">((</span><span class="mi">0</span><span class="p">,</span> <span class="n">box</span><span class="p">))</span>
+    
+    <span class="n">traversed</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+    <span class="n">traversed</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">box</span><span class="p">)</span>
+
+    <span class="n">depth</span> <span class="o">=</span> <span class="mi">0</span>
+
+    <span class="n">result</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+
+    <span class="k">while</span> <span class="nb">len</span><span class="p">(</span><span class="n">q</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span> 
+        <span class="p">(</span><span class="n">depth</span><span class="p">,</span> <span class="n">a</span><span class="p">)</span> <span class="o">=</span> <span class="n">queue</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
+        <span class="k">if</span> <span class="n">match_tags</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">all_tags</span><span class="p">,</span> <span class="n">exact_tags</span><span class="p">):</span>
+            <span class="n">result</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">max_depth</span> <span class="ow">or</span> <span class="n">depth</span> <span class="o">&lt;=</span> <span class="n">max_depth</span><span class="p">:</span>
+            <span class="n">depth</span> <span class="o">+=</span> <span class="mi">1</span>
+            <span class="k">for</span> <span class="n">b</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">a</span><span class="o">.</span><span class="n">connections</span><span class="p">):</span>
+                <span class="k">if</span> <span class="n">b</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">traversed</span><span class="p">:</span>
+                    <span class="n">traversed</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
+                    <span class="n">queue</span><span class="o">.</span><span class="n">add</span><span class="p">((</span><span class="n">depth</span><span class="p">,</span> <span class="n">b</span><span class="p">))</span>
+    
+    <span class="k">return</span> <span class="n">result</span></div>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/util/serializer.html b/doc/sphinx/_build/html/_modules/nepi/util/serializer.html
new file mode 100644 (file)
index 0000000..9514b5e
--- /dev/null
@@ -0,0 +1,151 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.util.serializer &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../index.html" />
+    <link rel="up" title="Module code" href="../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.util.serializer</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">import</span> <span class="nn">datetime</span>
+<span class="kn">import</span> <span class="nn">os</span>
+
+<div class="viewcode-block" id="SFormats"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.serializer.SFormats">[docs]</a><span class="k">class</span> <span class="nc">SFormats</span><span class="p">:</span>
+    <span class="n">XML</span> <span class="o">=</span> <span class="s">&quot;xml&quot;</span>
+    </div>
+<div class="viewcode-block" id="ECSerializer"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.serializer.ECSerializer">[docs]</a><span class="k">class</span> <span class="nc">ECSerializer</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+<div class="viewcode-block" id="ECSerializer.load"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.serializer.ECSerializer.load">[docs]</a>    <span class="k">def</span> <span class="nf">load</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filepath</span><span class="p">,</span> <span class="n">format</span> <span class="o">=</span> <span class="n">SFormats</span><span class="o">.</span><span class="n">XML</span><span class="p">):</span>
+        <span class="k">if</span> <span class="n">format</span> <span class="o">==</span> <span class="n">SFormats</span><span class="o">.</span><span class="n">XML</span><span class="p">:</span>
+            <span class="kn">from</span> <span class="nn">nepi.util.parsers.xml_parser</span> <span class="kn">import</span> <span class="n">ECXMLParser</span>
+            
+            <span class="n">parser</span> <span class="o">=</span> <span class="n">ECXMLParser</span><span class="p">()</span>
+            <span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">filepath</span><span class="p">,</span> <span class="s">&quot;r&quot;</span><span class="p">)</span>
+            <span class="n">xml</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
+            <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+            <span class="n">ec</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">from_xml</span><span class="p">(</span><span class="n">xml</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">ec</span>
+</div>
+<div class="viewcode-block" id="ECSerializer.serialize"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.serializer.ECSerializer.serialize">[docs]</a>    <span class="k">def</span> <span class="nf">serialize</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">format</span> <span class="o">=</span> <span class="n">SFormats</span><span class="o">.</span><span class="n">XML</span><span class="p">):</span>
+        <span class="k">if</span> <span class="n">format</span> <span class="o">==</span> <span class="n">SFormats</span><span class="o">.</span><span class="n">XML</span><span class="p">:</span>
+            <span class="kn">from</span> <span class="nn">nepi.util.parsers.xml_parser</span> <span class="kn">import</span> <span class="n">ECXMLParser</span>
+            
+            <span class="n">parser</span> <span class="o">=</span> <span class="n">ECXMLParser</span><span class="p">()</span>
+            <span class="n">sec</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">to_xml</span><span class="p">(</span><span class="n">ec</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">sec</span>
+</div>
+<div class="viewcode-block" id="ECSerializer.save"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.serializer.ECSerializer.save">[docs]</a>    <span class="k">def</span> <span class="nf">save</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span> <span class="n">dirpath</span><span class="p">,</span> <span class="n">format</span> <span class="o">=</span> <span class="n">SFormats</span><span class="o">.</span><span class="n">XML</span><span class="p">):</span>
+        <span class="n">date</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s">&#39;%Y%m</span><span class="si">%d</span><span class="s">%H%M%S&#39;</span><span class="p">)</span>
+        <span class="n">filename</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">_</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">ec</span><span class="o">.</span><span class="n">exp_id</span><span class="p">,</span> <span class="n">date</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">format</span> <span class="o">==</span> <span class="n">SFormats</span><span class="o">.</span><span class="n">XML</span><span class="p">:</span>
+            <span class="n">filepath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">dirpath</span><span class="p">,</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">.xml&quot;</span> <span class="o">%</span> <span class="n">filename</span><span class="p">)</span>
+            <span class="n">sec</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">serialize</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">format</span> <span class="o">=</span> <span class="n">format</span><span class="p">)</span>
+            <span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">filepath</span><span class="p">,</span> <span class="s">&quot;w&quot;</span><span class="p">)</span>
+            <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">sec</span><span class="p">)</span>
+            <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+        <span class="k">return</span> <span class="n">filepath</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/util/sfaapi.html b/doc/sphinx/_build/html/_modules/nepi/util/sfaapi.html
new file mode 100644 (file)
index 0000000..1939a77
--- /dev/null
@@ -0,0 +1,562 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.util.sfaapi &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../index.html" />
+    <link rel="up" title="Module code" href="../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.util.sfaapi</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Lucia Guevgeozian Odizzio &lt;lucia.guevgeozian_odizzio@inria.fr&gt;</span>
+
+<span class="kn">import</span> <span class="nn">threading</span>
+<span class="kn">import</span> <span class="nn">hashlib</span>
+<span class="kn">import</span> <span class="nn">re</span>
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">time</span>
+
+<span class="kn">from</span> <span class="nn">nepi.util.logger</span> <span class="kn">import</span> <span class="n">Logger</span>
+
+<span class="k">try</span><span class="p">:</span>
+    <span class="kn">from</span> <span class="nn">sfa.client.sfi</span> <span class="kn">import</span> <span class="n">Sfi</span>
+    <span class="kn">from</span> <span class="nn">sfa.util.xrn</span> <span class="kn">import</span> <span class="n">hrn_to_urn</span>
+<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
+    <span class="n">log</span> <span class="o">=</span> <span class="n">Logger</span><span class="p">(</span><span class="s">&quot;SFA API&quot;</span><span class="p">)</span>
+    <span class="n">log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;Packages sfa-common or sfa-client not installed.</span><span class="se">\</span>
+<span class="s">         Could not import sfa.client.sfi or sfa.util.xrn&quot;</span><span class="p">)</span>
+
+<span class="kn">from</span> <span class="nn">nepi.util.sfarspec_proc</span> <span class="kn">import</span> <span class="n">SfaRSpecProcessing</span>
+
+<div class="viewcode-block" id="SFAAPI"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.sfaapi.SFAAPI">[docs]</a><span class="k">class</span> <span class="nc">SFAAPI</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    API for quering the SFA service. It uses Sfi class from the tool sfi client.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sfi_user</span><span class="p">,</span> <span class="n">sfi_auth</span><span class="p">,</span> <span class="n">sfi_registry</span><span class="p">,</span> <span class="n">sfi_sm</span><span class="p">,</span> <span class="n">private_key</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span>
+        <span class="n">batch</span><span class="p">,</span> <span class="n">rtype</span><span class="p">,</span> <span class="n">timeout</span><span class="p">):</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">_blacklist</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_reserved</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_resources_cache</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_already_cached</span> <span class="o">=</span> <span class="bp">False</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_ec</span> <span class="o">=</span> <span class="n">ec</span> 
+        <span class="bp">self</span><span class="o">.</span><span class="n">apis</span> <span class="o">=</span> <span class="mi">1</span>
+
+        <span class="k">if</span> <span class="n">batch</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_testbed_res</span> <span class="o">=</span> <span class="n">rtype</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_count</span> <span class="o">=</span> <span class="mi">0</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_total</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_total_res</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_slice_resources_batch</span> <span class="o">=</span> <span class="nb">list</span><span class="p">()</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">_log</span> <span class="o">=</span> <span class="n">Logger</span><span class="p">(</span><span class="s">&quot;SFA API&quot;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">api</span> <span class="o">=</span> <span class="n">Sfi</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">rspec_proc</span> <span class="o">=</span> <span class="n">SfaRSpecProcessing</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">lock_slice</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Lock</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">lock_blist</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Lock</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">lock_resv</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Lock</span><span class="p">()</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">api</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">timeout</span> <span class="o">=</span> <span class="n">timeout</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">api</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">raw</span> <span class="o">=</span> <span class="bp">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">api</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">user</span> <span class="o">=</span> <span class="n">sfi_user</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">api</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">auth</span> <span class="o">=</span> <span class="n">sfi_auth</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">api</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">registry</span> <span class="o">=</span> <span class="n">sfi_registry</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">api</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">sm</span> <span class="o">=</span> <span class="n">sfi_sm</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">api</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">user_private_key</span> <span class="o">=</span> <span class="n">private_key</span>
+
+        <span class="c"># Load blacklist from file</span>
+        <span class="k">if</span> <span class="n">ec</span><span class="o">.</span><span class="n">get_global</span><span class="p">(</span><span class="s">&#39;PlanetlabNode&#39;</span><span class="p">,</span> <span class="s">&#39;persist_blacklist&#39;</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_set_blacklist</span><span class="p">()</span>
+
+    <span class="k">def</span> <span class="nf">_set_blacklist</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Initialize the blacklist with previous nodes blacklisted, in </span>
+<span class="sd">        previous runs.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">nepi_home</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expanduser</span><span class="p">(</span><span class="s">&quot;~&quot;</span><span class="p">),</span> <span class="s">&quot;.nepi&quot;</span><span class="p">)</span>
+        <span class="n">plblacklist_file</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">nepi_home</span><span class="p">,</span> <span class="s">&quot;plblacklist.txt&quot;</span><span class="p">)</span>
+        <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">plblacklist_file</span><span class="p">,</span> <span class="s">&#39;r&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
+            <span class="n">hosts_tobl</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()</span>
+            <span class="k">if</span> <span class="n">hosts_tobl</span><span class="p">:</span>
+                <span class="k">for</span> <span class="n">host</span> <span class="ow">in</span> <span class="n">hosts_tobl</span><span class="p">:</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">_blacklist</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">host</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_get_total_res</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Get the total amount of resources instanciated using this API,</span>
+<span class="sd">        to be able to add them using the same Allocate and Provision</span>
+<span class="sd">        call at once. Specially for Wilabt testbed that doesn&#39;t allow </span>
+<span class="sd">        to add slivers after the slice already has some.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">rms</span> <span class="o">=</span> <span class="nb">list</span><span class="p">()</span>
+        <span class="n">res_gids</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ec</span><span class="o">.</span><span class="n">resources</span>
+        <span class="k">for</span> <span class="n">gid</span> <span class="ow">in</span> <span class="n">res_gids</span><span class="p">:</span>
+            <span class="n">rm</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ec</span><span class="o">.</span><span class="n">get_resource</span><span class="p">(</span><span class="n">gid</span><span class="p">)</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_testbed_res</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="n">rm</span><span class="o">.</span><span class="n">_rtype</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span>
+                <span class="n">rms</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">rm</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">rms</span>
+
+    <span class="k">def</span> <span class="nf">_sfi_exec_method</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">command</span><span class="p">,</span> <span class="n">slicename</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">rspec</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">urn</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Execute sfi method, which correspond to SFA call. It can be the following</span>
+<span class="sd">        calls: Describe, Delete, Allocate, Provision, ListResources.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="n">command</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&#39;describe&#39;</span><span class="p">,</span> <span class="s">&#39;delete&#39;</span><span class="p">,</span> <span class="s">&#39;allocate&#39;</span><span class="p">,</span> <span class="s">&#39;provision&#39;</span><span class="p">,</span> <span class="s">&#39;action&#39;</span><span class="p">]:</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="n">slicename</span><span class="p">:</span>
+                <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s">&quot;The slice hrn is expected for this method </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
+            <span class="k">if</span> <span class="n">command</span> <span class="o">==</span> <span class="s">&#39;allocate&#39;</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">rspec</span><span class="p">:</span>
+                <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s">&quot;RSpec is expected for this method </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
+            
+            <span class="k">if</span> <span class="n">command</span> <span class="o">==</span> <span class="s">&#39;allocate&#39;</span><span class="p">:</span>
+                <span class="n">args_list</span> <span class="o">=</span> <span class="p">[</span><span class="n">slicename</span><span class="p">,</span> <span class="n">rspec</span><span class="p">]</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="n">args_list</span> <span class="o">=</span> <span class="p">[</span><span class="n">slicename</span><span class="p">]</span>
+            <span class="k">if</span> <span class="n">command</span> <span class="o">!=</span> <span class="s">&#39;delete&#39;</span><span class="p">:</span>
+                <span class="n">args_list</span> <span class="o">=</span> <span class="n">args_list</span> <span class="o">+</span> <span class="p">[</span><span class="s">&#39;-o&#39;</span><span class="p">,</span> <span class="s">&#39;/tmp/rspec_output&#39;</span><span class="p">]</span>
+            <span class="k">if</span> <span class="n">command</span> <span class="o">==</span> <span class="s">&#39;action&#39;</span><span class="p">:</span>
+                <span class="n">args_list</span> <span class="o">=</span> <span class="p">[</span><span class="n">slicename</span><span class="p">,</span> <span class="n">action</span><span class="p">]</span>
+
+        <span class="k">elif</span> <span class="n">command</span> <span class="o">==</span> <span class="s">&#39;resources&#39;</span><span class="p">:</span>
+            <span class="n">args_list</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;-o&#39;</span><span class="p">,</span> <span class="s">&#39;/tmp/rspec_output&#39;</span><span class="p">]</span>
+
+        <span class="k">else</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s">&quot;Sfi method not supported&quot;</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">api</span><span class="o">.</span><span class="n">command</span> <span class="o">=</span> <span class="n">command</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">api</span><span class="o">.</span><span class="n">command_parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">api</span><span class="o">.</span><span class="n">create_parser_command</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">api</span><span class="o">.</span><span class="n">command</span><span class="p">)</span>
+        <span class="p">(</span><span class="n">command_options</span><span class="p">,</span> <span class="n">command_args</span><span class="p">)</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">api</span><span class="o">.</span><span class="n">command_parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">(</span><span class="n">args_list</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">api</span><span class="o">.</span><span class="n">command_options</span> <span class="o">=</span> <span class="n">command_options</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">api</span><span class="o">.</span><span class="n">read_config</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">api</span><span class="o">.</span><span class="n">bootstrap</span><span class="p">()</span>
+
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">os</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="s">&quot;/tmp/rspec_output.rspec&quot;</span><span class="p">)</span>
+        <span class="k">except</span> <span class="ne">OSError</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;Couldn&#39;t remove temporary output file for RSpec or it doesn&#39;t exist&quot;</span><span class="p">)</span>
+
+        <span class="k">try</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">api</span><span class="o">.</span><span class="n">dispatch</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="n">command_options</span><span class="p">,</span> <span class="n">command_args</span><span class="p">)</span>
+            <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s">&quot;/tmp/rspec_output.rspec&quot;</span><span class="p">,</span> <span class="s">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">result_file</span><span class="p">:</span>
+                <span class="n">result</span> <span class="o">=</span> <span class="n">result_file</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
+                <span class="k">return</span> <span class="n">result</span>
+        <span class="k">except</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot; Couldn&#39;t retrive rspec output information from method </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="n">command</span><span class="p">)</span>
+            <span class="k">return</span> <span class="bp">None</span>
+
+<div class="viewcode-block" id="SFAAPI.get_resources_info"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.sfaapi.SFAAPI.get_resources_info">[docs]</a>    <span class="k">def</span> <span class="nf">get_resources_info</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Get all resources and its attributes from aggregate.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">rspec_slice</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_sfi_exec_method</span><span class="p">(</span><span class="s">&#39;resources&#39;</span><span class="p">)</span>
+        <span class="k">except</span><span class="p">:</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s">&quot;Fail to list resources&quot;</span><span class="p">)</span>
+   
+        <span class="bp">self</span><span class="o">.</span><span class="n">_resources_cache</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rspec_proc</span><span class="o">.</span><span class="n">parse_sfa_rspec</span><span class="p">(</span><span class="n">rspec_slice</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_already_cached</span> <span class="o">=</span> <span class="bp">True</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_resources_cache</span>
+</div>
+<div class="viewcode-block" id="SFAAPI.get_resources_hrn"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.sfaapi.SFAAPI.get_resources_hrn">[docs]</a>    <span class="k">def</span> <span class="nf">get_resources_hrn</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">resources</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Get list of resources hrn, without the resource info.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">resources</span><span class="p">:</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_already_cached</span><span class="p">:</span>
+                <span class="n">resources</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_resources_info</span><span class="p">()[</span><span class="s">&#39;resource&#39;</span><span class="p">]</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="n">resources</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_resources_cache</span><span class="p">[</span><span class="s">&#39;resource&#39;</span><span class="p">]</span>
+
+        <span class="n">component_tohrn</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
+        <span class="k">for</span> <span class="n">resource</span> <span class="ow">in</span> <span class="n">resources</span><span class="p">:</span>
+            <span class="n">hrn</span> <span class="o">=</span> <span class="n">resource</span><span class="p">[</span><span class="s">&#39;hrn&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;</span><span class="se">\\</span><span class="s">&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">)</span>
+            <span class="n">component_tohrn</span><span class="p">[</span><span class="n">resource</span><span class="p">[</span><span class="s">&#39;component_name&#39;</span><span class="p">]]</span> <span class="o">=</span> <span class="n">hrn</span>
+
+        <span class="k">return</span> <span class="n">component_tohrn</span>
+            </div>
+<div class="viewcode-block" id="SFAAPI.get_slice_resources"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.sfaapi.SFAAPI.get_slice_resources">[docs]</a>    <span class="k">def</span> <span class="nf">get_slice_resources</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">slicename</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Get resources and info from slice.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">lock_slice</span><span class="p">:</span>
+                <span class="n">rspec_slice</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_sfi_exec_method</span><span class="p">(</span><span class="s">&#39;describe&#39;</span><span class="p">,</span> <span class="n">slicename</span><span class="p">)</span>
+        <span class="k">except</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;Fail to describe resources for slice </span><span class="si">%s</span><span class="s">, slice may be empty&quot;</span> <span class="o">%</span> <span class="n">slicename</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">rspec_slice</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
+            <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rspec_proc</span><span class="o">.</span><span class="n">parse_sfa_rspec</span><span class="p">(</span><span class="n">rspec_slice</span><span class="p">)</span>
+            <span class="k">return</span> <span class="n">result</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">return</span> <span class="p">{</span><span class="s">&#39;resource&#39;</span><span class="p">:[],</span><span class="s">&#39;lease&#39;</span><span class="p">:[]}</span>
+
+</div>
+<div class="viewcode-block" id="SFAAPI.add_resource_to_slice"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.sfaapi.SFAAPI.add_resource_to_slice">[docs]</a>    <span class="k">def</span> <span class="nf">add_resource_to_slice</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">slicename</span><span class="p">,</span> <span class="n">resource_hrn</span><span class="p">,</span> <span class="n">leases</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Get the list of resources&#39; urn, build the rspec string and call the allocate </span>
+<span class="sd">        and provision method.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">resources_hrn_new</span> <span class="o">=</span> <span class="nb">list</span><span class="p">()</span>
+        <span class="n">resource_parts</span> <span class="o">=</span> <span class="n">resource_hrn</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">)</span>
+        <span class="n">resource_hrn</span> <span class="o">=</span> <span class="s">&#39;.&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">resource_parts</span><span class="p">[:</span><span class="mi">2</span><span class="p">])</span> <span class="o">+</span> <span class="s">&#39;.&#39;</span> <span class="o">+</span> <span class="s">&#39;</span><span class="se">\\</span><span class="s">.&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">resource_parts</span><span class="p">[</span><span class="mi">2</span><span class="p">:])</span>
+        <span class="n">resources_hrn_new</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">resource_hrn</span><span class="p">)</span>
+
+        <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">lock_slice</span><span class="p">:</span>
+            <span class="n">rspec_slice</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_sfi_exec_method</span><span class="p">(</span><span class="s">&#39;describe&#39;</span><span class="p">,</span> <span class="n">slicename</span><span class="p">)</span>
+            <span class="k">if</span> <span class="n">rspec_slice</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
+                <span class="n">slice_resources</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rspec_proc</span><span class="o">.</span><span class="n">parse_sfa_rspec</span><span class="p">(</span><span class="n">rspec_slice</span><span class="p">)[</span><span class="s">&#39;resource&#39;</span><span class="p">]</span>
+            <span class="k">else</span><span class="p">:</span> <span class="n">slice_resources</span> <span class="o">=</span> <span class="p">[]</span>
+            <span class="k">if</span> <span class="n">slice_resources</span><span class="p">:</span>
+                <span class="n">slice_resources_hrn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_resources_hrn</span><span class="p">(</span><span class="n">slice_resources</span><span class="p">)</span>
+                <span class="k">for</span> <span class="n">s_hrn_key</span><span class="p">,</span> <span class="n">s_hrn_value</span> <span class="ow">in</span> <span class="n">slice_resources_hrn</span><span class="o">.</span><span class="n">iteritems</span><span class="p">():</span>
+                    <span class="n">s_parts</span> <span class="o">=</span> <span class="n">s_hrn_value</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">)</span>
+                    <span class="n">s_hrn</span> <span class="o">=</span> <span class="s">&#39;.&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">s_parts</span><span class="p">[:</span><span class="mi">2</span><span class="p">])</span> <span class="o">+</span> <span class="s">&#39;.&#39;</span> <span class="o">+</span> <span class="s">&#39;</span><span class="se">\\</span><span class="s">.&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">s_parts</span><span class="p">[</span><span class="mi">2</span><span class="p">:])</span>
+                    <span class="n">resources_hrn_new</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">s_hrn</span><span class="p">)</span>
+
+
+            <span class="n">resources_urn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_resources_urn</span><span class="p">(</span><span class="n">resources_hrn_new</span><span class="p">)</span>
+            <span class="n">rspec</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rspec_proc</span><span class="o">.</span><span class="n">build_sfa_rspec</span><span class="p">(</span><span class="n">slicename</span><span class="p">,</span> <span class="n">resources_urn</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="n">leases</span><span class="p">)</span>
+            <span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="s">&quot;/tmp/rspec_input.rspec&quot;</span><span class="p">,</span> <span class="s">&quot;w&quot;</span><span class="p">)</span>
+            <span class="n">f</span><span class="o">.</span><span class="n">truncate</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+            <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">rspec</span><span class="p">)</span>
+            <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+            
+            <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">getsize</span><span class="p">(</span><span class="s">&quot;/tmp/rspec_input.rspec&quot;</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s">&quot;Fail to create rspec file to allocate resource in slice </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">slicename</span><span class="p">)</span>
+
+            <span class="c"># ALLOCATE</span>
+            <span class="k">try</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;Allocating resources in slice </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">slicename</span><span class="p">)</span>
+                <span class="n">out</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_sfi_exec_method</span><span class="p">(</span><span class="s">&#39;allocate&#39;</span><span class="p">,</span> <span class="n">slicename</span><span class="p">,</span> <span class="s">&quot;/tmp/rspec_input.rspec&quot;</span><span class="p">)</span>
+            <span class="k">except</span><span class="p">:</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s">&quot;Fail to allocate resource for slice </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">slicename</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="n">out</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
+                <span class="c"># PROVISION</span>
+                <span class="k">try</span><span class="p">:</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;Provisioning resources in slice </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">slicename</span><span class="p">)</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">_sfi_exec_method</span><span class="p">(</span><span class="s">&#39;provision&#39;</span><span class="p">,</span> <span class="n">slicename</span><span class="p">)</span> 
+                <span class="k">except</span><span class="p">:</span>
+                    <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s">&quot;Fail to provision resource for slice </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">slicename</span><span class="p">)</span>
+                <span class="k">return</span> <span class="bp">True</span>
+</div>
+<div class="viewcode-block" id="SFAAPI.add_resource_to_slice_batch"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.sfaapi.SFAAPI.add_resource_to_slice_batch">[docs]</a>    <span class="k">def</span> <span class="nf">add_resource_to_slice_batch</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">slicename</span><span class="p">,</span> <span class="n">resource_hrn</span><span class="p">,</span> <span class="n">properties</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">leases</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Method to add all resources together to the slice. Previous deletion of slivers.</span>
+<span class="sd">        Specially used for wilabt that doesn&#39;t allow to add more resources to the slice</span>
+<span class="sd">        after some resources are added. Every sliver have to be deleted and the batch </span>
+<span class="sd">        has to be added at once.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_count</span> <span class="o">+=</span> <span class="mi">1</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_slice_resources_batch</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">resource_hrn</span><span class="p">)</span>
+        <span class="n">resources_hrn_new</span> <span class="o">=</span> <span class="nb">list</span><span class="p">()</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_count</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_total</span><span class="p">):</span>
+            <span class="n">check_all_inslice</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_all_inslice</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_slice_resources_batch</span><span class="p">,</span> <span class="n">slicename</span><span class="p">)</span>
+            <span class="k">if</span> <span class="n">check_all_inslice</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
+                <span class="k">return</span> <span class="bp">True</span>
+            <span class="k">for</span> <span class="n">resource_hrn</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_slice_resources_batch</span><span class="p">:</span>
+                <span class="n">resource_parts</span> <span class="o">=</span> <span class="n">resource_hrn</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">)</span>
+                <span class="n">resource_hrn</span> <span class="o">=</span> <span class="s">&#39;.&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">resource_parts</span><span class="p">[:</span><span class="mi">2</span><span class="p">])</span> <span class="o">+</span> <span class="s">&#39;.&#39;</span> <span class="o">+</span> <span class="s">&#39;</span><span class="se">\\</span><span class="s">.&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">resource_parts</span><span class="p">[</span><span class="mi">2</span><span class="p">:])</span>
+                <span class="n">resources_hrn_new</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">resource_hrn</span><span class="p">)</span>
+            <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">lock_slice</span><span class="p">:</span>
+                <span class="k">if</span> <span class="n">check_all_inslice</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">_sfi_exec_method</span><span class="p">(</span><span class="s">&#39;delete&#39;</span><span class="p">,</span> <span class="n">slicename</span><span class="p">)</span>
+                    <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">480</span><span class="p">)</span>
+                
+                <span class="c"># Re implementing urn from hrn because the library sfa-common doesn&#39;t work for wilabt</span>
+                <span class="n">resources_urn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_urn</span><span class="p">(</span><span class="n">resources_hrn_new</span><span class="p">)</span>
+                <span class="n">rspec</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rspec_proc</span><span class="o">.</span><span class="n">build_sfa_rspec</span><span class="p">(</span><span class="n">slicename</span><span class="p">,</span> <span class="n">resources_urn</span><span class="p">,</span> <span class="n">properties</span><span class="p">,</span> <span class="n">leases</span><span class="p">)</span>
+                <span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="s">&quot;/tmp/rspec_input.rspec&quot;</span><span class="p">,</span> <span class="s">&quot;w&quot;</span><span class="p">)</span>
+                <span class="n">f</span><span class="o">.</span><span class="n">truncate</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+                <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">rspec</span><span class="p">)</span>
+                <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+                <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">getsize</span><span class="p">(</span><span class="s">&quot;/tmp/rspec_input.rspec&quot;</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+                    <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s">&quot;Fail to create rspec file to allocate resources in slice </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">slicename</span><span class="p">)</span>
+
+                <span class="c"># ALLOCATE    </span>
+                <span class="k">try</span><span class="p">:</span>
+                    <span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;Allocating resources in slice </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">slicename</span><span class="p">)</span>
+                    <span class="n">out</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_sfi_exec_method</span><span class="p">(</span><span class="s">&#39;allocate&#39;</span><span class="p">,</span> <span class="n">slicename</span><span class="p">,</span> <span class="s">&quot;/tmp/rspec_input.rspec&quot;</span><span class="p">)</span>
+                <span class="k">except</span><span class="p">:</span>
+                    <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s">&quot;Fail to allocate resource for slice </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">slicename</span><span class="p">)</span>
+
+                <span class="k">if</span> <span class="n">out</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
+                    <span class="c"># PROVISION</span>
+                    <span class="k">try</span><span class="p">:</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;Provisioning resources in slice </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">slicename</span><span class="p">)</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">_sfi_exec_method</span><span class="p">(</span><span class="s">&#39;provision&#39;</span><span class="p">,</span> <span class="n">slicename</span><span class="p">)</span>
+                        <span class="bp">self</span><span class="o">.</span><span class="n">_sfi_exec_method</span><span class="p">(</span><span class="s">&#39;action&#39;</span><span class="p">,</span> <span class="n">slicename</span><span class="o">=</span><span class="n">slicename</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s">&#39;geni_start&#39;</span><span class="p">)</span>
+                    <span class="k">except</span><span class="p">:</span>
+                        <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s">&quot;Fail to provision resource for slice </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">slicename</span><span class="p">)</span>
+                    <span class="k">return</span> <span class="bp">True</span>
+                <span class="k">else</span><span class="p">:</span>
+                    <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s">&quot;Fail to allocate resources for slice </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">slicename</span><span class="p">)</span>
+    
+        <span class="k">else</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot; Waiting for more nodes to add the batch to the slice &quot;</span><span class="p">)</span>
+</div>
+    <span class="k">def</span> <span class="nf">_check_all_inslice</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">resources_hrn</span><span class="p">,</span> <span class="n">slicename</span><span class="p">):</span>
+        <span class="n">slice_res</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_slice_resources</span><span class="p">(</span><span class="n">slicename</span><span class="p">)[</span><span class="s">&#39;resource&#39;</span><span class="p">]</span>
+        <span class="k">if</span> <span class="n">slice_res</span><span class="p">:</span>
+            <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">slice_res</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s">&#39;services&#39;</span><span class="p">])</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
+                <span class="n">slice_res_hrn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_resources_hrn</span><span class="p">(</span><span class="n">slice_res</span><span class="p">)</span><span class="o">.</span><span class="n">values</span><span class="p">()</span>
+                <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_compare_lists</span><span class="p">(</span><span class="n">slice_res_hrn</span><span class="p">,</span> <span class="n">resources_hrn</span><span class="p">):</span>
+                    <span class="k">return</span> <span class="bp">True</span>
+                <span class="k">else</span><span class="p">:</span> <span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="n">slice_res_hrn</span><span class="p">)</span>
+        <span class="k">return</span> <span class="mi">0</span>
+
+    <span class="k">def</span> <span class="nf">_compare_lists</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">list1</span><span class="p">,</span> <span class="n">list2</span><span class="p">):</span>
+        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">list1</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">len</span><span class="p">(</span><span class="n">list2</span><span class="p">):</span>
+            <span class="k">return</span> <span class="bp">False</span>
+        <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">list1</span><span class="p">:</span>
+            <span class="k">if</span> <span class="n">item</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">list2</span><span class="p">:</span>
+                <span class="k">return</span> <span class="bp">False</span>
+        <span class="k">return</span> <span class="bp">True</span>
+
+    <span class="k">def</span> <span class="nf">_get_urn</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">resources_hrn</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Get urn from hrn.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">resources_urn</span> <span class="o">=</span> <span class="nb">list</span><span class="p">()</span>
+        <span class="k">for</span> <span class="n">hrn</span> <span class="ow">in</span> <span class="n">resources_hrn</span><span class="p">:</span>
+            <span class="n">hrn</span> <span class="o">=</span> <span class="n">hrn</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\\</span><span class="s">&quot;</span><span class="p">,</span> <span class="s">&quot;&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">)</span>
+            <span class="n">node</span> <span class="o">=</span> <span class="n">hrn</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
+            <span class="n">auth</span> <span class="o">=</span> <span class="s">&#39;.&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">hrn</span><span class="p">)</span>
+            <span class="n">urn</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;urn:publicid:IDN+&#39;</span><span class="p">,</span> <span class="n">auth</span><span class="p">,</span> <span class="s">&#39;+node+&#39;</span><span class="p">,</span> <span class="n">node</span><span class="p">]</span>
+            <span class="n">urn</span> <span class="o">=</span> <span class="s">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">urn</span><span class="p">)</span>
+            <span class="n">resources_urn</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">urn</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">resources_urn</span>
+
+<div class="viewcode-block" id="SFAAPI.remove_resource_from_slice"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.sfaapi.SFAAPI.remove_resource_from_slice">[docs]</a>    <span class="k">def</span> <span class="nf">remove_resource_from_slice</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">slicename</span><span class="p">,</span> <span class="n">resource_hrn</span><span class="p">,</span> <span class="n">leases</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Remove slivers from slice. Currently sfi doesn&#39;t support removing particular</span>
+<span class="sd">        slivers.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">resource_urn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_resources_urn</span><span class="p">([</span><span class="n">resource_hrn</span><span class="p">])</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
+        <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">lock_slice</span><span class="p">:</span>
+            <span class="k">try</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_sfi_exec_method</span><span class="p">(</span><span class="s">&#39;delete&#39;</span><span class="p">,</span> <span class="n">slicename</span><span class="p">,</span> <span class="n">urn</span><span class="o">=</span><span class="n">resource_urn</span><span class="p">)</span>
+            <span class="k">except</span><span class="p">:</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s">&quot;Fail to delete resource for slice </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">slicename</span><span class="p">)</span>
+            <span class="k">return</span> <span class="bp">True</span>
+</div>
+<div class="viewcode-block" id="SFAAPI.remove_all_from_slice"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.sfaapi.SFAAPI.remove_all_from_slice">[docs]</a>    <span class="k">def</span> <span class="nf">remove_all_from_slice</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">slicename</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        De-allocate and de-provision all slivers of the named slice.</span>
+<span class="sd">        Currently sfi doesn&#39;t support removing particular</span>
+<span class="sd">        slivers, so this method works only for removing every sliver. Setting the</span>
+<span class="sd">        resource_hrn parameter is not necessary.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">lock_slice</span><span class="p">:</span>
+            <span class="k">try</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_sfi_exec_method</span><span class="p">(</span><span class="s">&#39;delete&#39;</span><span class="p">,</span> <span class="n">slicename</span><span class="p">)</span>
+            <span class="k">except</span><span class="p">:</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s">&quot;Fail to delete slivers for slice </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">slicename</span><span class="p">)</span>
+            <span class="k">return</span> <span class="bp">True</span>
+</div>
+    <span class="k">def</span> <span class="nf">_get_resources_urn</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">resources_hrn</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Builds list of resources&#39; urn based on hrn.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">resources_urn</span> <span class="o">=</span> <span class="nb">list</span><span class="p">()</span>
+
+        <span class="k">for</span> <span class="n">resource</span> <span class="ow">in</span> <span class="n">resources_hrn</span><span class="p">:</span>
+            <span class="n">resources_urn</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">hrn_to_urn</span><span class="p">(</span><span class="n">resource</span><span class="p">,</span> <span class="s">&#39;node&#39;</span><span class="p">))</span>
+            
+        <span class="k">return</span> <span class="n">resources_urn</span>
+
+<div class="viewcode-block" id="SFAAPI.blacklist_resource"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.sfaapi.SFAAPI.blacklist_resource">[docs]</a>    <span class="k">def</span> <span class="nf">blacklist_resource</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">resource_hrn</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Adding resource_hrn to blacklist, and taking </span>
+<span class="sd">        the resource from the reserved list.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">lock_blist</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_blacklist</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">resource_hrn</span><span class="p">)</span>
+        <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">lock_resv</span><span class="p">:</span>
+            <span class="k">if</span> <span class="n">resource_hrn</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_reserved</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_reserved</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">resource_hrn</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="SFAAPI.blacklisted"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.sfaapi.SFAAPI.blacklisted">[docs]</a>    <span class="k">def</span> <span class="nf">blacklisted</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">resource_hrn</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Check if the resource is in the blacklist. </span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">lock_blist</span><span class="p">:</span>
+            <span class="k">if</span> <span class="n">resource_hrn</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_blacklist</span><span class="p">:</span>
+                <span class="k">return</span> <span class="bp">True</span>
+        <span class="k">return</span> <span class="bp">False</span>
+</div>
+<div class="viewcode-block" id="SFAAPI.reserve_resource"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.sfaapi.SFAAPI.reserve_resource">[docs]</a>    <span class="k">def</span> <span class="nf">reserve_resource</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">resource_hrn</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Add resource to the reserved list.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_reserved</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">resource_hrn</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="SFAAPI.reserved"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.sfaapi.SFAAPI.reserved">[docs]</a>    <span class="k">def</span> <span class="nf">reserved</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">resource_hrn</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Check that the resource in not reserved.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">lock_resv</span><span class="p">:</span>
+            <span class="k">if</span> <span class="n">resource_hrn</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_reserved</span><span class="p">:</span>
+                <span class="k">return</span> <span class="bp">True</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">reserve_resource</span><span class="p">(</span><span class="n">resource_hrn</span><span class="p">)</span>
+                <span class="k">return</span> <span class="bp">False</span>
+</div>
+<div class="viewcode-block" id="SFAAPI.release"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.sfaapi.SFAAPI.release">[docs]</a>    <span class="k">def</span> <span class="nf">release</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Remove hosts from the reserved and blacklist lists, and in case</span>
+<span class="sd">        the persist attribute is set, it saves the blacklisted hosts</span>
+<span class="sd">        in the blacklist file.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">apis</span> <span class="o">-=</span> <span class="mi">1</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">apis</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+            <span class="n">blacklist</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_blacklist</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_blacklist</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_reserved</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+<span class="c">#            if self._ecobj.get_global(&#39;PlanetlabSfaNode&#39;, &#39;persist_blacklist&#39;):</span>
+<span class="c">#                if blacklist:</span>
+<span class="c">#                    to_blacklist = list()</span>
+<span class="c">#                    hostnames = self.get_nodes(list(blacklist), [&#39;hostname&#39;])</span>
+<span class="c">#                    for hostname in hostnames:</span>
+<span class="c">#                        to_blacklist.append(hostname[&#39;hostname&#39;])</span>
+<span class="c">#</span>
+<span class="c">#                    nepi_home = os.path.join(os.path.expanduser(&quot;~&quot;), &quot;.nepi&quot;)</span>
+<span class="c">#                    plblacklist_file = os.path.join(nepi_home, &quot;plblacklist.txt&quot;)</span>
+<span class="c">#</span>
+<span class="c">#                    with open(plblacklist_file, &#39;w&#39;) as f:</span>
+<span class="c">#                        for host in to_blacklist:</span>
+<span class="c">#                            f.write(&quot;%s\n&quot; % host)</span>
+<span class="c">#</span>
+
+</div></div>
+<div class="viewcode-block" id="SFAAPIFactory"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.sfaapi.SFAAPIFactory">[docs]</a><span class="k">class</span> <span class="nc">SFAAPIFactory</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    API Factory to manage a map of SFAAPI instances as key-value pairs, it</span>
+<span class="sd">    instanciate a single instance per key. The key represents the same SFA, </span>
+<span class="sd">    credentials.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+
+    <span class="n">_lock</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Lock</span><span class="p">()</span>
+    <span class="n">_apis</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
+
+   
+    <span class="nd">@classmethod</span>
+<div class="viewcode-block" id="SFAAPIFactory.get_api"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.sfaapi.SFAAPIFactory.get_api">[docs]</a>    <span class="k">def</span> <span class="nf">get_api</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">sfi_user</span><span class="p">,</span> <span class="n">sfi_auth</span><span class="p">,</span> <span class="n">sfi_registry</span><span class="p">,</span> <span class="n">sfi_sm</span><span class="p">,</span> <span class="n">private_key</span><span class="p">,</span> <span class="n">ec</span><span class="p">,</span>
+            <span class="n">batch</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span> <span class="n">rtype</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">timeout</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+
+        <span class="k">if</span> <span class="n">sfi_user</span> <span class="ow">and</span> <span class="n">sfi_sm</span><span class="p">:</span>
+            <span class="n">key</span> <span class="o">=</span> <span class="n">cls</span><span class="o">.</span><span class="n">make_key</span><span class="p">(</span><span class="n">sfi_user</span><span class="p">,</span> <span class="n">sfi_sm</span><span class="p">)</span>
+            <span class="k">with</span> <span class="n">cls</span><span class="o">.</span><span class="n">_lock</span><span class="p">:</span>
+                <span class="n">api</span> <span class="o">=</span> <span class="n">cls</span><span class="o">.</span><span class="n">_apis</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
+
+                <span class="k">if</span> <span class="ow">not</span> <span class="n">api</span><span class="p">:</span>
+                    <span class="n">api</span> <span class="o">=</span> <span class="n">SFAAPI</span><span class="p">(</span><span class="n">sfi_user</span><span class="p">,</span> <span class="n">sfi_auth</span><span class="p">,</span> <span class="n">sfi_registry</span><span class="p">,</span> <span class="n">sfi_sm</span><span class="p">,</span> <span class="n">private_key</span><span class="p">,</span>
+                        <span class="n">ec</span><span class="p">,</span> <span class="n">batch</span><span class="p">,</span> <span class="n">rtype</span><span class="p">,</span> <span class="n">timeout</span><span class="p">)</span>
+                    <span class="n">cls</span><span class="o">.</span><span class="n">_apis</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">api</span>
+                <span class="k">else</span><span class="p">:</span>
+                    <span class="n">api</span><span class="o">.</span><span class="n">apis</span> <span class="o">+=</span> <span class="mi">1</span>
+
+                <span class="k">return</span> <span class="n">api</span>
+
+        <span class="k">return</span> <span class="bp">None</span>
+</div>
+    <span class="nd">@classmethod</span>
+<div class="viewcode-block" id="SFAAPIFactory.make_key"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.sfaapi.SFAAPIFactory.make_key">[docs]</a>    <span class="k">def</span> <span class="nf">make_key</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
+        <span class="n">skey</span> <span class="o">=</span> <span class="s">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">args</span><span class="p">))</span>
+        <span class="k">return</span> <span class="n">hashlib</span><span class="o">.</span><span class="n">md5</span><span class="p">(</span><span class="n">skey</span><span class="p">)</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/util/sfarspec_proc.html b/doc/sphinx/_build/html/_modules/nepi/util/sfarspec_proc.html
new file mode 100644 (file)
index 0000000..9561359
--- /dev/null
@@ -0,0 +1,312 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.util.sfarspec_proc &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../index.html" />
+    <link rel="up" title="Module code" href="../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.util.sfarspec_proc</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.util.logger</span> <span class="kn">import</span> <span class="n">Logger</span>
+<span class="k">try</span><span class="p">:</span>
+    <span class="kn">from</span> <span class="nn">sfa.rspecs.rspec</span> <span class="kn">import</span> <span class="n">RSpec</span>
+    <span class="kn">from</span> <span class="nn">sfa.util.xrn</span> <span class="kn">import</span> <span class="n">Xrn</span><span class="p">,</span> <span class="n">get_leaf</span><span class="p">,</span> <span class="n">get_authority</span><span class="p">,</span> <span class="n">hrn_to_urn</span><span class="p">,</span> <span class="n">urn_to_hrn</span>
+<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
+    <span class="n">log</span> <span class="o">=</span> <span class="n">Logger</span><span class="p">(</span><span class="s">&quot;SFA RSpec Processing&quot;</span><span class="p">)</span>
+    <span class="n">log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;Package sfa-common not installed.</span><span class="se">\</span>
+<span class="s">         Could not import sfa.rspecs.rspec and sfa.util.xrn&quot;</span><span class="p">)</span>
+
+<span class="kn">from</span> <span class="nn">types</span> <span class="kn">import</span> <span class="n">StringTypes</span><span class="p">,</span> <span class="n">ListType</span>
+
+
+<div class="viewcode-block" id="SfaRSpecProcessing"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.sfarspec_proc.SfaRSpecProcessing">[docs]</a><span class="k">class</span> <span class="nc">SfaRSpecProcessing</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Class to process SFA RSpecs, parse the RSpec replies such as Advertisement RSpecs,</span>
+<span class="sd">    and build in the case of Request RSpecs.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_log</span> <span class="o">=</span> <span class="n">Logger</span><span class="p">(</span><span class="s">&quot;SFA RSpec Processing&quot;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">config</span> <span class="o">=</span> <span class="n">config</span> 
+
+<div class="viewcode-block" id="SfaRSpecProcessing.make_dict_rec"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.sfarspec_proc.SfaRSpecProcessing.make_dict_rec">[docs]</a>    <span class="k">def</span> <span class="nf">make_dict_rec</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">obj</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="p">(</span><span class="n">StringTypes</span><span class="p">,</span> <span class="nb">bool</span><span class="p">)):</span>
+            <span class="k">return</span> <span class="n">obj</span>
+        <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
+            <span class="n">objcopy</span> <span class="o">=</span> <span class="p">[]</span>
+            <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">obj</span><span class="p">:</span>
+                <span class="n">objcopy</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">make_dict_rec</span><span class="p">(</span><span class="n">x</span><span class="p">))</span>
+            <span class="k">return</span> <span class="n">objcopy</span>
+        <span class="c"># We thus suppose we have a child of dict</span>
+        <span class="n">objcopy</span> <span class="o">=</span> <span class="p">{}</span>
+        <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
+            <span class="n">objcopy</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">make_dict_rec</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">objcopy</span>
+</div>
+<div class="viewcode-block" id="SfaRSpecProcessing.parse_sfa_rspec"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.sfarspec_proc.SfaRSpecProcessing.parse_sfa_rspec">[docs]</a>    <span class="k">def</span> <span class="nf">parse_sfa_rspec</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">rspec_string</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Parse the RSpec XML as a string.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="c"># rspec_type and rspec_version should be set in the config of the platform,</span>
+        <span class="c"># we use GENIv3 as default one if not</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="p">:</span>
+            <span class="k">if</span> <span class="s">&#39;rspec_type&#39;</span> <span class="ow">and</span> <span class="s">&#39;rspec_version&#39;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="p">:</span>
+                <span class="n">rspec_version</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s">&#39;rspec_type&#39;</span><span class="p">]</span> <span class="o">+</span> <span class="s">&#39; &#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s">&#39;rspec_version&#39;</span><span class="p">]</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">rspec_version</span> <span class="o">=</span> <span class="s">&#39;GENI 3&#39;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">rspec_version</span><span class="p">)</span>
+        <span class="n">rspec</span> <span class="o">=</span> <span class="n">RSpec</span><span class="p">(</span><span class="n">rspec_string</span><span class="p">,</span> <span class="n">version</span><span class="o">=</span><span class="n">rspec_version</span><span class="p">)</span>
+        
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">nodes</span> <span class="o">=</span> <span class="n">rspec</span><span class="o">.</span><span class="n">version</span><span class="o">.</span><span class="n">get_nodes</span><span class="p">()</span>
+        <span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="s">&quot;Could not retrieve nodes in RSpec: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">e</span><span class="p">)</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">leases</span> <span class="o">=</span> <span class="n">rspec</span><span class="o">.</span><span class="n">version</span><span class="o">.</span><span class="n">get_leases</span><span class="p">()</span>
+        <span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="s">&quot;Could not retrieve leases in RSpec: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">e</span><span class="p">)</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">links</span> <span class="o">=</span> <span class="n">rspec</span><span class="o">.</span><span class="n">version</span><span class="o">.</span><span class="n">get_links</span><span class="p">()</span>
+        <span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="s">&quot;Could not retrieve links in RSpec: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">e</span><span class="p">)</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">channels</span> <span class="o">=</span> <span class="n">rspec</span><span class="o">.</span><span class="n">version</span><span class="o">.</span><span class="n">get_channels</span><span class="p">()</span>
+        <span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="s">&quot;Could not retrieve channels in RSpec: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">e</span><span class="p">)</span>
+  
+        <span class="n">resources</span> <span class="o">=</span> <span class="p">[]</span> 
+        <span class="c"># Extend object and Format object field&#39;s name</span>
+        <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">nodes</span><span class="p">:</span>
+            <span class="n">node</span><span class="p">[</span><span class="s">&#39;type&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;node&#39;</span>
+            <span class="n">node</span><span class="p">[</span><span class="s">&#39;network_hrn&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">Xrn</span><span class="p">(</span><span class="n">node</span><span class="p">[</span><span class="s">&#39;component_id&#39;</span><span class="p">])</span><span class="o">.</span><span class="n">authority</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="c"># network ? XXX</span>
+            <span class="n">node</span><span class="p">[</span><span class="s">&#39;hrn&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">urn_to_hrn</span><span class="p">(</span><span class="n">node</span><span class="p">[</span><span class="s">&#39;component_id&#39;</span><span class="p">])[</span><span class="mi">0</span><span class="p">]</span>
+            <span class="n">node</span><span class="p">[</span><span class="s">&#39;urn&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">node</span><span class="p">[</span><span class="s">&#39;component_id&#39;</span><span class="p">]</span>
+            <span class="n">node</span><span class="p">[</span><span class="s">&#39;hostname&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">node</span><span class="p">[</span><span class="s">&#39;component_name&#39;</span><span class="p">]</span>
+            <span class="n">node</span><span class="p">[</span><span class="s">&#39;initscripts&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">&#39;pl_initscripts&#39;</span><span class="p">)</span>
+            <span class="k">if</span> <span class="s">&#39;exclusive&#39;</span> <span class="ow">in</span> <span class="n">node</span> <span class="ow">and</span> <span class="n">node</span><span class="p">[</span><span class="s">&#39;exclusive&#39;</span><span class="p">]:</span>
+                <span class="n">node</span><span class="p">[</span><span class="s">&#39;exclusive&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">node</span><span class="p">[</span><span class="s">&#39;exclusive&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s">&#39;true&#39;</span>
+            <span class="c"># XXX This should use a MAP as before</span>
+            <span class="k">if</span> <span class="s">&#39;position&#39;</span> <span class="ow">in</span> <span class="n">node</span><span class="p">:</span> <span class="c"># iotlab</span>
+                <span class="n">node</span><span class="p">[</span><span class="s">&#39;x&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">node</span><span class="p">[</span><span class="s">&#39;position&#39;</span><span class="p">][</span><span class="s">&#39;posx&#39;</span><span class="p">]</span>
+                <span class="n">node</span><span class="p">[</span><span class="s">&#39;y&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">node</span><span class="p">[</span><span class="s">&#39;position&#39;</span><span class="p">][</span><span class="s">&#39;posy&#39;</span><span class="p">]</span>
+                <span class="n">node</span><span class="p">[</span><span class="s">&#39;z&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">node</span><span class="p">[</span><span class="s">&#39;position&#39;</span><span class="p">][</span><span class="s">&#39;posz&#39;</span><span class="p">]</span>
+                <span class="k">del</span> <span class="n">node</span><span class="p">[</span><span class="s">&#39;position&#39;</span><span class="p">]</span>
+            <span class="k">if</span> <span class="s">&#39;location&#39;</span> <span class="ow">in</span> <span class="n">node</span><span class="p">:</span>
+                <span class="k">if</span> <span class="n">node</span><span class="p">[</span><span class="s">&#39;location&#39;</span><span class="p">]:</span>
+                    <span class="n">node</span><span class="p">[</span><span class="s">&#39;latitude&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">node</span><span class="p">[</span><span class="s">&#39;location&#39;</span><span class="p">][</span><span class="s">&#39;latitude&#39;</span><span class="p">]</span>
+                    <span class="n">node</span><span class="p">[</span><span class="s">&#39;longitude&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">node</span><span class="p">[</span><span class="s">&#39;location&#39;</span><span class="p">][</span><span class="s">&#39;longitude&#39;</span><span class="p">]</span>
+                <span class="k">del</span> <span class="n">node</span><span class="p">[</span><span class="s">&#39;location&#39;</span><span class="p">]</span>
+            <span class="c"># Flatten tags</span>
+            <span class="k">if</span> <span class="s">&#39;tags&#39;</span> <span class="ow">in</span> <span class="n">node</span><span class="p">:</span>
+                <span class="k">if</span> <span class="n">node</span><span class="p">[</span><span class="s">&#39;tags&#39;</span><span class="p">]:</span>
+                    <span class="k">for</span> <span class="n">tag</span> <span class="ow">in</span> <span class="n">node</span><span class="p">[</span><span class="s">&#39;tags&#39;</span><span class="p">]:</span>
+                        <span class="n">node</span><span class="p">[</span><span class="n">tag</span><span class="p">[</span><span class="s">&#39;tagname&#39;</span><span class="p">]]</span> <span class="o">=</span> <span class="n">tag</span><span class="p">[</span><span class="s">&#39;value&#39;</span><span class="p">]</span>
+                <span class="k">del</span> <span class="n">node</span><span class="p">[</span><span class="s">&#39;tags&#39;</span><span class="p">]</span>
+            
+            <span class="c"># We suppose we have children of dict that cannot be serialized</span>
+            <span class="c"># with xmlrpc, let&#39;s make dict</span>
+            <span class="n">resources</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">make_dict_rec</span><span class="p">(</span><span class="n">node</span><span class="p">))</span>
+        <span class="c"># NOTE a channel is a resource and should not be treated independently</span>
+        <span class="c">#     resource</span>
+        <span class="c">#        |</span>
+        <span class="c">#   +----+------+-------+</span>
+        <span class="c">#   |    |      |       |</span>
+        <span class="c"># node  link  channel  etc.</span>
+        <span class="c">#resources.extend(nodes)</span>
+        <span class="c">#resources.extend(channels)</span>
+        <span class="k">return</span> <span class="p">{</span><span class="s">&#39;resource&#39;</span><span class="p">:</span> <span class="n">resources</span><span class="p">,</span> <span class="s">&#39;lease&#39;</span><span class="p">:</span> <span class="n">leases</span> <span class="p">}</span> 
+<span class="c">#               &#39;channel&#39;: channels \</span>
+<span class="c">#               }</span>
+
+ </div>
+<div class="viewcode-block" id="SfaRSpecProcessing.build_sfa_rspec"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.sfarspec_proc.SfaRSpecProcessing.build_sfa_rspec">[docs]</a>    <span class="k">def</span> <span class="nf">build_sfa_rspec</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">slice_id</span><span class="p">,</span> <span class="n">resources</span><span class="p">,</span> <span class="n">properties</span><span class="p">,</span> <span class="n">leases</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Build the XML RSpec from list of resources&#39; urns.</span>
+<span class="sd">        eg. resources = [&quot;urn:publicid:IDN+ple:modenaple+node+planetlab-1.ing.unimo.it&quot;]</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="c">#if isinstance(resources, str):</span>
+        <span class="c">#    resources = eval(resources)</span>
+        <span class="c"># rspec_type and rspec_version should be set in the config of the platform,</span>
+        <span class="c"># we use GENIv3 as default one if not</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="p">:</span>
+            <span class="k">if</span> <span class="s">&#39;rspec_type&#39;</span> <span class="ow">and</span> <span class="s">&#39;rspec_version&#39;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="p">:</span>
+                <span class="n">rspec_version</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s">&#39;rspec_type&#39;</span><span class="p">]</span> <span class="o">+</span> <span class="s">&#39; &#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s">&#39;rspec_version&#39;</span><span class="p">]</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">rspec_version</span> <span class="o">=</span> <span class="s">&#39;GENI 3&#39;</span>
+
+        <span class="c"># extend rspec version with &quot;content_type&quot;</span>
+        <span class="n">rspec_version</span> <span class="o">+=</span> <span class="s">&#39; request&#39;</span>
+        
+        <span class="n">rspec</span> <span class="o">=</span> <span class="n">RSpec</span><span class="p">(</span><span class="n">version</span><span class="o">=</span><span class="n">rspec_version</span><span class="p">)</span>
+
+        <span class="n">nodes</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="n">channels</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="n">links</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;Building RSpec for resources </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">resources</span><span class="p">)</span>
+        <span class="n">cardinal</span> <span class="o">=</span> <span class="mi">0</span>
+        <span class="n">wilab</span> <span class="o">=</span> <span class="bp">False</span>
+        <span class="k">for</span> <span class="n">urn</span> <span class="ow">in</span> <span class="n">resources</span><span class="p">:</span>
+            <span class="c"># XXX TO BE CORRECTED, this handles None values</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="n">urn</span><span class="p">:</span>
+                <span class="k">continue</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">urn</span><span class="p">)</span>
+            <span class="n">resource</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
+            <span class="c"># TODO: take into account the case where we send a dict of URNs without keys</span>
+            <span class="c">#resource[&#39;component_id&#39;] = resource.pop(&#39;urn&#39;)</span>
+            <span class="n">resource</span><span class="p">[</span><span class="s">&#39;component_id&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">urn</span>
+            <span class="n">resource_hrn</span><span class="p">,</span> <span class="n">resource_type</span> <span class="o">=</span> <span class="n">urn_to_hrn</span><span class="p">(</span><span class="n">resource</span><span class="p">[</span><span class="s">&#39;component_id&#39;</span><span class="p">])</span>
+            <span class="c"># build component_manager_id</span>
+            <span class="n">top_auth</span> <span class="o">=</span> <span class="n">resource_hrn</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+            <span class="n">cm</span> <span class="o">=</span> <span class="n">urn</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;+&quot;</span><span class="p">)</span>
+            <span class="n">resource</span><span class="p">[</span><span class="s">&#39;component_manager_id&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">+</span><span class="si">%s</span><span class="s">+authority+cm&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">cm</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="n">top_auth</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="n">resource_type</span> <span class="o">==</span> <span class="s">&#39;node&#39;</span><span class="p">:</span>
+                <span class="c"># XXX dirty hack WiLab !!!</span>
+<span class="c">#                Commented Lucia, doesn&#39;t work for wilabt  </span>
+<span class="c">#                if self.config:</span>
+<span class="c">#                    if &#39;wilab2&#39; in self.config[&#39;sm&#39;]:</span>
+<span class="c">#                        resource[&#39;client_id&#39;] = &quot;PC&quot;</span>
+<span class="c">#                        resource[&#39;sliver_type&#39;] = &quot;raw-pc&quot;</span>
+                <span class="k">if</span> <span class="s">&#39;wilab2&#39;</span> <span class="ow">in</span> <span class="n">urn</span><span class="p">:</span>
+                    <span class="n">wilab</span> <span class="o">=</span> <span class="bp">True</span>
+                    <span class="n">resource</span><span class="p">[</span><span class="s">&#39;client_id&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&quot;node</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">cardinal</span>
+                    <span class="n">resource</span><span class="p">[</span><span class="s">&#39;sliver_type&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&quot;raw-pc&quot;</span>
+                    <span class="n">resource</span><span class="p">[</span><span class="s">&#39;disk_image&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&quot;hola&quot;</span>
+                    <span class="n">top_auth</span> <span class="o">=</span> <span class="n">resource_hrn</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\\</span><span class="s">&quot;</span><span class="p">,</span> <span class="s">&quot;&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">)</span>
+                    <span class="n">top_auth</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
+                    <span class="n">top_auth</span> <span class="o">=</span> <span class="s">&#39;.&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">top_auth</span><span class="p">)</span>
+                    <span class="n">cm</span> <span class="o">=</span> <span class="n">urn</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;+&quot;</span><span class="p">)</span>
+                    <span class="n">resource</span><span class="p">[</span><span class="s">&#39;component_manager_id&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">+</span><span class="si">%s</span><span class="s">+authority+cm&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">cm</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="n">top_auth</span><span class="p">)</span>
+                    <span class="n">cardinal</span> <span class="o">+=</span> <span class="mi">1</span>
+                <span class="n">nodes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">resource</span><span class="p">)</span>
+            <span class="k">elif</span> <span class="n">resource_type</span> <span class="o">==</span> <span class="s">&#39;link&#39;</span><span class="p">:</span>
+                <span class="n">links</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">resource</span><span class="p">)</span>
+            <span class="k">elif</span> <span class="n">resource_type</span> <span class="o">==</span> <span class="s">&#39;channel&#39;</span><span class="p">:</span>
+                <span class="n">channels</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">resource</span><span class="p">)</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="s">&quot;Not supported type of resource&quot;</span> 
+        
+        <span class="n">rspec</span><span class="o">.</span><span class="n">version</span><span class="o">.</span><span class="n">add_nodes</span><span class="p">(</span><span class="n">nodes</span><span class="p">,</span> <span class="n">rspec_content_type</span><span class="o">=</span><span class="s">&quot;request&quot;</span><span class="p">)</span>
+        <span class="c">#rspec.version.add_leases(leases)</span>
+        <span class="c">#rspec.version.add_links(links)</span>
+        <span class="c">#rspec.version.add_channels(channels)</span>
+
+        <span class="c">#self._log.debug(&quot;request rspec: %s&quot;%rspec.toxml())</span>
+        <span class="n">string</span> <span class="o">=</span> <span class="n">rspec</span><span class="o">.</span><span class="n">toxml</span><span class="p">()</span>
+        <span class="k">if</span> <span class="n">wilab</span> <span class="ow">and</span> <span class="n">properties</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
+            <span class="c">## dirty hack for the f4f demo</span>
+            <span class="n">b</span> <span class="o">=</span> <span class="n">string</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">)</span>
+            <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">n</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">b</span><span class="p">):</span>
+                <span class="k">if</span> <span class="s">&#39;sliver_type name=&quot;raw-pc&quot;&#39;</span> <span class="ow">in</span> <span class="n">n</span><span class="p">:</span>
+                    <span class="n">b</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;&lt;sliver_type name=&quot;raw-pc&quot;&gt;&#39;</span>
+                    <span class="n">b</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span> <span class="s">&#39;&lt;disk_image name=&quot;urn:publicid:IDN+wall2.ilabt.iminds.be+image+emulab-ops//</span><span class="si">%s</span><span class="s">&quot;/&gt;&#39;</span> <span class="o">%</span> <span class="n">properties</span><span class="p">[</span><span class="s">&#39;disk_image&#39;</span><span class="p">])</span>
+                    <span class="c">#b.insert(i+1, &#39;&lt;disk_image name=&quot;urn:publicid:IDN+wilab2.ilabt.iminds.be+image+nepi:%s&quot;/&gt;&#39; % properties[&#39;disk_image&#39;])</span>
+                    <span class="n">b</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">2</span><span class="p">,</span> <span class="s">&#39;&lt;/sliver_type&gt;&#39;</span><span class="p">)</span>
+            <span class="n">string</span> <span class="o">=</span> <span class="s">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;request rspec : </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">string</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">string</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/util/sshfuncs.html b/doc/sphinx/_build/html/_modules/nepi/util/sshfuncs.html
new file mode 100644 (file)
index 0000000..b588bab
--- /dev/null
@@ -0,0 +1,988 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.util.sshfuncs &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../index.html" />
+    <link rel="up" title="Module code" href="../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.util.sshfuncs</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+<span class="c">#         Claudio Freire &lt;claudio-daniel.freire@inria.fr&gt;</span>
+
+<span class="c">## TODO: This code needs reviewing !!!</span>
+
+<span class="kn">import</span> <span class="nn">base64</span>
+<span class="kn">import</span> <span class="nn">errno</span>
+<span class="kn">import</span> <span class="nn">hashlib</span>
+<span class="kn">import</span> <span class="nn">logging</span>
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">os.path</span>
+<span class="kn">import</span> <span class="nn">re</span>
+<span class="kn">import</span> <span class="nn">select</span>
+<span class="kn">import</span> <span class="nn">signal</span>
+<span class="kn">import</span> <span class="nn">socket</span>
+<span class="kn">import</span> <span class="nn">subprocess</span>
+<span class="kn">import</span> <span class="nn">threading</span>
+<span class="kn">import</span> <span class="nn">time</span>
+<span class="kn">import</span> <span class="nn">tempfile</span>
+
+<span class="n">_re_inet</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s">&quot;\d+:\s+(?P&lt;name&gt;[a-z0-9_-]+)\s+inet6?\s+(?P&lt;inet&gt;[a-f0-9.:/]+)\s+(brd\s+[0-9.]+)?.*scope\s+global.*&quot;</span><span class="p">)</span> 
+
+<span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s">&quot;sshfuncs&quot;</span><span class="p">)</span>
+
+<div class="viewcode-block" id="log"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.sshfuncs.log">[docs]</a><span class="k">def</span> <span class="nf">log</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">level</span><span class="p">,</span> <span class="n">out</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">err</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+    <span class="k">if</span> <span class="n">out</span><span class="p">:</span>
+        <span class="n">msg</span> <span class="o">+=</span> <span class="s">&quot; - OUT: </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="n">out</span>
+
+    <span class="k">if</span> <span class="n">err</span><span class="p">:</span>
+        <span class="n">msg</span> <span class="o">+=</span> <span class="s">&quot; - ERROR: </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="n">err</span>
+
+    <span class="n">logger</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="n">level</span><span class="p">,</span> <span class="n">msg</span><span class="p">)</span>
+</div>
+<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">os</span><span class="p">,</span> <span class="s">&quot;devnull&quot;</span><span class="p">):</span>
+    <span class="n">DEV_NULL</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">devnull</span>
+<span class="k">else</span><span class="p">:</span>
+    <span class="n">DEV_NULL</span> <span class="o">=</span> <span class="s">&quot;/dev/null&quot;</span>
+
+<span class="n">SHELL_SAFE</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s">&#39;^[-a-zA-Z0-9_=+:.,/]*$&#39;</span><span class="p">)</span>
+
+<div class="viewcode-block" id="STDOUT"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.sshfuncs.STDOUT">[docs]</a><span class="k">class</span> <span class="nc">STDOUT</span><span class="p">:</span> 
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Special value that when given to rspawn in stderr causes stderr to </span>
+<span class="sd">    redirect to whatever stdout was redirected to.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+</div>
+<div class="viewcode-block" id="ProcStatus"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.sshfuncs.ProcStatus">[docs]</a><span class="k">class</span> <span class="nc">ProcStatus</span><span class="p">:</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Codes for status of remote spawned process</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="c"># Process is still running</span>
+    <span class="n">RUNNING</span> <span class="o">=</span> <span class="mi">1</span>
+
+    <span class="c"># Process is finished</span>
+    <span class="n">FINISHED</span> <span class="o">=</span> <span class="mi">2</span>
+    
+    <span class="c"># Process hasn&#39;t started running yet (this should be very rare)</span>
+    <span class="n">NOT_STARTED</span> <span class="o">=</span> <span class="mi">3</span>
+</div>
+<span class="n">hostbyname_cache</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
+<span class="n">hostbyname_cache_lock</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Lock</span><span class="p">()</span>
+
+<div class="viewcode-block" id="resolve_hostname"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.sshfuncs.resolve_hostname">[docs]</a><span class="k">def</span> <span class="nf">resolve_hostname</span><span class="p">(</span><span class="n">host</span><span class="p">):</span>
+    <span class="n">ip</span> <span class="o">=</span> <span class="bp">None</span>
+
+    <span class="k">if</span> <span class="n">host</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&quot;localhost&quot;</span><span class="p">,</span> <span class="s">&quot;127.0.0.1&quot;</span><span class="p">,</span> <span class="s">&quot;::1&quot;</span><span class="p">]:</span>
+        <span class="n">p</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">(</span><span class="s">&quot;ip -o addr list&quot;</span><span class="p">,</span> <span class="n">shell</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span>
+                <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span> <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">)</span>
+        <span class="n">stdout</span><span class="p">,</span> <span class="n">stderr</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">communicate</span><span class="p">()</span>
+        <span class="n">m</span> <span class="o">=</span> <span class="n">_re_inet</span><span class="o">.</span><span class="n">findall</span><span class="p">(</span><span class="n">stdout</span><span class="p">)</span>
+        <span class="n">ip</span> <span class="o">=</span> <span class="n">m</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;/&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="n">ip</span> <span class="o">=</span> <span class="n">socket</span><span class="o">.</span><span class="n">gethostbyname</span><span class="p">(</span><span class="n">host</span><span class="p">)</span>
+
+    <span class="k">return</span> <span class="n">ip</span>
+</div>
+<div class="viewcode-block" id="gethostbyname"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.sshfuncs.gethostbyname">[docs]</a><span class="k">def</span> <span class="nf">gethostbyname</span><span class="p">(</span><span class="n">host</span><span class="p">):</span>
+    <span class="k">global</span> <span class="n">hostbyname_cache</span>
+    <span class="k">global</span> <span class="n">hostbyname_cache_lock</span>
+    
+    <span class="n">hostbyname</span> <span class="o">=</span> <span class="n">hostbyname_cache</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">host</span><span class="p">)</span>
+    <span class="k">if</span> <span class="ow">not</span> <span class="n">hostbyname</span><span class="p">:</span>
+        <span class="k">with</span> <span class="n">hostbyname_cache_lock</span><span class="p">:</span>
+            <span class="n">hostbyname</span> <span class="o">=</span> <span class="n">resolve_hostname</span><span class="p">(</span><span class="n">host</span><span class="p">)</span>
+            <span class="n">hostbyname_cache</span><span class="p">[</span><span class="n">host</span><span class="p">]</span> <span class="o">=</span> <span class="n">hostbyname</span>
+
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Added hostbyname </span><span class="si">%s</span><span class="s"> - </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">host</span><span class="p">,</span> <span class="n">hostbyname</span><span class="p">)</span>
+            <span class="n">log</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">logging</span><span class="o">.</span><span class="n">DEBUG</span><span class="p">)</span>
+
+    <span class="k">return</span> <span class="n">hostbyname</span>
+</div>
+<span class="n">OPENSSH_HAS_PERSIST</span> <span class="o">=</span> <span class="bp">None</span>
+
+<div class="viewcode-block" id="openssh_has_persist"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.sshfuncs.openssh_has_persist">[docs]</a><span class="k">def</span> <span class="nf">openssh_has_persist</span><span class="p">():</span>
+    <span class="sd">&quot;&quot;&quot; The ssh_config options ControlMaster and ControlPersist allow to</span>
+<span class="sd">    reuse a same network connection for multiple ssh sessions. In this </span>
+<span class="sd">    way limitations on number of open ssh connections can be bypassed.</span>
+<span class="sd">    However, older versions of openSSH do not support this feature.</span>
+<span class="sd">    This function is used to determine if ssh connection persist features</span>
+<span class="sd">    can be used.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="k">global</span> <span class="n">OPENSSH_HAS_PERSIST</span>
+    <span class="k">if</span> <span class="n">OPENSSH_HAS_PERSIST</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
+        <span class="n">proc</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="s">&quot;ssh&quot;</span><span class="p">,</span><span class="s">&quot;-v&quot;</span><span class="p">],</span>
+            <span class="n">stdout</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span>
+            <span class="n">stderr</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span><span class="p">,</span>
+            <span class="n">stdin</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="s">&quot;/dev/null&quot;</span><span class="p">,</span><span class="s">&quot;r&quot;</span><span class="p">)</span> <span class="p">)</span>
+        <span class="n">out</span><span class="p">,</span><span class="n">err</span> <span class="o">=</span> <span class="n">proc</span><span class="o">.</span><span class="n">communicate</span><span class="p">()</span>
+        <span class="n">proc</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span>
+        
+        <span class="n">vre</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s">r&#39;OpenSSH_(?:[6-9]|5[.][8-9]|5[.][1-9][0-9]|[1-9][0-9]).*&#39;</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">I</span><span class="p">)</span>
+        <span class="n">OPENSSH_HAS_PERSIST</span> <span class="o">=</span> <span class="nb">bool</span><span class="p">(</span><span class="n">vre</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">out</span><span class="p">))</span>
+    <span class="k">return</span> <span class="n">OPENSSH_HAS_PERSIST</span>
+</div>
+<div class="viewcode-block" id="make_server_key_args"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.sshfuncs.make_server_key_args">[docs]</a><span class="k">def</span> <span class="nf">make_server_key_args</span><span class="p">(</span><span class="n">server_key</span><span class="p">,</span> <span class="n">host</span><span class="p">,</span> <span class="n">port</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot; Returns a reference to a temporary known_hosts file, to which </span>
+<span class="sd">    the server key has been added. </span>
+<span class="sd">    </span>
+<span class="sd">    Make sure to hold onto the temp file reference until the process is </span>
+<span class="sd">    done with it</span>
+
+<span class="sd">    :param server_key: the server public key</span>
+<span class="sd">    :type server_key: str</span>
+
+<span class="sd">    :param host: the hostname</span>
+<span class="sd">    :type host: str</span>
+
+<span class="sd">    :param port: the ssh port</span>
+<span class="sd">    :type port: str</span>
+
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="k">if</span> <span class="n">port</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
+        <span class="n">host</span> <span class="o">=</span> <span class="s">&#39;</span><span class="si">%s</span><span class="s">:</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">host</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">port</span><span class="p">))</span>
+
+    <span class="c"># Create a temporary server key file</span>
+    <span class="n">tmp_known_hosts</span> <span class="o">=</span> <span class="n">tempfile</span><span class="o">.</span><span class="n">NamedTemporaryFile</span><span class="p">()</span>
+   
+    <span class="n">hostbyname</span> <span class="o">=</span> <span class="n">gethostbyname</span><span class="p">(</span><span class="n">host</span><span class="p">)</span> 
+
+    <span class="c"># Add the intended host key</span>
+    <span class="n">tmp_known_hosts</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s">&#39;</span><span class="si">%s</span><span class="s">,</span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="se">\n</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">host</span><span class="p">,</span> <span class="n">hostbyname</span><span class="p">,</span> <span class="n">server_key</span><span class="p">))</span>
+    
+    <span class="c"># If we&#39;re not in strict mode, add user-configured keys</span>
+    <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;NEPI_STRICT_AUTH_MODE&#39;</span><span class="p">,</span><span class="s">&quot;&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s">&#39;1&#39;</span><span class="p">,</span><span class="s">&#39;true&#39;</span><span class="p">,</span><span class="s">&#39;on&#39;</span><span class="p">):</span>
+        <span class="n">user_hosts_path</span> <span class="o">=</span> <span class="s">&#39;</span><span class="si">%s</span><span class="s">/.ssh/known_hosts&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;HOME&#39;</span><span class="p">,</span><span class="s">&quot;&quot;</span><span class="p">),)</span>
+        <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">user_hosts_path</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">R_OK</span><span class="p">):</span>
+            <span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">user_hosts_path</span><span class="p">,</span> <span class="s">&quot;r&quot;</span><span class="p">)</span>
+            <span class="n">tmp_known_hosts</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">())</span>
+            <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+        
+    <span class="n">tmp_known_hosts</span><span class="o">.</span><span class="n">flush</span><span class="p">()</span>
+    
+    <span class="k">return</span> <span class="n">tmp_known_hosts</span>
+</div>
+<div class="viewcode-block" id="make_control_path"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.sshfuncs.make_control_path">[docs]</a><span class="k">def</span> <span class="nf">make_control_path</span><span class="p">(</span><span class="n">agent</span><span class="p">,</span> <span class="n">forward_x11</span><span class="p">):</span>
+    <span class="n">ctrl_path</span> <span class="o">=</span> <span class="s">&quot;/tmp/nepi_ssh&quot;</span>
+
+    <span class="k">if</span> <span class="n">agent</span><span class="p">:</span>
+        <span class="n">ctrl_path</span> <span class="o">+=</span><span class="s">&quot;_a&quot;</span>
+
+    <span class="k">if</span> <span class="n">forward_x11</span><span class="p">:</span>
+        <span class="n">ctrl_path</span> <span class="o">+=</span><span class="s">&quot;_x&quot;</span>
+
+    <span class="n">ctrl_path</span> <span class="o">+=</span> <span class="s">&quot;-</span><span class="si">%r</span><span class="s">@%h:%p&quot;</span>
+
+    <span class="k">return</span> <span class="n">ctrl_path</span>
+</div>
+<div class="viewcode-block" id="shell_escape"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.sshfuncs.shell_escape">[docs]</a><span class="k">def</span> <span class="nf">shell_escape</span><span class="p">(</span><span class="n">s</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot; Escapes strings so that they are safe to use as command-line </span>
+<span class="sd">    arguments &quot;&quot;&quot;</span>
+    <span class="k">if</span> <span class="n">SHELL_SAFE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">s</span><span class="p">):</span>
+        <span class="c"># safe string - no escaping needed</span>
+        <span class="k">return</span> <span class="n">s</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="c"># unsafe string - escape</span>
+        <span class="k">def</span> <span class="nf">escp</span><span class="p">(</span><span class="n">c</span><span class="p">):</span>
+            <span class="k">if</span> <span class="p">(</span><span class="mi">32</span> <span class="o">&lt;=</span> <span class="nb">ord</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">127</span> <span class="ow">or</span> <span class="n">c</span> <span class="ow">in</span> <span class="p">(</span><span class="s">&#39;</span><span class="se">\r</span><span class="s">&#39;</span><span class="p">,</span><span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">,</span><span class="s">&#39;</span><span class="se">\t</span><span class="s">&#39;</span><span class="p">))</span> <span class="ow">and</span> <span class="n">c</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s">&quot;&#39;&quot;</span><span class="p">,</span><span class="s">&#39;&quot;&#39;</span><span class="p">):</span>
+                <span class="k">return</span> <span class="n">c</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="k">return</span> <span class="s">&quot;&#39;$&#39;</span><span class="se">\\</span><span class="s">x</span><span class="si">%02x</span><span class="s">&#39;&#39;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="nb">ord</span><span class="p">(</span><span class="n">c</span><span class="p">),)</span>
+        <span class="n">s</span> <span class="o">=</span> <span class="s">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="n">escp</span><span class="p">,</span><span class="n">s</span><span class="p">))</span>
+        <span class="k">return</span> <span class="s">&quot;&#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">s</span><span class="p">,)</span>
+</div>
+<div class="viewcode-block" id="eintr_retry"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.sshfuncs.eintr_retry">[docs]</a><span class="k">def</span> <span class="nf">eintr_retry</span><span class="p">(</span><span class="n">func</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;Retries a function invocation when a EINTR occurs&quot;&quot;&quot;</span>
+    <span class="kn">import</span> <span class="nn">functools</span>
+    <span class="nd">@functools.wraps</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
+    <span class="k">def</span> <span class="nf">rv</span><span class="p">(</span><span class="o">*</span><span class="n">p</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">):</span>
+        <span class="n">retry</span> <span class="o">=</span> <span class="n">kw</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">&quot;_retry&quot;</span><span class="p">,</span> <span class="bp">False</span><span class="p">)</span>
+        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="mi">0</span> <span class="k">if</span> <span class="n">retry</span> <span class="k">else</span> <span class="mi">4</span><span class="p">):</span>
+            <span class="k">try</span><span class="p">:</span>
+                <span class="k">return</span> <span class="n">func</span><span class="p">(</span><span class="o">*</span><span class="n">p</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">)</span>
+            <span class="k">except</span> <span class="p">(</span><span class="n">select</span><span class="o">.</span><span class="n">error</span><span class="p">,</span> <span class="n">socket</span><span class="o">.</span><span class="n">error</span><span class="p">),</span> <span class="n">args</span><span class="p">:</span>
+                <span class="k">if</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="n">errno</span><span class="o">.</span><span class="n">EINTR</span><span class="p">:</span>
+                    <span class="k">continue</span>
+                <span class="k">else</span><span class="p">:</span>
+                    <span class="k">raise</span> 
+            <span class="k">except</span> <span class="ne">OSError</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
+                <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">errno</span> <span class="o">==</span> <span class="n">errno</span><span class="o">.</span><span class="n">EINTR</span><span class="p">:</span>
+                    <span class="k">continue</span>
+                <span class="k">else</span><span class="p">:</span>
+                    <span class="k">raise</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">func</span><span class="p">(</span><span class="o">*</span><span class="n">p</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">rv</span>
+</div>
+<div class="viewcode-block" id="rexec"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.sshfuncs.rexec">[docs]</a><span class="k">def</span> <span class="nf">rexec</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="n">host</span><span class="p">,</span> <span class="n">user</span><span class="p">,</span> 
+        <span class="n">port</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+        <span class="n">gwuser</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+        <span class="n">gw</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> 
+        <span class="n">agent</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span>
+        <span class="n">sudo</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+        <span class="n">identity</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+        <span class="n">server_key</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+        <span class="n">env</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+        <span class="n">tty</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+        <span class="n">connect_timeout</span> <span class="o">=</span> <span class="mi">30</span><span class="p">,</span>
+        <span class="n">retry</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span>
+        <span class="n">persistent</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span>
+        <span class="n">forward_x11</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+        <span class="n">blocking</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span>
+        <span class="n">strict_host_checking</span> <span class="o">=</span> <span class="bp">True</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Executes a remote command, returns ((stdout,stderr),process)</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+
+    <span class="n">tmp_known_hosts</span> <span class="o">=</span> <span class="bp">None</span>
+    <span class="k">if</span> <span class="ow">not</span> <span class="n">gw</span><span class="p">:</span>
+        <span class="n">hostip</span> <span class="o">=</span> <span class="n">gethostbyname</span><span class="p">(</span><span class="n">host</span><span class="p">)</span>
+    <span class="k">else</span><span class="p">:</span> <span class="n">hostip</span> <span class="o">=</span> <span class="bp">None</span>
+
+    <span class="n">args</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;ssh&#39;</span><span class="p">,</span> <span class="s">&#39;-C&#39;</span><span class="p">,</span>
+            <span class="c"># Don&#39;t bother with localhost. Makes test easier</span>
+            <span class="s">&#39;-o&#39;</span><span class="p">,</span> <span class="s">&#39;NoHostAuthenticationForLocalhost=yes&#39;</span><span class="p">,</span>
+            <span class="s">&#39;-o&#39;</span><span class="p">,</span> <span class="s">&#39;ConnectTimeout=</span><span class="si">%d</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">connect_timeout</span><span class="p">),),</span>
+            <span class="s">&#39;-o&#39;</span><span class="p">,</span> <span class="s">&#39;ConnectionAttempts=3&#39;</span><span class="p">,</span>
+            <span class="s">&#39;-o&#39;</span><span class="p">,</span> <span class="s">&#39;ServerAliveInterval=30&#39;</span><span class="p">,</span>
+            <span class="s">&#39;-o&#39;</span><span class="p">,</span> <span class="s">&#39;TCPKeepAlive=yes&#39;</span><span class="p">,</span>
+            <span class="s">&#39;-o&#39;</span><span class="p">,</span> <span class="s">&#39;Batchmode=yes&#39;</span><span class="p">,</span>
+            <span class="s">&#39;-l&#39;</span><span class="p">,</span> <span class="n">user</span><span class="p">,</span> <span class="n">hostip</span> <span class="ow">or</span> <span class="n">host</span><span class="p">]</span>
+
+    <span class="k">if</span> <span class="n">persistent</span> <span class="ow">and</span> <span class="n">openssh_has_persist</span><span class="p">():</span>
+        <span class="n">args</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span>
+            <span class="s">&#39;-o&#39;</span><span class="p">,</span> <span class="s">&#39;ControlMaster=auto&#39;</span><span class="p">,</span>
+            <span class="s">&#39;-o&#39;</span><span class="p">,</span> <span class="s">&#39;ControlPath=</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">make_control_path</span><span class="p">(</span><span class="n">agent</span><span class="p">,</span> <span class="n">forward_x11</span><span class="p">),),</span>
+            <span class="s">&#39;-o&#39;</span><span class="p">,</span> <span class="s">&#39;ControlPersist=60&#39;</span> <span class="p">])</span>
+
+    <span class="k">if</span> <span class="ow">not</span> <span class="n">strict_host_checking</span><span class="p">:</span>
+        <span class="c"># Do not check for Host key. Unsafe.</span>
+        <span class="n">args</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span><span class="s">&#39;-o&#39;</span><span class="p">,</span> <span class="s">&#39;StrictHostKeyChecking=no&#39;</span><span class="p">])</span>
+
+    <span class="k">if</span> <span class="n">gw</span><span class="p">:</span>
+        <span class="n">proxycommand</span> <span class="o">=</span> <span class="n">_proxy_command</span><span class="p">(</span><span class="n">gw</span><span class="p">,</span> <span class="n">gwuser</span><span class="p">,</span> <span class="n">identity</span><span class="p">)</span>
+        <span class="n">args</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span><span class="s">&#39;-o&#39;</span><span class="p">,</span> <span class="n">proxycommand</span><span class="p">])</span>
+
+    <span class="k">if</span> <span class="n">agent</span><span class="p">:</span>
+        <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;-A&#39;</span><span class="p">)</span>
+
+    <span class="k">if</span> <span class="n">port</span><span class="p">:</span>
+        <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;-p</span><span class="si">%d</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">port</span><span class="p">)</span>
+
+    <span class="k">if</span> <span class="n">identity</span><span class="p">:</span>
+        <span class="n">identity</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expanduser</span><span class="p">(</span><span class="n">identity</span><span class="p">)</span>
+        <span class="n">args</span><span class="o">.</span><span class="n">extend</span><span class="p">((</span><span class="s">&#39;-i&#39;</span><span class="p">,</span> <span class="n">identity</span><span class="p">))</span>
+
+    <span class="k">if</span> <span class="n">tty</span><span class="p">:</span>
+        <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;-t&#39;</span><span class="p">)</span>
+        <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;-t&#39;</span><span class="p">)</span>
+
+    <span class="k">if</span> <span class="n">forward_x11</span><span class="p">:</span>
+        <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;-X&#39;</span><span class="p">)</span>
+
+    <span class="k">if</span> <span class="n">server_key</span><span class="p">:</span>
+        <span class="c"># Create a temporary server key file</span>
+        <span class="n">tmp_known_hosts</span> <span class="o">=</span> <span class="n">make_server_key_args</span><span class="p">(</span><span class="n">server_key</span><span class="p">,</span> <span class="n">host</span><span class="p">,</span> <span class="n">port</span><span class="p">)</span>
+        <span class="n">args</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span><span class="s">&#39;-o&#39;</span><span class="p">,</span> <span class="s">&#39;UserKnownHostsFile=</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">tmp_known_hosts</span><span class="o">.</span><span class="n">name</span><span class="p">,)])</span>
+
+    <span class="k">if</span> <span class="n">sudo</span><span class="p">:</span>
+        <span class="n">command</span> <span class="o">=</span> <span class="s">&quot;sudo &quot;</span> <span class="o">+</span> <span class="n">command</span>
+
+    <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
+
+    <span class="n">log_msg</span> <span class="o">=</span> <span class="s">&quot; rexec - host </span><span class="si">%s</span><span class="s"> - command </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">host</span><span class="p">),</span> <span class="s">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">args</span><span class="p">)))</span> 
+
+    <span class="n">stdout</span> <span class="o">=</span> <span class="n">stderr</span> <span class="o">=</span> <span class="n">stdin</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span>
+    <span class="k">if</span> <span class="n">forward_x11</span><span class="p">:</span>
+        <span class="n">stdout</span> <span class="o">=</span> <span class="n">stderr</span> <span class="o">=</span> <span class="n">stdin</span> <span class="o">=</span> <span class="bp">None</span>
+
+    <span class="k">return</span> <span class="n">_retry_rexec</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">log_msg</span><span class="p">,</span> 
+            <span class="n">stderr</span> <span class="o">=</span> <span class="n">stderr</span><span class="p">,</span>
+            <span class="n">stdin</span> <span class="o">=</span> <span class="n">stdin</span><span class="p">,</span>
+            <span class="n">stdout</span> <span class="o">=</span> <span class="n">stdout</span><span class="p">,</span>
+            <span class="n">env</span> <span class="o">=</span> <span class="n">env</span><span class="p">,</span> 
+            <span class="n">retry</span> <span class="o">=</span> <span class="n">retry</span><span class="p">,</span> 
+            <span class="n">tmp_known_hosts</span> <span class="o">=</span> <span class="n">tmp_known_hosts</span><span class="p">,</span>
+            <span class="n">blocking</span> <span class="o">=</span> <span class="n">blocking</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="rcopy"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.sshfuncs.rcopy">[docs]</a><span class="k">def</span> <span class="nf">rcopy</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">dest</span><span class="p">,</span>
+        <span class="n">port</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+        <span class="n">gwuser</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+        <span class="n">gw</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+        <span class="n">recursive</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+        <span class="n">identity</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+        <span class="n">server_key</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+        <span class="n">retry</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span>
+        <span class="n">strict_host_checking</span> <span class="o">=</span> <span class="bp">True</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Copies from/to remote sites.</span>
+<span class="sd">    </span>
+<span class="sd">    Source and destination should have the user and host encoded</span>
+<span class="sd">    as per scp specs.</span>
+<span class="sd">    </span>
+<span class="sd">    Source can be a list of files to copy to a single destination, </span>
+<span class="sd">    (in which case it is advised that the destination be a folder),</span>
+<span class="sd">    or a single file in a string.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+
+    <span class="c"># Parse destination as &lt;user&gt;@&lt;server&gt;:&lt;path&gt;</span>
+    <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dest</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="ow">and</span> <span class="s">&#39;:&#39;</span> <span class="ow">in</span> <span class="n">dest</span><span class="p">:</span>
+        <span class="n">remspec</span><span class="p">,</span> <span class="n">path</span> <span class="o">=</span> <span class="n">dest</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;:&#39;</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
+    <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="ow">and</span> <span class="s">&#39;:&#39;</span> <span class="ow">in</span> <span class="n">source</span><span class="p">:</span>
+        <span class="n">remspec</span><span class="p">,</span> <span class="n">path</span> <span class="o">=</span> <span class="n">source</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;:&#39;</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">,</span> <span class="s">&quot;Both endpoints cannot be local&quot;</span>
+    <span class="n">user</span><span class="p">,</span><span class="n">host</span> <span class="o">=</span> <span class="n">remspec</span><span class="o">.</span><span class="n">rsplit</span><span class="p">(</span><span class="s">&#39;@&#39;</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
+    
+    <span class="c"># plain scp</span>
+    <span class="n">tmp_known_hosts</span> <span class="o">=</span> <span class="bp">None</span>
+
+    <span class="n">args</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;scp&#39;</span><span class="p">,</span> <span class="s">&#39;-q&#39;</span><span class="p">,</span> <span class="s">&#39;-p&#39;</span><span class="p">,</span> <span class="s">&#39;-C&#39;</span><span class="p">,</span>
+            <span class="c"># Speed up transfer using blowfish cypher specification which is </span>
+            <span class="c"># faster than the default one (3des)</span>
+            <span class="s">&#39;-c&#39;</span><span class="p">,</span> <span class="s">&#39;blowfish&#39;</span><span class="p">,</span>
+            <span class="c"># Don&#39;t bother with localhost. Makes test easier</span>
+            <span class="s">&#39;-o&#39;</span><span class="p">,</span> <span class="s">&#39;NoHostAuthenticationForLocalhost=yes&#39;</span><span class="p">,</span>
+            <span class="s">&#39;-o&#39;</span><span class="p">,</span> <span class="s">&#39;ConnectTimeout=60&#39;</span><span class="p">,</span>
+            <span class="s">&#39;-o&#39;</span><span class="p">,</span> <span class="s">&#39;ConnectionAttempts=3&#39;</span><span class="p">,</span>
+            <span class="s">&#39;-o&#39;</span><span class="p">,</span> <span class="s">&#39;ServerAliveInterval=30&#39;</span><span class="p">,</span>
+            <span class="s">&#39;-o&#39;</span><span class="p">,</span> <span class="s">&#39;TCPKeepAlive=yes&#39;</span> <span class="p">]</span>
+            
+    <span class="k">if</span> <span class="n">port</span><span class="p">:</span>
+        <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;-P</span><span class="si">%d</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">port</span><span class="p">)</span>
+
+    <span class="k">if</span> <span class="n">gw</span><span class="p">:</span>
+        <span class="n">proxycommand</span> <span class="o">=</span> <span class="n">_proxy_command</span><span class="p">(</span><span class="n">gw</span><span class="p">,</span> <span class="n">gwuser</span><span class="p">,</span> <span class="n">identity</span><span class="p">)</span>
+        <span class="n">args</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span><span class="s">&#39;-o&#39;</span><span class="p">,</span> <span class="n">proxycommand</span><span class="p">])</span>
+
+    <span class="k">if</span> <span class="n">recursive</span><span class="p">:</span>
+        <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;-r&#39;</span><span class="p">)</span>
+
+    <span class="k">if</span> <span class="n">identity</span><span class="p">:</span>
+        <span class="n">identity</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expanduser</span><span class="p">(</span><span class="n">identity</span><span class="p">)</span>
+        <span class="n">args</span><span class="o">.</span><span class="n">extend</span><span class="p">((</span><span class="s">&#39;-i&#39;</span><span class="p">,</span> <span class="n">identity</span><span class="p">))</span>
+
+    <span class="k">if</span> <span class="n">server_key</span><span class="p">:</span>
+        <span class="c"># Create a temporary server key file</span>
+        <span class="n">tmp_known_hosts</span> <span class="o">=</span> <span class="n">make_server_key_args</span><span class="p">(</span><span class="n">server_key</span><span class="p">,</span> <span class="n">host</span><span class="p">,</span> <span class="n">port</span><span class="p">)</span>
+        <span class="n">args</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span><span class="s">&#39;-o&#39;</span><span class="p">,</span> <span class="s">&#39;UserKnownHostsFile=</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">tmp_known_hosts</span><span class="o">.</span><span class="n">name</span><span class="p">,)])</span>
+
+    <span class="k">if</span> <span class="ow">not</span> <span class="n">strict_host_checking</span><span class="p">:</span>
+        <span class="c"># Do not check for Host key. Unsafe.</span>
+        <span class="n">args</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span><span class="s">&#39;-o&#39;</span><span class="p">,</span> <span class="s">&#39;StrictHostKeyChecking=no&#39;</span><span class="p">])</span>
+    
+    <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
+        <span class="n">args</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">source</span><span class="p">)</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="k">if</span> <span class="n">openssh_has_persist</span><span class="p">():</span>
+            <span class="n">args</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span>
+                <span class="s">&#39;-o&#39;</span><span class="p">,</span> <span class="s">&#39;ControlMaster=auto&#39;</span><span class="p">,</span>
+                <span class="s">&#39;-o&#39;</span><span class="p">,</span> <span class="s">&#39;ControlPath=</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">make_control_path</span><span class="p">(</span><span class="bp">False</span><span class="p">,</span> <span class="bp">False</span><span class="p">),)</span>
+                <span class="p">])</span>
+        <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">source</span><span class="p">)</span>
+
+    <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dest</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
+        <span class="n">args</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">dest</span><span class="p">)</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">dest</span><span class="p">)</span>
+
+    <span class="n">log_msg</span> <span class="o">=</span> <span class="s">&quot; rcopy - host </span><span class="si">%s</span><span class="s"> - command </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">host</span><span class="p">),</span> <span class="s">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">args</span><span class="p">)))</span>
+    
+    <span class="k">return</span> <span class="n">_retry_rexec</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">log_msg</span><span class="p">,</span> <span class="n">env</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">retry</span> <span class="o">=</span> <span class="n">retry</span><span class="p">,</span> 
+            <span class="n">tmp_known_hosts</span> <span class="o">=</span> <span class="n">tmp_known_hosts</span><span class="p">,</span>
+            <span class="n">blocking</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="rspawn"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.sshfuncs.rspawn">[docs]</a><span class="k">def</span> <span class="nf">rspawn</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="n">pidfile</span><span class="p">,</span> 
+        <span class="n">stdout</span> <span class="o">=</span> <span class="s">&#39;/dev/null&#39;</span><span class="p">,</span> 
+        <span class="n">stderr</span> <span class="o">=</span> <span class="n">STDOUT</span><span class="p">,</span> 
+        <span class="n">stdin</span> <span class="o">=</span> <span class="s">&#39;/dev/null&#39;</span><span class="p">,</span>
+        <span class="n">home</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> 
+        <span class="n">create_home</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span> 
+        <span class="n">sudo</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+        <span class="n">host</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> 
+        <span class="n">port</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> 
+        <span class="n">user</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> 
+        <span class="n">gwuser</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+        <span class="n">gw</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+        <span class="n">agent</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> 
+        <span class="n">identity</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> 
+        <span class="n">server_key</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+        <span class="n">tty</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+        <span class="n">strict_host_checking</span> <span class="o">=</span> <span class="bp">True</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Spawn a remote command such that it will continue working asynchronously in </span>
+<span class="sd">    background. </span>
+
+<span class="sd">        :param command: The command to run, it should be a single line.</span>
+<span class="sd">        :type command: str</span>
+
+<span class="sd">        :param pidfile: Path to a file where to store the pid and ppid of the </span>
+<span class="sd">                        spawned process</span>
+<span class="sd">        :type pidfile: str</span>
+
+<span class="sd">        :param stdout: Path to file to redirect standard output. </span>
+<span class="sd">                       The default value is /dev/null</span>
+<span class="sd">        :type stdout: str</span>
+
+<span class="sd">        :param stderr: Path to file to redirect standard error.</span>
+<span class="sd">                       If the special STDOUT value is used, stderr will </span>
+<span class="sd">                       be redirected to the same file as stdout</span>
+<span class="sd">        :type stderr: str</span>
+
+<span class="sd">        :param stdin: Path to a file with input to be piped into the command&#39;s standard input</span>
+<span class="sd">        :type stdin: str</span>
+
+<span class="sd">        :param home: Path to working directory folder. </span>
+<span class="sd">                    It is assumed to exist unless the create_home flag is set.</span>
+<span class="sd">        :type home: str</span>
+
+<span class="sd">        :param create_home: Flag to force creation of the home folder before </span>
+<span class="sd">                            running the command</span>
+<span class="sd">        :type create_home: bool</span>
+<span class="sd"> </span>
+<span class="sd">        :param sudo: Flag forcing execution with sudo user</span>
+<span class="sd">        :type sudo: bool</span>
+<span class="sd">        </span>
+<span class="sd">        :rtype: tuple</span>
+
+<span class="sd">        (stdout, stderr), process</span>
+<span class="sd">        </span>
+<span class="sd">        Of the spawning process, which only captures errors at spawning time.</span>
+<span class="sd">        Usually only useful for diagnostics.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="c"># Start process in a &quot;daemonized&quot; way, using nohup and heavy</span>
+    <span class="c"># stdin/out redirection to avoid connection issues</span>
+    <span class="k">if</span> <span class="n">stderr</span> <span class="ow">is</span> <span class="n">STDOUT</span><span class="p">:</span>
+        <span class="n">stderr</span> <span class="o">=</span> <span class="s">&#39;&amp;1&#39;</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="n">stderr</span> <span class="o">=</span> <span class="s">&#39; &#39;</span> <span class="o">+</span> <span class="n">stderr</span>
+    
+    <span class="n">daemon_command</span> <span class="o">=</span> <span class="s">&#39;{ { </span><span class="si">%(command)s</span><span class="s"> &gt; </span><span class="si">%(stdout)s</span><span class="s"> 2&gt;</span><span class="si">%(stderr)s</span><span class="s"> &lt; </span><span class="si">%(stdin)s</span><span class="s"> &amp; } ; echo $! 1 &gt; </span><span class="si">%(pidfile)s</span><span class="s"> ; }&#39;</span> <span class="o">%</span> <span class="p">{</span>
+        <span class="s">&#39;command&#39;</span> <span class="p">:</span> <span class="n">command</span><span class="p">,</span>
+        <span class="s">&#39;pidfile&#39;</span> <span class="p">:</span> <span class="n">shell_escape</span><span class="p">(</span><span class="n">pidfile</span><span class="p">),</span>
+        <span class="s">&#39;stdout&#39;</span> <span class="p">:</span> <span class="n">stdout</span><span class="p">,</span>
+        <span class="s">&#39;stderr&#39;</span> <span class="p">:</span> <span class="n">stderr</span><span class="p">,</span>
+        <span class="s">&#39;stdin&#39;</span> <span class="p">:</span> <span class="n">stdin</span><span class="p">,</span>
+    <span class="p">}</span>
+    
+    <span class="n">cmd</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%(create)s%(gohome)s</span><span class="s"> rm -f </span><span class="si">%(pidfile)s</span><span class="s"> ; </span><span class="si">%(sudo)s</span><span class="s"> nohup bash -c </span><span class="si">%(command)s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="p">{</span>
+            <span class="s">&#39;command&#39;</span> <span class="p">:</span> <span class="n">shell_escape</span><span class="p">(</span><span class="n">daemon_command</span><span class="p">),</span>
+            <span class="s">&#39;sudo&#39;</span> <span class="p">:</span> <span class="s">&#39;sudo -S&#39;</span> <span class="k">if</span> <span class="n">sudo</span> <span class="k">else</span> <span class="s">&#39;&#39;</span><span class="p">,</span>
+            <span class="s">&#39;pidfile&#39;</span> <span class="p">:</span> <span class="n">shell_escape</span><span class="p">(</span><span class="n">pidfile</span><span class="p">),</span>
+            <span class="s">&#39;gohome&#39;</span> <span class="p">:</span> <span class="s">&#39;cd </span><span class="si">%s</span><span class="s"> ; &#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">shell_escape</span><span class="p">(</span><span class="n">home</span><span class="p">),)</span> <span class="k">if</span> <span class="n">home</span> <span class="k">else</span> <span class="s">&#39;&#39;</span><span class="p">,</span>
+            <span class="s">&#39;create&#39;</span> <span class="p">:</span> <span class="s">&#39;mkdir -p </span><span class="si">%s</span><span class="s"> ; &#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">shell_escape</span><span class="p">(</span><span class="n">home</span><span class="p">),)</span> <span class="k">if</span> <span class="n">create_home</span> <span class="ow">and</span> <span class="n">home</span> <span class="k">else</span> <span class="s">&#39;&#39;</span><span class="p">,</span>
+        <span class="p">}</span>
+
+    <span class="p">(</span><span class="n">out</span><span class="p">,</span><span class="n">err</span><span class="p">),</span><span class="n">proc</span> <span class="o">=</span> <span class="n">rexec</span><span class="p">(</span>
+        <span class="n">cmd</span><span class="p">,</span>
+        <span class="n">host</span> <span class="o">=</span> <span class="n">host</span><span class="p">,</span>
+        <span class="n">port</span> <span class="o">=</span> <span class="n">port</span><span class="p">,</span>
+        <span class="n">user</span> <span class="o">=</span> <span class="n">user</span><span class="p">,</span>
+        <span class="n">gwuser</span> <span class="o">=</span> <span class="n">gwuser</span><span class="p">,</span>
+        <span class="n">gw</span> <span class="o">=</span> <span class="n">gw</span><span class="p">,</span>
+        <span class="n">agent</span> <span class="o">=</span> <span class="n">agent</span><span class="p">,</span>
+        <span class="n">identity</span> <span class="o">=</span> <span class="n">identity</span><span class="p">,</span>
+        <span class="n">server_key</span> <span class="o">=</span> <span class="n">server_key</span><span class="p">,</span>
+        <span class="n">tty</span> <span class="o">=</span> <span class="n">tty</span><span class="p">,</span>
+        <span class="n">strict_host_checking</span> <span class="o">=</span> <span class="n">strict_host_checking</span> <span class="p">,</span>
+        <span class="p">)</span>
+    
+    <span class="k">if</span> <span class="n">proc</span><span class="o">.</span><span class="n">wait</span><span class="p">():</span>
+        <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="s">&quot;Failed to set up application on host </span><span class="si">%s</span><span class="s">: </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">host</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span><span class="n">err</span><span class="p">,)</span>
+
+    <span class="k">return</span> <span class="p">((</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span><span class="p">)</span>
+</div>
+<span class="nd">@eintr_retry</span>
+<div class="viewcode-block" id="rgetpid"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.sshfuncs.rgetpid">[docs]</a><span class="k">def</span> <span class="nf">rgetpid</span><span class="p">(</span><span class="n">pidfile</span><span class="p">,</span>
+        <span class="n">host</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> 
+        <span class="n">port</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> 
+        <span class="n">user</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> 
+        <span class="n">gwuser</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+        <span class="n">gw</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+        <span class="n">agent</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> 
+        <span class="n">identity</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+        <span class="n">server_key</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+        <span class="n">strict_host_checking</span> <span class="o">=</span> <span class="bp">True</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Returns the pid and ppid of a process from a remote file where the </span>
+<span class="sd">    information was stored.</span>
+
+<span class="sd">        :param home: Path to directory where the pidfile is located</span>
+<span class="sd">        :type home: str</span>
+
+<span class="sd">        :param pidfile: Name of file containing the pid information</span>
+<span class="sd">        :type pidfile: str</span>
+<span class="sd">        </span>
+<span class="sd">        :rtype: int</span>
+<span class="sd">        </span>
+<span class="sd">        A (pid, ppid) tuple useful for calling rstatus and rkill,</span>
+<span class="sd">        or None if the pidfile isn&#39;t valid yet (can happen when process is staring up)</span>
+
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="p">(</span><span class="n">out</span><span class="p">,</span><span class="n">err</span><span class="p">),</span><span class="n">proc</span> <span class="o">=</span> <span class="n">rexec</span><span class="p">(</span>
+        <span class="s">&quot;cat </span><span class="si">%(pidfile)s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">{</span>
+            <span class="s">&#39;pidfile&#39;</span> <span class="p">:</span> <span class="n">pidfile</span><span class="p">,</span>
+        <span class="p">},</span>
+        <span class="n">host</span> <span class="o">=</span> <span class="n">host</span><span class="p">,</span>
+        <span class="n">port</span> <span class="o">=</span> <span class="n">port</span><span class="p">,</span>
+        <span class="n">user</span> <span class="o">=</span> <span class="n">user</span><span class="p">,</span>
+        <span class="n">gwuser</span> <span class="o">=</span> <span class="n">gwuser</span><span class="p">,</span>
+        <span class="n">gw</span> <span class="o">=</span> <span class="n">gw</span><span class="p">,</span>
+        <span class="n">agent</span> <span class="o">=</span> <span class="n">agent</span><span class="p">,</span>
+        <span class="n">identity</span> <span class="o">=</span> <span class="n">identity</span><span class="p">,</span>
+        <span class="n">server_key</span> <span class="o">=</span> <span class="n">server_key</span><span class="p">,</span>
+        <span class="n">strict_host_checking</span> <span class="o">=</span> <span class="n">strict_host_checking</span>
+        <span class="p">)</span>
+        
+    <span class="k">if</span> <span class="n">proc</span><span class="o">.</span><span class="n">wait</span><span class="p">():</span>
+        <span class="k">return</span> <span class="bp">None</span>
+    
+    <span class="k">if</span> <span class="n">out</span><span class="p">:</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="k">return</span> <span class="nb">map</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span><span class="n">out</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39; &#39;</span><span class="p">,</span><span class="mi">1</span><span class="p">))</span>
+        <span class="k">except</span><span class="p">:</span>
+            <span class="c"># Ignore, many ways to fail that don&#39;t matter that much</span>
+            <span class="k">return</span> <span class="bp">None</span>
+</div>
+<span class="nd">@eintr_retry</span>
+<div class="viewcode-block" id="rstatus"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.sshfuncs.rstatus">[docs]</a><span class="k">def</span> <span class="nf">rstatus</span><span class="p">(</span><span class="n">pid</span><span class="p">,</span> <span class="n">ppid</span><span class="p">,</span> 
+        <span class="n">host</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> 
+        <span class="n">port</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> 
+        <span class="n">user</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> 
+        <span class="n">gwuser</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+        <span class="n">gw</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+        <span class="n">agent</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> 
+        <span class="n">identity</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+        <span class="n">server_key</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+        <span class="n">strict_host_checking</span> <span class="o">=</span> <span class="bp">True</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Returns a code representing the the status of a remote process</span>
+
+<span class="sd">        :param pid: Process id of the process</span>
+<span class="sd">        :type pid: int</span>
+
+<span class="sd">        :param ppid: Parent process id of process</span>
+<span class="sd">        :type ppid: int</span>
+<span class="sd">    </span>
+<span class="sd">        :rtype: int (One of NOT_STARTED, RUNNING, FINISHED)</span>
+<span class="sd">    </span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="p">(</span><span class="n">out</span><span class="p">,</span><span class="n">err</span><span class="p">),</span><span class="n">proc</span> <span class="o">=</span> <span class="n">rexec</span><span class="p">(</span>
+        <span class="c"># Check only by pid. pid+ppid does not always work (especially with sudo) </span>
+        <span class="s">&quot; (( ps --pid </span><span class="si">%(pid)d</span><span class="s"> -o pid | grep -c </span><span class="si">%(pid)d</span><span class="s"> &amp;&amp; echo &#39;wait&#39;)  || echo &#39;done&#39; ) | tail -n 1&quot;</span> <span class="o">%</span> <span class="p">{</span>
+            <span class="s">&#39;ppid&#39;</span> <span class="p">:</span> <span class="n">ppid</span><span class="p">,</span>
+            <span class="s">&#39;pid&#39;</span> <span class="p">:</span> <span class="n">pid</span><span class="p">,</span>
+        <span class="p">},</span>
+        <span class="n">host</span> <span class="o">=</span> <span class="n">host</span><span class="p">,</span>
+        <span class="n">port</span> <span class="o">=</span> <span class="n">port</span><span class="p">,</span>
+        <span class="n">user</span> <span class="o">=</span> <span class="n">user</span><span class="p">,</span>
+        <span class="n">gwuser</span> <span class="o">=</span> <span class="n">gwuser</span><span class="p">,</span>
+        <span class="n">gw</span> <span class="o">=</span> <span class="n">gw</span><span class="p">,</span>
+        <span class="n">agent</span> <span class="o">=</span> <span class="n">agent</span><span class="p">,</span>
+        <span class="n">identity</span> <span class="o">=</span> <span class="n">identity</span><span class="p">,</span>
+        <span class="n">server_key</span> <span class="o">=</span> <span class="n">server_key</span><span class="p">,</span>
+        <span class="n">strict_host_checking</span> <span class="o">=</span> <span class="n">strict_host_checking</span>
+        <span class="p">)</span>
+    
+    <span class="k">if</span> <span class="n">proc</span><span class="o">.</span><span class="n">wait</span><span class="p">():</span>
+        <span class="k">return</span> <span class="n">ProcStatus</span><span class="o">.</span><span class="n">NOT_STARTED</span>
+    
+    <span class="n">status</span> <span class="o">=</span> <span class="bp">False</span>
+    <span class="k">if</span> <span class="n">err</span><span class="p">:</span>
+        <span class="k">if</span> <span class="n">err</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&quot;Error, do this: mount -t proc none /proc&quot;</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mi">0</span><span class="p">:</span>
+            <span class="n">status</span> <span class="o">=</span> <span class="bp">True</span>
+    <span class="k">elif</span> <span class="n">out</span><span class="p">:</span>
+        <span class="n">status</span> <span class="o">=</span> <span class="p">(</span><span class="n">out</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="o">==</span> <span class="s">&#39;wait&#39;</span><span class="p">)</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="k">return</span> <span class="n">ProcStatus</span><span class="o">.</span><span class="n">NOT_STARTED</span>
+    <span class="k">return</span> <span class="n">ProcStatus</span><span class="o">.</span><span class="n">RUNNING</span> <span class="k">if</span> <span class="n">status</span> <span class="k">else</span> <span class="n">ProcStatus</span><span class="o">.</span><span class="n">FINISHED</span>
+</div>
+<span class="nd">@eintr_retry</span>
+<div class="viewcode-block" id="rkill"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.sshfuncs.rkill">[docs]</a><span class="k">def</span> <span class="nf">rkill</span><span class="p">(</span><span class="n">pid</span><span class="p">,</span> <span class="n">ppid</span><span class="p">,</span>
+        <span class="n">host</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> 
+        <span class="n">port</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> 
+        <span class="n">user</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> 
+        <span class="n">gwuser</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+        <span class="n">gw</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+        <span class="n">agent</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> 
+        <span class="n">sudo</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+        <span class="n">identity</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> 
+        <span class="n">server_key</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> 
+        <span class="n">nowait</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
+        <span class="n">strict_host_checking</span> <span class="o">=</span> <span class="bp">True</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Sends a kill signal to a remote process.</span>
+
+<span class="sd">    First tries a SIGTERM, and if the process does not end in 10 seconds,</span>
+<span class="sd">    it sends a SIGKILL.</span>
+<span class="sd"> </span>
+<span class="sd">        :param pid: Process id of process to be killed</span>
+<span class="sd">        :type pid: int</span>
+
+<span class="sd">        :param ppid: Parent process id of process to be killed</span>
+<span class="sd">        :type ppid: int</span>
+
+<span class="sd">        :param sudo: Flag indicating if sudo should be used to kill the process</span>
+<span class="sd">        :type sudo: bool</span>
+<span class="sd">        </span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">subkill</span> <span class="o">=</span> <span class="s">&quot;$(ps --ppid </span><span class="si">%(pid)d</span><span class="s"> -o pid h)&quot;</span> <span class="o">%</span> <span class="p">{</span> <span class="s">&#39;pid&#39;</span> <span class="p">:</span> <span class="n">pid</span> <span class="p">}</span>
+    <span class="n">cmd</span> <span class="o">=</span> <span class="s">&quot;&quot;&quot;</span>
+<span class="s">SUBKILL=&quot;</span><span class="si">%(subkill)s</span><span class="s">&quot; ;</span>
+<span class="si">%(sudo)s</span><span class="s"> kill -- -</span><span class="si">%(pid)d</span><span class="s"> $SUBKILL || /bin/true</span>
+<span class="si">%(sudo)s</span><span class="s"> kill </span><span class="si">%(pid)d</span><span class="s"> $SUBKILL || /bin/true</span>
+<span class="s">for x in 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ; do </span>
+<span class="s">    sleep 0.2 </span>
+<span class="s">    if [ `ps --pid </span><span class="si">%(pid)d</span><span class="s"> -o pid | grep -c </span><span class="si">%(pid)d</span><span class="s">` == &#39;0&#39; ]; then</span>
+<span class="s">        break</span>
+<span class="s">    else</span>
+<span class="s">        </span><span class="si">%(sudo)s</span><span class="s"> kill -- -</span><span class="si">%(pid)d</span><span class="s"> $SUBKILL || /bin/true</span>
+<span class="s">        </span><span class="si">%(sudo)s</span><span class="s"> kill </span><span class="si">%(pid)d</span><span class="s"> $SUBKILL || /bin/true</span>
+<span class="s">    fi</span>
+<span class="s">    sleep 1.8</span>
+<span class="s">done</span>
+<span class="s">if [ `ps --pid </span><span class="si">%(pid)d</span><span class="s"> -o pid | grep -c </span><span class="si">%(pid)d</span><span class="s">` != &#39;0&#39; ]; then</span>
+<span class="s">    </span><span class="si">%(sudo)s</span><span class="s"> kill -9 -- -</span><span class="si">%(pid)d</span><span class="s"> $SUBKILL || /bin/true</span>
+<span class="s">    </span><span class="si">%(sudo)s</span><span class="s"> kill -9 </span><span class="si">%(pid)d</span><span class="s"> $SUBKILL || /bin/true</span>
+<span class="s">fi</span>
+<span class="s">&quot;&quot;&quot;</span>
+    <span class="k">if</span> <span class="n">nowait</span><span class="p">:</span>
+        <span class="n">cmd</span> <span class="o">=</span> <span class="s">&quot;( </span><span class="si">%s</span><span class="s"> ) &gt;/dev/null 2&gt;/dev/null &lt;/dev/null &amp;&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">cmd</span><span class="p">,)</span>
+
+    <span class="p">(</span><span class="n">out</span><span class="p">,</span><span class="n">err</span><span class="p">),</span><span class="n">proc</span> <span class="o">=</span> <span class="n">rexec</span><span class="p">(</span>
+        <span class="n">cmd</span> <span class="o">%</span> <span class="p">{</span>
+            <span class="s">&#39;ppid&#39;</span> <span class="p">:</span> <span class="n">ppid</span><span class="p">,</span>
+            <span class="s">&#39;pid&#39;</span> <span class="p">:</span> <span class="n">pid</span><span class="p">,</span>
+            <span class="s">&#39;sudo&#39;</span> <span class="p">:</span> <span class="s">&#39;sudo -S&#39;</span> <span class="k">if</span> <span class="n">sudo</span> <span class="k">else</span> <span class="s">&#39;&#39;</span><span class="p">,</span>
+            <span class="s">&#39;subkill&#39;</span> <span class="p">:</span> <span class="n">subkill</span><span class="p">,</span>
+        <span class="p">},</span>
+        <span class="n">host</span> <span class="o">=</span> <span class="n">host</span><span class="p">,</span>
+        <span class="n">port</span> <span class="o">=</span> <span class="n">port</span><span class="p">,</span>
+        <span class="n">user</span> <span class="o">=</span> <span class="n">user</span><span class="p">,</span>
+        <span class="n">gwuser</span> <span class="o">=</span> <span class="n">gwuser</span><span class="p">,</span>
+        <span class="n">gw</span> <span class="o">=</span> <span class="n">gw</span><span class="p">,</span>
+        <span class="n">agent</span> <span class="o">=</span> <span class="n">agent</span><span class="p">,</span>
+        <span class="n">identity</span> <span class="o">=</span> <span class="n">identity</span><span class="p">,</span>
+        <span class="n">server_key</span> <span class="o">=</span> <span class="n">server_key</span><span class="p">,</span>
+        <span class="n">strict_host_checking</span> <span class="o">=</span> <span class="n">strict_host_checking</span>
+        <span class="p">)</span>
+    
+    <span class="c"># wait, don&#39;t leave zombies around</span>
+    <span class="n">proc</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span>
+
+    <span class="k">return</span> <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span>
+</div>
+<span class="k">def</span> <span class="nf">_retry_rexec</span><span class="p">(</span><span class="n">args</span><span class="p">,</span>
+        <span class="n">log_msg</span><span class="p">,</span>
+        <span class="n">stdout</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span>
+        <span class="n">stdin</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span> 
+        <span class="n">stderr</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span>
+        <span class="n">env</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+        <span class="n">retry</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span>
+        <span class="n">tmp_known_hosts</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
+        <span class="n">blocking</span> <span class="o">=</span> <span class="bp">True</span><span class="p">):</span>
+
+    <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="n">retry</span><span class="p">):</span>
+        <span class="c"># connects to the remote host and starts a remote connection</span>
+        <span class="n">proc</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">(</span><span class="n">args</span><span class="p">,</span>
+                <span class="n">env</span> <span class="o">=</span> <span class="n">env</span><span class="p">,</span>
+                <span class="n">stdout</span> <span class="o">=</span> <span class="n">stdout</span><span class="p">,</span>
+                <span class="n">stdin</span> <span class="o">=</span> <span class="n">stdin</span><span class="p">,</span> 
+                <span class="n">stderr</span> <span class="o">=</span> <span class="n">stderr</span><span class="p">)</span>
+        
+        <span class="c"># attach tempfile object to the process, to make sure the file stays</span>
+        <span class="c"># alive until the process is finished with it</span>
+        <span class="n">proc</span><span class="o">.</span><span class="n">_known_hosts</span> <span class="o">=</span> <span class="n">tmp_known_hosts</span>
+    
+        <span class="c"># The argument block == False forces to rexec to return immediately, </span>
+        <span class="c"># without blocking </span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">err</span> <span class="o">=</span> <span class="n">out</span> <span class="o">=</span> <span class="s">&quot; &quot;</span>
+            <span class="k">if</span> <span class="n">blocking</span><span class="p">:</span>
+                <span class="c">#(out, err) = proc.communicate()</span>
+                <span class="c"># The method communicate was re implemented for performance issues</span>
+                <span class="c"># when using python subprocess communicate method the ssh commands </span>
+                <span class="c"># last one minute each</span>
+                <span class="n">out</span><span class="p">,</span> <span class="n">err</span> <span class="o">=</span> <span class="n">_communicate</span><span class="p">(</span><span class="n">proc</span><span class="p">,</span> <span class="nb">input</span><span class="o">=</span><span class="bp">None</span><span class="p">)</span>
+
+            <span class="k">elif</span> <span class="n">stdout</span><span class="p">:</span>
+                <span class="n">out</span> <span class="o">=</span> <span class="n">proc</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
+                <span class="k">if</span> <span class="n">proc</span><span class="o">.</span><span class="n">poll</span><span class="p">()</span> <span class="ow">and</span> <span class="n">stderr</span><span class="p">:</span>
+                    <span class="n">err</span> <span class="o">=</span> <span class="n">proc</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
+
+            <span class="n">log</span><span class="p">(</span><span class="n">log_msg</span><span class="p">,</span> <span class="n">logging</span><span class="o">.</span><span class="n">DEBUG</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="n">proc</span><span class="o">.</span><span class="n">poll</span><span class="p">():</span>
+                <span class="n">skip</span> <span class="o">=</span> <span class="bp">False</span>
+
+                <span class="k">if</span> <span class="n">err</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;ssh: &#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">err</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;mux_client_hello_exchange: &#39;</span><span class="p">):</span>
+                    <span class="c"># SSH error, can safely retry</span>
+                    <span class="n">skip</span> <span class="o">=</span> <span class="bp">True</span> 
+                <span class="k">elif</span> <span class="n">retry</span><span class="p">:</span>
+                    <span class="c"># Probably timed out or plain failed but can retry</span>
+                    <span class="n">skip</span> <span class="o">=</span> <span class="bp">True</span> 
+                
+                <span class="k">if</span> <span class="n">skip</span><span class="p">:</span>
+                    <span class="n">t</span> <span class="o">=</span> <span class="n">x</span><span class="o">*</span><span class="mi">2</span>
+                    <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;SLEEPING </span><span class="si">%d</span><span class="s"> ... ATEMPT </span><span class="si">%d</span><span class="s"> - command </span><span class="si">%s</span><span class="s"> &quot;</span> <span class="o">%</span> <span class="p">(</span> 
+                            <span class="n">t</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="s">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">args</span><span class="p">))</span>
+                    <span class="n">log</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">logging</span><span class="o">.</span><span class="n">DEBUG</span><span class="p">)</span>
+
+                    <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>
+                    <span class="k">continue</span>
+            <span class="k">break</span>
+        <span class="k">except</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; rexec EXCEPTION - TIMEOUT -&gt; </span><span class="si">%s</span><span class="s"> </span><span class="se">\n</span><span class="s"> </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">,</span> <span class="n">log_msg</span> <span class="p">)</span>
+            <span class="n">log</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">logging</span><span class="o">.</span><span class="n">DEBUG</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="n">retry</span> <span class="o">&lt;=</span> <span class="mi">0</span><span class="p">:</span>
+                <span class="k">raise</span>
+            <span class="n">retry</span> <span class="o">-=</span> <span class="mi">1</span>
+
+    <span class="k">return</span> <span class="p">((</span><span class="n">out</span><span class="p">,</span> <span class="n">err</span><span class="p">),</span> <span class="n">proc</span><span class="p">)</span>
+
+<span class="c"># POSIX</span>
+<span class="c"># Don&#39;t remove. The method communicate was re implemented for performance issues</span>
+<span class="k">def</span> <span class="nf">_communicate</span><span class="p">(</span><span class="n">proc</span><span class="p">,</span> <span class="nb">input</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">err_on_timeout</span><span class="o">=</span><span class="bp">True</span><span class="p">):</span>
+    <span class="n">read_set</span> <span class="o">=</span> <span class="p">[]</span>
+    <span class="n">write_set</span> <span class="o">=</span> <span class="p">[]</span>
+    <span class="n">stdout</span> <span class="o">=</span> <span class="bp">None</span> <span class="c"># Return</span>
+    <span class="n">stderr</span> <span class="o">=</span> <span class="bp">None</span> <span class="c"># Return</span>
+
+    <span class="n">killed</span> <span class="o">=</span> <span class="bp">False</span>
+
+    <span class="k">if</span> <span class="n">timeout</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
+        <span class="n">timelimit</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> <span class="o">+</span> <span class="n">timeout</span>
+        <span class="n">killtime</span> <span class="o">=</span> <span class="n">timelimit</span> <span class="o">+</span> <span class="mi">4</span>
+        <span class="n">bailtime</span> <span class="o">=</span> <span class="n">timelimit</span> <span class="o">+</span> <span class="mi">4</span>
+
+    <span class="k">if</span> <span class="n">proc</span><span class="o">.</span><span class="n">stdin</span><span class="p">:</span>
+        <span class="c"># Flush stdio buffer.  This might block, if the user has</span>
+        <span class="c"># been writing to .stdin in an uncontrolled fashion.</span>
+        <span class="n">proc</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">flush</span><span class="p">()</span>
+        <span class="k">if</span> <span class="nb">input</span><span class="p">:</span>
+            <span class="n">write_set</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">proc</span><span class="o">.</span><span class="n">stdin</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">proc</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+    <span class="k">if</span> <span class="n">proc</span><span class="o">.</span><span class="n">stdout</span><span class="p">:</span>
+        <span class="n">read_set</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">proc</span><span class="o">.</span><span class="n">stdout</span><span class="p">)</span>
+        <span class="n">stdout</span> <span class="o">=</span> <span class="p">[]</span>
+
+    <span class="k">if</span> <span class="n">proc</span><span class="o">.</span><span class="n">stderr</span><span class="p">:</span>
+        <span class="n">read_set</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">proc</span><span class="o">.</span><span class="n">stderr</span><span class="p">)</span>
+        <span class="n">stderr</span> <span class="o">=</span> <span class="p">[]</span>
+
+    <span class="n">input_offset</span> <span class="o">=</span> <span class="mi">0</span>
+    <span class="k">while</span> <span class="n">read_set</span> <span class="ow">or</span> <span class="n">write_set</span><span class="p">:</span>
+        <span class="k">if</span> <span class="n">timeout</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
+            <span class="n">curtime</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span>
+            <span class="k">if</span> <span class="n">timeout</span> <span class="ow">is</span> <span class="bp">None</span> <span class="ow">or</span> <span class="n">curtime</span> <span class="o">&gt;</span> <span class="n">timelimit</span><span class="p">:</span>
+                <span class="k">if</span> <span class="n">curtime</span> <span class="o">&gt;</span> <span class="n">bailtime</span><span class="p">:</span>
+                    <span class="k">break</span>
+                <span class="k">elif</span> <span class="n">curtime</span> <span class="o">&gt;</span> <span class="n">killtime</span><span class="p">:</span>
+                    <span class="n">signum</span> <span class="o">=</span> <span class="n">signal</span><span class="o">.</span><span class="n">SIGKILL</span>
+                <span class="k">else</span><span class="p">:</span>
+                    <span class="n">signum</span> <span class="o">=</span> <span class="n">signal</span><span class="o">.</span><span class="n">SIGTERM</span>
+                <span class="c"># Lets kill it</span>
+                <span class="n">os</span><span class="o">.</span><span class="n">kill</span><span class="p">(</span><span class="n">proc</span><span class="o">.</span><span class="n">pid</span><span class="p">,</span> <span class="n">signum</span><span class="p">)</span>
+                <span class="n">select_timeout</span> <span class="o">=</span> <span class="mf">0.5</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="n">select_timeout</span> <span class="o">=</span> <span class="n">timelimit</span> <span class="o">-</span> <span class="n">curtime</span> <span class="o">+</span> <span class="mf">0.1</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">select_timeout</span> <span class="o">=</span> <span class="mf">1.0</span>
+
+        <span class="k">if</span> <span class="n">select_timeout</span> <span class="o">&gt;</span> <span class="mf">1.0</span><span class="p">:</span>
+            <span class="n">select_timeout</span> <span class="o">=</span> <span class="mf">1.0</span>
+
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">rlist</span><span class="p">,</span> <span class="n">wlist</span><span class="p">,</span> <span class="n">xlist</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">read_set</span><span class="p">,</span> <span class="n">write_set</span><span class="p">,</span> <span class="p">[],</span> <span class="n">select_timeout</span><span class="p">)</span>
+        <span class="k">except</span> <span class="n">select</span><span class="o">.</span><span class="n">error</span><span class="p">,</span><span class="n">e</span><span class="p">:</span>
+            <span class="k">if</span> <span class="n">e</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="mi">4</span><span class="p">:</span>
+                <span class="k">raise</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="k">continue</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">rlist</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">wlist</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">xlist</span> <span class="ow">and</span> <span class="n">proc</span><span class="o">.</span><span class="n">poll</span><span class="p">()</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
+            <span class="c"># timeout and process exited, say bye</span>
+            <span class="k">break</span>
+
+        <span class="k">if</span> <span class="n">proc</span><span class="o">.</span><span class="n">stdin</span> <span class="ow">in</span> <span class="n">wlist</span><span class="p">:</span>
+            <span class="c"># When select has indicated that the file is writable,</span>
+            <span class="c"># we can write up to PIPE_BUF bytes without risk</span>
+            <span class="c"># blocking.  POSIX defines PIPE_BUF &gt;= 512</span>
+            <span class="n">bytes_written</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">proc</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">fileno</span><span class="p">(),</span>
+                    <span class="nb">buffer</span><span class="p">(</span><span class="nb">input</span><span class="p">,</span> <span class="n">input_offset</span><span class="p">,</span> <span class="mi">512</span><span class="p">))</span>
+            <span class="n">input_offset</span> <span class="o">+=</span> <span class="n">bytes_written</span>
+
+            <span class="k">if</span> <span class="n">input_offset</span> <span class="o">&gt;=</span> <span class="nb">len</span><span class="p">(</span><span class="nb">input</span><span class="p">):</span>
+                <span class="n">proc</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+                <span class="n">write_set</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">proc</span><span class="o">.</span><span class="n">stdin</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">proc</span><span class="o">.</span><span class="n">stdout</span> <span class="ow">in</span> <span class="n">rlist</span><span class="p">:</span>
+            <span class="n">data</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">proc</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">fileno</span><span class="p">(),</span> <span class="mi">1024</span><span class="p">)</span>
+            <span class="k">if</span> <span class="n">data</span> <span class="o">==</span> <span class="s">&quot;&quot;</span><span class="p">:</span>
+                <span class="n">proc</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+                <span class="n">read_set</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">proc</span><span class="o">.</span><span class="n">stdout</span><span class="p">)</span>
+            <span class="n">stdout</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">proc</span><span class="o">.</span><span class="n">stderr</span> <span class="ow">in</span> <span class="n">rlist</span><span class="p">:</span>
+            <span class="n">data</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">proc</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">fileno</span><span class="p">(),</span> <span class="mi">1024</span><span class="p">)</span>
+            <span class="k">if</span> <span class="n">data</span> <span class="o">==</span> <span class="s">&quot;&quot;</span><span class="p">:</span>
+                <span class="n">proc</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+                <span class="n">read_set</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">proc</span><span class="o">.</span><span class="n">stderr</span><span class="p">)</span>
+            <span class="n">stderr</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
+
+    <span class="c"># All data exchanged.  Translate lists into strings.</span>
+    <span class="k">if</span> <span class="n">stdout</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
+        <span class="n">stdout</span> <span class="o">=</span> <span class="s">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">stdout</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">stderr</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
+        <span class="n">stderr</span> <span class="o">=</span> <span class="s">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">stderr</span><span class="p">)</span>
+
+    <span class="c"># Translate newlines, if requested.  We cannot let the file</span>
+    <span class="c"># object do the translation: It is based on stdio, which is</span>
+    <span class="c"># impossible to combine with select (unless forcing no</span>
+    <span class="c"># buffering).</span>
+    <span class="k">if</span> <span class="n">proc</span><span class="o">.</span><span class="n">universal_newlines</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="nb">file</span><span class="p">,</span> <span class="s">&#39;newlines&#39;</span><span class="p">):</span>
+        <span class="k">if</span> <span class="n">stdout</span><span class="p">:</span>
+            <span class="n">stdout</span> <span class="o">=</span> <span class="n">proc</span><span class="o">.</span><span class="n">_translate_newlines</span><span class="p">(</span><span class="n">stdout</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">stderr</span><span class="p">:</span>
+            <span class="n">stderr</span> <span class="o">=</span> <span class="n">proc</span><span class="o">.</span><span class="n">_translate_newlines</span><span class="p">(</span><span class="n">stderr</span><span class="p">)</span>
+
+    <span class="k">if</span> <span class="n">killed</span> <span class="ow">and</span> <span class="n">err_on_timeout</span><span class="p">:</span>
+        <span class="n">errcode</span> <span class="o">=</span> <span class="n">proc</span><span class="o">.</span><span class="n">poll</span><span class="p">()</span>
+        <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="p">(</span><span class="s">&quot;Operation timed out&quot;</span><span class="p">,</span> <span class="n">errcode</span><span class="p">,</span> <span class="n">stdout</span><span class="p">,</span> <span class="n">stderr</span><span class="p">)</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="k">if</span> <span class="n">killed</span><span class="p">:</span>
+            <span class="n">proc</span><span class="o">.</span><span class="n">poll</span><span class="p">()</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">proc</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span>
+        <span class="k">return</span> <span class="p">(</span><span class="n">stdout</span><span class="p">,</span> <span class="n">stderr</span><span class="p">)</span>
+
+<span class="k">def</span> <span class="nf">_proxy_command</span><span class="p">(</span><span class="n">gw</span><span class="p">,</span> <span class="n">gwuser</span><span class="p">,</span> <span class="n">gwidentity</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Constructs the SSH ProxyCommand option to add to the SSH command to connect</span>
+<span class="sd">    via a proxy</span>
+<span class="sd">        :param gw: SSH proxy hostname</span>
+<span class="sd">        :type gw:  str </span>
+<span class="sd">       </span>
+<span class="sd">        :param gwuser: SSH proxy username</span>
+<span class="sd">        :type gwuser:  str</span>
+
+<span class="sd">        :param gwidentity: SSH proxy identity file </span>
+<span class="sd">        :type gwidentity:  str</span>
+
+<span class="sd">  </span>
+<span class="sd">        :rtype: str </span>
+<span class="sd">        </span>
+<span class="sd">        returns the SSH ProxyCommand option.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+
+    <span class="n">proxycommand</span> <span class="o">=</span> <span class="s">&#39;ProxyCommand=ssh -q &#39;</span>
+    <span class="k">if</span> <span class="n">gwidentity</span><span class="p">:</span>
+        <span class="n">proxycommand</span> <span class="o">+=</span> <span class="s">&#39;-i </span><span class="si">%s</span><span class="s"> &#39;</span> <span class="o">%</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expanduser</span><span class="p">(</span><span class="n">gwidentity</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">gwuser</span><span class="p">:</span>
+        <span class="n">proxycommand</span> <span class="o">+=</span> <span class="s">&#39;</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">gwuser</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="n">proxycommand</span> <span class="o">+=</span> <span class="s">&#39;</span><span class="si">%r</span><span class="s">&#39;</span>
+    <span class="n">proxycommand</span> <span class="o">+=</span> <span class="s">&#39;@</span><span class="si">%s</span><span class="s"> -W </span><span class="si">%%</span><span class="s">h:</span><span class="si">%%</span><span class="s">p&#39;</span> <span class="o">%</span> <span class="n">gw</span>
+
+    <span class="k">return</span> <span class="n">proxycommand</span>
+</pre></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/util/statfuncs.html b/doc/sphinx/_build/html/_modules/nepi/util/statfuncs.html
new file mode 100644 (file)
index 0000000..73b5db7
--- /dev/null
@@ -0,0 +1,136 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.util.statfuncs &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../index.html" />
+    <link rel="up" title="Module code" href="../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.util.statfuncs</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+<span class="kn">import</span> <span class="nn">math</span>
+<span class="kn">import</span> <span class="nn">numpy</span>
+<span class="kn">from</span> <span class="nn">scipy</span> <span class="kn">import</span> <span class="n">stats</span>
+
+<div class="viewcode-block" id="compute_mean"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.statfuncs.compute_mean">[docs]</a><span class="k">def</span> <span class="nf">compute_mean</span><span class="p">(</span><span class="n">sample</span><span class="p">):</span>
+    <span class="c"># TODO: Discard outliers !!!!</span>
+
+    <span class="k">if</span> <span class="ow">not</span> <span class="n">sample</span><span class="p">:</span>
+        <span class="k">print</span> <span class="s">&quot; CANNOT COMPUTE STATS for &quot;</span><span class="p">,</span> <span class="n">sample</span>
+        <span class="k">return</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+
+    <span class="n">x</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">sample</span><span class="p">)</span>
+
+    <span class="c"># sample mean and standard deviation</span>
+    <span class="n">n</span><span class="p">,</span> <span class="n">min_max</span><span class="p">,</span> <span class="n">mean</span><span class="p">,</span> <span class="n">var</span><span class="p">,</span> <span class="n">skew</span><span class="p">,</span> <span class="n">kurt</span> <span class="o">=</span> <span class="n">stats</span><span class="o">.</span><span class="n">describe</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
+    <span class="n">std</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">var</span><span class="p">)</span>
+
+    <span class="c"># for the population mean and std ...</span>
+    <span class="c"># mean = x.mean()</span>
+    <span class="c"># std = x.std()</span>
+    
+    <span class="c"># Calculate confidence interval t-distribution</span>
+    <span class="c">## BUG: Use quantil of NORMAL distribution, not t-student quantil distribution</span>
+    <span class="n">ci</span> <span class="o">=</span> <span class="n">stats</span><span class="o">.</span><span class="n">t</span><span class="o">.</span><span class="n">interval</span><span class="p">(</span><span class="mf">0.95</span><span class="p">,</span> <span class="n">n</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">loc</span> <span class="o">=</span> <span class="n">mean</span><span class="p">,</span> <span class="n">scale</span> <span class="o">=</span> <span class="n">std</span><span class="o">/</span><span class="n">math</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">n</span><span class="p">))</span>
+
+    <span class="k">return</span> <span class="p">(</span><span class="n">mean</span><span class="p">,</span> <span class="n">std</span><span class="p">,</span> <span class="n">ci</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">ci</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_modules/nepi/util/timefuncs.html b/doc/sphinx/_build/html/_modules/nepi/util/timefuncs.html
new file mode 100644 (file)
index 0000000..398babe
--- /dev/null
@@ -0,0 +1,213 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.util.timefuncs &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../index.html" />
+    <link rel="up" title="Module code" href="../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.util.timefuncs</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+<span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
+
+
+<span class="kn">import</span> <span class="nn">datetime</span>
+<span class="kn">import</span> <span class="nn">re</span>
+
+<span class="n">_strf</span> <span class="o">=</span> <span class="s">&quot;%Y%m</span><span class="si">%d</span><span class="s">%H%M%S</span><span class="si">%f</span><span class="s">&quot;</span>
+<span class="n">_reabs</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s">&quot;^\d{20}$&quot;</span><span class="p">)</span>
+<span class="n">_rerel</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s">&quot;^(?P&lt;time&gt;\d+(.\d+)?)(?P&lt;units&gt;h|m|s|ms|us)$&quot;</span><span class="p">)</span>
+
+<span class="c"># Work around to fix &quot;ImportError: Failed to import _strptime because the import lock is held by another thread.&quot;</span>
+<span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="s">&quot;20120807124732894211&quot;</span><span class="p">,</span> <span class="n">_strf</span><span class="p">)</span>
+
+<div class="viewcode-block" id="stformat"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.timefuncs.stformat">[docs]</a><span class="k">def</span> <span class="nf">stformat</span><span class="p">(</span><span class="n">sdate</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot; Constructs a datetime object from a string date with</span>
+<span class="sd">    format YYYYMMddHHMMSSffff </span>
+
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="k">return</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">sdate</span><span class="p">,</span> <span class="n">_strf</span><span class="p">)</span><span class="o">.</span><span class="n">date</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="tsformat"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.timefuncs.tsformat">[docs]</a><span class="k">def</span> <span class="nf">tsformat</span><span class="p">(</span><span class="n">date</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot; Formats a datetime object to a string with format YYYYMMddHHMMSSffff.</span>
+<span class="sd">    If no date is given, the current date is used.</span>
+<span class="sd">    </span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="k">if</span> <span class="ow">not</span> <span class="n">date</span><span class="p">:</span>
+        <span class="n">date</span> <span class="o">=</span> <span class="n">tnow</span><span class="p">()</span>
+
+    <span class="k">return</span> <span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="n">_strf</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="tnow"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.timefuncs.tnow">[docs]</a><span class="k">def</span> <span class="nf">tnow</span><span class="p">():</span>
+    <span class="sd">&quot;&quot;&quot; Returns datetime object with the current time &quot;&quot;&quot;</span>
+    <span class="k">return</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
+</div>
+<div class="viewcode-block" id="tdiff"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.timefuncs.tdiff">[docs]</a><span class="k">def</span> <span class="nf">tdiff</span><span class="p">(</span><span class="n">date1</span><span class="p">,</span> <span class="n">date2</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot; Returns difference ( date1 - date2 ) as a datetime object,</span>
+<span class="sd">    where date1 and date 2 are datetime objects </span>
+<span class="sd">    </span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="k">return</span> <span class="n">date1</span> <span class="o">-</span> <span class="n">date2</span>
+</div>
+<span class="k">def</span> <span class="nf">_get_total_seconds</span><span class="p">(</span><span class="n">td</span><span class="p">):</span> 
+    <span class="k">return</span> <span class="p">(</span><span class="n">td</span><span class="o">.</span><span class="n">microseconds</span> <span class="o">+</span> <span class="p">(</span><span class="n">td</span><span class="o">.</span><span class="n">seconds</span> <span class="o">+</span> <span class="n">td</span><span class="o">.</span><span class="n">days</span> <span class="o">*</span> <span class="mi">24</span> <span class="o">*</span> <span class="mi">3600</span><span class="p">)</span> <span class="o">*</span> <span class="mf">1e6</span><span class="p">)</span> <span class="o">/</span> <span class="mf">1e6</span>
+
+<div class="viewcode-block" id="tdiffsec"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.timefuncs.tdiffsec">[docs]</a><span class="k">def</span> <span class="nf">tdiffsec</span><span class="p">(</span><span class="n">date1</span><span class="p">,</span> <span class="n">date2</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot; Returns the date difference ( date1 - date2 ) in seconds,</span>
+<span class="sd">    where date1 and date 2 are datetime objects </span>
+<span class="sd">    </span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">diff</span> <span class="o">=</span> <span class="n">tdiff</span><span class="p">(</span><span class="n">date1</span><span class="p">,</span> <span class="n">date2</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">_get_total_seconds</span><span class="p">(</span><span class="n">diff</span><span class="p">)</span>
+</div>
+<div class="viewcode-block" id="stabsformat"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.timefuncs.stabsformat">[docs]</a><span class="k">def</span> <span class="nf">stabsformat</span><span class="p">(</span><span class="n">sdate</span><span class="p">,</span> <span class="n">dbase</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot; Constructs a datetime object from a string date.</span>
+<span class="sd">    The string date can be expressed as an absolute date</span>
+<span class="sd">    ( i.e. format YYYYMMddHHMMSSffff ) or as a relative time</span>
+<span class="sd">    ( e.g. format &#39;5m&#39; or &#39;10s&#39;). </span>
+<span class="sd">    If the date is a relative time and the dbase parameter </span>
+<span class="sd">    is given (dbase must be datetime object), the returned</span>
+<span class="sd">    date will be dbase + sdate. If dbase is None, </span>
+<span class="sd">    current time will be used instead as base time.</span>
+
+<span class="sd">    :param date : string date  </span>
+<span class="sd">    :type date : date </span>
+
+<span class="sd">    &quot;&quot;&quot;</span>
+
+    <span class="c"># No date given, return current datetime</span>
+    <span class="k">if</span> <span class="ow">not</span> <span class="n">sdate</span><span class="p">:</span>
+        <span class="k">return</span> <span class="n">tnow</span><span class="p">()</span>
+
+    <span class="c"># Absolute date is given</span>
+    <span class="k">if</span> <span class="n">_reabs</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">sdate</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">stformat</span><span class="p">(</span><span class="n">sdate</span><span class="p">)</span>
+
+    <span class="c"># Relative time is given</span>
+    <span class="n">m</span> <span class="o">=</span> <span class="n">_rerel</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">sdate</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">m</span><span class="p">:</span>
+        <span class="n">time</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">m</span><span class="o">.</span><span class="n">groupdict</span><span class="p">()[</span><span class="s">&#39;time&#39;</span><span class="p">])</span>
+        <span class="n">units</span> <span class="o">=</span> <span class="n">m</span><span class="o">.</span><span class="n">groupdict</span><span class="p">()[</span><span class="s">&#39;units&#39;</span><span class="p">]</span>
+        <span class="k">if</span> <span class="n">units</span> <span class="o">==</span> <span class="s">&#39;h&#39;</span><span class="p">:</span>
+            <span class="n">delta</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span> <span class="o">=</span> <span class="n">time</span><span class="p">)</span> 
+        <span class="k">elif</span> <span class="n">units</span> <span class="o">==</span> <span class="s">&#39;m&#39;</span><span class="p">:</span>
+            <span class="n">delta</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">minutes</span> <span class="o">=</span> <span class="n">time</span><span class="p">)</span> 
+        <span class="k">elif</span> <span class="n">units</span> <span class="o">==</span> <span class="s">&#39;s&#39;</span><span class="p">:</span>
+            <span class="n">delta</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">seconds</span> <span class="o">=</span> <span class="n">time</span><span class="p">)</span> 
+        <span class="k">elif</span> <span class="n">units</span> <span class="o">==</span> <span class="s">&#39;ms&#39;</span><span class="p">:</span>
+            <span class="n">delta</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">microseconds</span> <span class="o">=</span> <span class="p">(</span><span class="n">time</span><span class="o">*</span><span class="mi">1000</span><span class="p">))</span> 
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">delta</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">microseconds</span> <span class="o">=</span> <span class="n">time</span><span class="p">)</span>
+        
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">dbase</span><span class="p">:</span>
+            <span class="n">dbase</span> <span class="o">=</span> <span class="n">tnow</span><span class="p">()</span>
+
+        <span class="k">return</span> <span class="n">dbase</span> <span class="o">+</span> <span class="n">delta</span>
+
+    <span class="k">return</span> <span class="bp">None</span>
+</div>
+<div class="viewcode-block" id="compute_delay_ms"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.timefuncs.compute_delay_ms">[docs]</a><span class="k">def</span> <span class="nf">compute_delay_ms</span><span class="p">(</span><span class="n">timestamp2</span><span class="p">,</span> <span class="n">timestamp1</span><span class="p">):</span>
+    <span class="n">d1</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">fromtimestamp</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">timestamp1</span><span class="p">))</span>
+    <span class="n">d2</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">fromtimestamp</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">timestamp2</span><span class="p">))</span>
+    <span class="n">delay</span> <span class="o">=</span> <span class="n">d2</span> <span class="o">-</span> <span class="n">d1</span>
+
+    <span class="c"># round up resolution - round up to miliseconds</span>
+    <span class="k">return</span> <span class="n">delay</span><span class="o">.</span><span class="n">total_seconds</span><span class="p">()</span> <span class="o">*</span> <span class="mi">1000</span>
+</pre></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_sources/_layout/modules.txt b/doc/sphinx/_build/html/_sources/_layout/modules.txt
new file mode 100644 (file)
index 0000000..6486b2c
--- /dev/null
@@ -0,0 +1,7 @@
+nepi
+====
+
+.. toctree::
+   :maxdepth: 4
+
+   nepi
diff --git a/doc/sphinx/_build/html/_sources/_layout/nepi.data.processing.ccn.txt b/doc/sphinx/_build/html/_sources/_layout/nepi.data.processing.ccn.txt
new file mode 100644 (file)
index 0000000..4b3bb6b
--- /dev/null
@@ -0,0 +1,22 @@
+nepi.data.processing.ccn package
+================================
+
+Submodules
+----------
+
+nepi.data.processing.ccn.parser module
+--------------------------------------
+
+.. automodule:: nepi.data.processing.ccn.parser
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: nepi.data.processing.ccn
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_build/html/_sources/_layout/nepi.data.processing.ping.txt b/doc/sphinx/_build/html/_sources/_layout/nepi.data.processing.ping.txt
new file mode 100644 (file)
index 0000000..56d3574
--- /dev/null
@@ -0,0 +1,22 @@
+nepi.data.processing.ping package
+=================================
+
+Submodules
+----------
+
+nepi.data.processing.ping.parser module
+---------------------------------------
+
+.. automodule:: nepi.data.processing.ping.parser
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: nepi.data.processing.ping
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_build/html/_sources/_layout/nepi.data.processing.txt b/doc/sphinx/_build/html/_sources/_layout/nepi.data.processing.txt
new file mode 100644 (file)
index 0000000..6f22a0f
--- /dev/null
@@ -0,0 +1,18 @@
+nepi.data.processing package
+============================
+
+Subpackages
+-----------
+
+.. toctree::
+
+    nepi.data.processing.ccn
+    nepi.data.processing.ping
+
+Module contents
+---------------
+
+.. automodule:: nepi.data.processing
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_build/html/_sources/_layout/nepi.data.txt b/doc/sphinx/_build/html/_sources/_layout/nepi.data.txt
new file mode 100644 (file)
index 0000000..2841cdc
--- /dev/null
@@ -0,0 +1,17 @@
+nepi.data package
+=================
+
+Subpackages
+-----------
+
+.. toctree::
+
+    nepi.data.processing
+
+Module contents
+---------------
+
+.. automodule:: nepi.data
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_build/html/_sources/_layout/nepi.execution.txt b/doc/sphinx/_build/html/_sources/_layout/nepi.execution.txt
new file mode 100644 (file)
index 0000000..c8f46ae
--- /dev/null
@@ -0,0 +1,70 @@
+nepi.execution package
+======================
+
+Submodules
+----------
+
+nepi.execution.attribute module
+-------------------------------
+
+.. automodule:: nepi.execution.attribute
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.execution.ec module
+------------------------
+
+.. automodule:: nepi.execution.ec
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.execution.resource module
+------------------------------
+
+.. automodule:: nepi.execution.resource
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.execution.runner module
+----------------------------
+
+.. automodule:: nepi.execution.runner
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.execution.scheduler module
+-------------------------------
+
+.. automodule:: nepi.execution.scheduler
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.execution.tags module
+--------------------------
+
+.. automodule:: nepi.execution.tags
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.execution.trace module
+---------------------------
+
+.. automodule:: nepi.execution.trace
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: nepi.execution
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_build/html/_sources/_layout/nepi.resources.all.txt b/doc/sphinx/_build/html/_sources/_layout/nepi.resources.all.txt
new file mode 100644 (file)
index 0000000..5945900
--- /dev/null
@@ -0,0 +1,22 @@
+nepi.resources.all package
+==========================
+
+Submodules
+----------
+
+nepi.resources.all.collector module
+-----------------------------------
+
+.. automodule:: nepi.resources.all.collector
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: nepi.resources.all
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_build/html/_sources/_layout/nepi.resources.linux.ccn.txt b/doc/sphinx/_build/html/_sources/_layout/nepi.resources.linux.ccn.txt
new file mode 100644 (file)
index 0000000..871cb33
--- /dev/null
@@ -0,0 +1,94 @@
+nepi.resources.linux.ccn package
+================================
+
+Submodules
+----------
+
+nepi.resources.linux.ccn.ccnapplication module
+----------------------------------------------
+
+.. automodule:: nepi.resources.linux.ccn.ccnapplication
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ccn.ccncat module
+--------------------------------------
+
+.. automodule:: nepi.resources.linux.ccn.ccncat
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ccn.ccncontent module
+------------------------------------------
+
+.. automodule:: nepi.resources.linux.ccn.ccncontent
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ccn.ccnd module
+------------------------------------
+
+.. automodule:: nepi.resources.linux.ccn.ccnd
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ccn.ccnpeek module
+---------------------------------------
+
+.. automodule:: nepi.resources.linux.ccn.ccnpeek
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ccn.ccnping module
+---------------------------------------
+
+.. automodule:: nepi.resources.linux.ccn.ccnping
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ccn.ccnpingserver module
+---------------------------------------------
+
+.. automodule:: nepi.resources.linux.ccn.ccnpingserver
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ccn.ccnpoke module
+---------------------------------------
+
+.. automodule:: nepi.resources.linux.ccn.ccnpoke
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ccn.ccnr module
+------------------------------------
+
+.. automodule:: nepi.resources.linux.ccn.ccnr
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ccn.fibentry module
+----------------------------------------
+
+.. automodule:: nepi.resources.linux.ccn.fibentry
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: nepi.resources.linux.ccn
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_build/html/_sources/_layout/nepi.resources.linux.netns.txt b/doc/sphinx/_build/html/_sources/_layout/nepi.resources.linux.netns.txt
new file mode 100644 (file)
index 0000000..a20d910
--- /dev/null
@@ -0,0 +1,30 @@
+nepi.resources.linux.netns package
+==================================
+
+Submodules
+----------
+
+nepi.resources.linux.netns.netnsclient module
+---------------------------------------------
+
+.. automodule:: nepi.resources.linux.netns.netnsclient
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.netns.netnsemulation module
+------------------------------------------------
+
+.. automodule:: nepi.resources.linux.netns.netnsemulation
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: nepi.resources.linux.netns
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_build/html/_sources/_layout/nepi.resources.linux.ns3.ccn.txt b/doc/sphinx/_build/html/_sources/_layout/nepi.resources.linux.ns3.ccn.txt
new file mode 100644 (file)
index 0000000..a6e0868
--- /dev/null
@@ -0,0 +1,70 @@
+nepi.resources.linux.ns3.ccn package
+====================================
+
+Submodules
+----------
+
+nepi.resources.linux.ns3.ccn.ns3ccncatdceapplication module
+-----------------------------------------------------------
+
+.. automodule:: nepi.resources.linux.ns3.ccn.ns3ccncatdceapplication
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ns3.ccn.ns3ccndceapplication module
+--------------------------------------------------------
+
+.. automodule:: nepi.resources.linux.ns3.ccn.ns3ccndceapplication
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ns3.ccn.ns3ccnddceapplication module
+---------------------------------------------------------
+
+.. automodule:: nepi.resources.linux.ns3.ccn.ns3ccnddceapplication
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ns3.ccn.ns3ccnpeekdceapplication module
+------------------------------------------------------------
+
+.. automodule:: nepi.resources.linux.ns3.ccn.ns3ccnpeekdceapplication
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ns3.ccn.ns3ccnpokedceapplication module
+------------------------------------------------------------
+
+.. automodule:: nepi.resources.linux.ns3.ccn.ns3ccnpokedceapplication
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ns3.ccn.ns3ccnrdceapplication module
+---------------------------------------------------------
+
+.. automodule:: nepi.resources.linux.ns3.ccn.ns3ccnrdceapplication
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ns3.ccn.ns3fibentrydceapplication module
+-------------------------------------------------------------
+
+.. automodule:: nepi.resources.linux.ns3.ccn.ns3fibentrydceapplication
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: nepi.resources.linux.ns3.ccn
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_build/html/_sources/_layout/nepi.resources.linux.ns3.txt b/doc/sphinx/_build/html/_sources/_layout/nepi.resources.linux.ns3.txt
new file mode 100644 (file)
index 0000000..341946e
--- /dev/null
@@ -0,0 +1,69 @@
+nepi.resources.linux.ns3 package
+================================
+
+Subpackages
+-----------
+
+.. toctree::
+
+    nepi.resources.linux.ns3.ccn
+
+Submodules
+----------
+
+nepi.resources.linux.ns3.fdudptunnel module
+-------------------------------------------
+
+.. automodule:: nepi.resources.linux.ns3.fdudptunnel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ns3.ns3client module
+-----------------------------------------
+
+.. automodule:: nepi.resources.linux.ns3.ns3client
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ns3.ns3dceapplication module
+-------------------------------------------------
+
+.. automodule:: nepi.resources.linux.ns3.ns3dceapplication
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ns3.ns3pingdceapplication module
+-----------------------------------------------------
+
+.. automodule:: nepi.resources.linux.ns3.ns3pingdceapplication
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ns3.ns3simulation module
+---------------------------------------------
+
+.. automodule:: nepi.resources.linux.ns3.ns3simulation
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ns3.tuntapfdlink module
+--------------------------------------------
+
+.. automodule:: nepi.resources.linux.ns3.tuntapfdlink
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: nepi.resources.linux.ns3
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_build/html/_sources/_layout/nepi.resources.linux.txt b/doc/sphinx/_build/html/_sources/_layout/nepi.resources.linux.txt
new file mode 100644 (file)
index 0000000..40e4309
--- /dev/null
@@ -0,0 +1,167 @@
+nepi.resources.linux package
+============================
+
+Subpackages
+-----------
+
+.. toctree::
+
+    nepi.resources.linux.ccn
+    nepi.resources.linux.netns
+    nepi.resources.linux.ns3
+
+Submodules
+----------
+
+nepi.resources.linux.application module
+---------------------------------------
+
+.. automodule:: nepi.resources.linux.application
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.channel module
+-----------------------------------
+
+.. automodule:: nepi.resources.linux.channel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.debfuncs module
+------------------------------------
+
+.. automodule:: nepi.resources.linux.debfuncs
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.gretunnel module
+-------------------------------------
+
+.. automodule:: nepi.resources.linux.gretunnel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.interface module
+-------------------------------------
+
+.. automodule:: nepi.resources.linux.interface
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.mtr module
+-------------------------------
+
+.. automodule:: nepi.resources.linux.mtr
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.node module
+--------------------------------
+
+.. automodule:: nepi.resources.linux.node
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.nping module
+---------------------------------
+
+.. automodule:: nepi.resources.linux.nping
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ping module
+--------------------------------
+
+.. automodule:: nepi.resources.linux.ping
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.route module
+---------------------------------
+
+.. automodule:: nepi.resources.linux.route
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.rpmfuncs module
+------------------------------------
+
+.. automodule:: nepi.resources.linux.rpmfuncs
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.tap module
+-------------------------------
+
+.. automodule:: nepi.resources.linux.tap
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.tcpdump module
+-----------------------------------
+
+.. automodule:: nepi.resources.linux.tcpdump
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.traceroute module
+--------------------------------------
+
+.. automodule:: nepi.resources.linux.traceroute
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.tun module
+-------------------------------
+
+.. automodule:: nepi.resources.linux.tun
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.tunnel module
+----------------------------------
+
+.. automodule:: nepi.resources.linux.tunnel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.udptest module
+-----------------------------------
+
+.. automodule:: nepi.resources.linux.udptest
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.udptunnel module
+-------------------------------------
+
+.. automodule:: nepi.resources.linux.udptunnel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: nepi.resources.linux
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_build/html/_sources/_layout/nepi.resources.netns.txt b/doc/sphinx/_build/html/_sources/_layout/nepi.resources.netns.txt
new file mode 100644 (file)
index 0000000..eacf7f3
--- /dev/null
@@ -0,0 +1,118 @@
+nepi.resources.netns package
+============================
+
+Submodules
+----------
+
+nepi.resources.netns.netnsapplication module
+--------------------------------------------
+
+.. automodule:: nepi.resources.netns.netnsapplication
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.netns.netnsbase module
+-------------------------------------
+
+.. automodule:: nepi.resources.netns.netnsbase
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.netns.netnsclient module
+---------------------------------------
+
+.. automodule:: nepi.resources.netns.netnsclient
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.netns.netnsemulation module
+------------------------------------------
+
+.. automodule:: nepi.resources.netns.netnsemulation
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.netns.netnsinterface module
+------------------------------------------
+
+.. automodule:: nepi.resources.netns.netnsinterface
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.netns.netnsipv4address module
+--------------------------------------------
+
+.. automodule:: nepi.resources.netns.netnsipv4address
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.netns.netnsnode module
+-------------------------------------
+
+.. automodule:: nepi.resources.netns.netnsnode
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.netns.netnsnodeinterface module
+----------------------------------------------
+
+.. automodule:: nepi.resources.netns.netnsnodeinterface
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.netns.netnsroute module
+--------------------------------------
+
+.. automodule:: nepi.resources.netns.netnsroute
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.netns.netnsserver module
+---------------------------------------
+
+.. automodule:: nepi.resources.netns.netnsserver
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.netns.netnsswitch module
+---------------------------------------
+
+.. automodule:: nepi.resources.netns.netnsswitch
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.netns.netnswrapper module
+----------------------------------------
+
+.. automodule:: nepi.resources.netns.netnswrapper
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.netns.netnswrapper_debug module
+----------------------------------------------
+
+.. automodule:: nepi.resources.netns.netnswrapper_debug
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: nepi.resources.netns
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_build/html/_sources/_layout/nepi.resources.ns3.classes.txt b/doc/sphinx/_build/html/_sources/_layout/nepi.resources.ns3.classes.txt
new file mode 100644 (file)
index 0000000..e489b71
--- /dev/null
@@ -0,0 +1,862 @@
+nepi.resources.ns3.classes package
+==================================
+
+Submodules
+----------
+
+nepi.resources.ns3.classes.aarf_wifi_manager module
+---------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.aarf_wifi_manager
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.aarfcd_wifi_manager module
+-----------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.aarfcd_wifi_manager
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.adhoc_wifi_mac module
+------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.adhoc_wifi_mac
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.aloha_noack_net_device module
+--------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.aloha_noack_net_device
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.amrr_wifi_manager module
+---------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.amrr_wifi_manager
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.ap_wifi_mac module
+---------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.ap_wifi_mac
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.arf_wifi_manager module
+--------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.arf_wifi_manager
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.arp_l3protocol module
+------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.arp_l3protocol
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.base_station_net_device module
+---------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.base_station_net_device
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.binary_error_model module
+----------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.binary_error_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.binary_error_sixlow_model module
+-----------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.binary_error_sixlow_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.bridge_channel module
+------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.bridge_channel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.bridge_net_device module
+---------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.bridge_net_device
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.bulk_send_application module
+-------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.bulk_send_application
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.burst_error_model module
+---------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.burst_error_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.cara_wifi_manager module
+---------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.cara_wifi_manager
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.constant_acceleration_mobility_model module
+----------------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.constant_acceleration_mobility_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.constant_position_mobility_model module
+------------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.constant_position_mobility_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.constant_rate_wifi_manager module
+------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.constant_rate_wifi_manager
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.constant_speed_propagation_delay_model module
+------------------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.constant_speed_propagation_delay_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.constant_velocity_mobility_model module
+------------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.constant_velocity_mobility_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.cost231propagation_loss_model module
+---------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.cost231propagation_loss_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.csma_channel module
+----------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.csma_channel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.csma_net_device module
+-------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.csma_net_device
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.drop_tail_queue module
+-------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.drop_tail_queue
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.dsrdsr_routing module
+------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.dsrdsr_routing
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.emu_net_device module
+------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.emu_net_device
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.error_channel module
+-----------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.error_channel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.error_channel_sixlow module
+------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.error_channel_sixlow
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.error_net_device module
+--------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.error_net_device
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.fd_net_device module
+-----------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.fd_net_device
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.fixed_rss_loss_model module
+------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.fixed_rss_loss_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.friis_propagation_loss_model module
+--------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.friis_propagation_loss_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.gauss_markov_mobility_model module
+-------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.gauss_markov_mobility_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.hierarchical_mobility_model module
+-------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.hierarchical_mobility_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.hybrid_buildings_propagation_loss_model module
+-------------------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.hybrid_buildings_propagation_loss_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.icmpv4l4protocol module
+--------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.icmpv4l4protocol
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.icmpv6l4protocol module
+--------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.icmpv6l4protocol
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.ideal_wifi_manager module
+----------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.ideal_wifi_manager
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.ipv4l3protocol module
+------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.ipv4l3protocol
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.itu_r1411los_propagation_loss_model module
+---------------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.itu_r1411los_propagation_loss_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.itu_r1411nlos_over_rooftop_propagation_loss_model module
+-----------------------------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.itu_r1411nlos_over_rooftop_propagation_loss_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.jakes_propagation_loss_model module
+--------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.jakes_propagation_loss_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.kun2600mhz_propagation_loss_model module
+-------------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.kun2600mhz_propagation_loss_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.list_error_model module
+--------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.list_error_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.log_distance_propagation_loss_model module
+---------------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.log_distance_propagation_loss_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.loopback_net_device module
+-----------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.loopback_net_device
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.lr_wpan_net_device module
+----------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.lr_wpan_net_device
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.lte_enb_net_device module
+----------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.lte_enb_net_device
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.lte_simple_net_device module
+-------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.lte_simple_net_device
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.lte_ue_net_device module
+---------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.lte_ue_net_device
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.matrix_propagation_loss_model module
+---------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.matrix_propagation_loss_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.mesh_point_device module
+---------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.mesh_point_device
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.mesh_wifi_interface_mac module
+---------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.mesh_wifi_interface_mac
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.minstrel_wifi_manager module
+-------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.minstrel_wifi_manager
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.multi_model_spectrum_channel module
+--------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.multi_model_spectrum_channel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.nakagami_propagation_loss_model module
+-----------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.nakagami_propagation_loss_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.nist_error_rate_model module
+-------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.nist_error_rate_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.node module
+--------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.node
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.non_communicating_net_device module
+--------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.non_communicating_net_device
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.ocb_wifi_mac module
+----------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.ocb_wifi_mac
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.oh_buildings_propagation_loss_model module
+---------------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.oh_buildings_propagation_loss_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.okumura_hata_propagation_loss_model module
+---------------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.okumura_hata_propagation_loss_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.on_off_application module
+----------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.on_off_application
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.onoe_wifi_manager module
+---------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.onoe_wifi_manager
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.packet_sink module
+---------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.packet_sink
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.ping6 module
+---------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.ping6
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.point_to_point_channel module
+--------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.point_to_point_channel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.point_to_point_net_device module
+-----------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.point_to_point_net_device
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.point_to_point_remote_channel module
+---------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.point_to_point_remote_channel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.radvd module
+---------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.radvd
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.random_direction2d_mobility_model module
+-------------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.random_direction2d_mobility_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.random_propagation_delay_model module
+----------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.random_propagation_delay_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.random_propagation_loss_model module
+---------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.random_propagation_loss_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.random_walk2d_mobility_model module
+--------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.random_walk2d_mobility_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.random_waypoint_mobility_model module
+----------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.random_waypoint_mobility_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.range_propagation_loss_model module
+--------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.range_propagation_loss_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.rate_error_model module
+--------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.rate_error_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.receive_list_error_model module
+----------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.receive_list_error_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.red_queue module
+-------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.red_queue
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.rraa_wifi_manager module
+---------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.rraa_wifi_manager
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.simple_channel module
+------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.simple_channel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.simple_net_device module
+---------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.simple_net_device
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.single_model_spectrum_channel module
+---------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.single_model_spectrum_channel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.six_low_pan_net_device module
+--------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.six_low_pan_net_device
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.sta_wifi_mac module
+----------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.sta_wifi_mac
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.steady_state_random_waypoint_mobility_model module
+-----------------------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.steady_state_random_waypoint_mobility_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.subscriber_station_net_device module
+---------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.subscriber_station_net_device
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.tap_bridge module
+--------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.tap_bridge
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.tcp_l4protocol module
+------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.tcp_l4protocol
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.three_log_distance_propagation_loss_model module
+---------------------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.three_log_distance_propagation_loss_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.two_ray_ground_propagation_loss_model module
+-----------------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.two_ray_ground_propagation_loss_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.uan_channel module
+---------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.uan_channel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.udp_client module
+--------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.udp_client
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.udp_echo_client module
+-------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.udp_echo_client
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.udp_echo_server module
+-------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.udp_echo_server
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.udp_l4protocol module
+------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.udp_l4protocol
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.udp_server module
+--------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.udp_server
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.udp_trace_client module
+--------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.udp_trace_client
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.v4ping module
+----------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.v4ping
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.virtual_net_device module
+----------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.virtual_net_device
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.waypoint_mobility_model module
+---------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.waypoint_mobility_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.wifi_net_device module
+-------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.wifi_net_device
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.yans_error_rate_model module
+-------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.yans_error_rate_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.yans_wifi_channel module
+---------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.yans_wifi_channel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.yans_wifi_phy module
+-----------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.yans_wifi_phy
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: nepi.resources.ns3.classes
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_build/html/_sources/_layout/nepi.resources.ns3.txt b/doc/sphinx/_build/html/_sources/_layout/nepi.resources.ns3.txt
new file mode 100644 (file)
index 0000000..94356ab
--- /dev/null
@@ -0,0 +1,269 @@
+nepi.resources.ns3 package
+==========================
+
+Subpackages
+-----------
+
+.. toctree::
+
+    nepi.resources.ns3.classes
+
+Submodules
+----------
+
+nepi.resources.ns3.ns3application module
+----------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3application
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3arpl3protocol module
+------------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3arpl3protocol
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3base module
+---------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3base
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3ccndceapplication module
+----------------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3ccndceapplication
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3channel module
+------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3channel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3client module
+-----------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3client
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3dceapplication module
+-------------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3dceapplication
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3dcehelper module
+--------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3dcehelper
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3errormodel module
+---------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3errormodel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3errorratemodel module
+-------------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3errorratemodel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3fdnetdevice module
+----------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3fdnetdevice
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3icmpv4l4protocol module
+---------------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3icmpv4l4protocol
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3ipv4l3protocol module
+-------------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3ipv4l3protocol
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3mobilitymodel module
+------------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3mobilitymodel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3netdevice module
+--------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3netdevice
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3node module
+---------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3node
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3pipechanel module
+---------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3pipechanel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3propagationdelaymodel module
+--------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3propagationdelaymodel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3propagationlossmodel module
+-------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3propagationlossmodel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3queue module
+----------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3queue
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3route module
+----------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3route
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3server module
+-----------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3server
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3simulation module
+---------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3simulation
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3wifichannel module
+----------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3wifichannel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3wifimac module
+------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3wifimac
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3wifinetdevice module
+------------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3wifinetdevice
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3wifiphy module
+------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3wifiphy
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3wifiremotestationmanager module
+-----------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3wifiremotestationmanager
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3wrapper module
+------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3wrapper
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3wrapper_debug module
+------------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3wrapper_debug
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.resource_manager_generator module
+----------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.resource_manager_generator
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: nepi.resources.ns3
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_build/html/_sources/_layout/nepi.resources.omf.txt b/doc/sphinx/_build/html/_sources/_layout/nepi.resources.omf.txt
new file mode 100644 (file)
index 0000000..7dd222e
--- /dev/null
@@ -0,0 +1,118 @@
+nepi.resources.omf package
+==========================
+
+Submodules
+----------
+
+nepi.resources.omf.application module
+-------------------------------------
+
+.. automodule:: nepi.resources.omf.application
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.omf.channel module
+---------------------------------
+
+.. automodule:: nepi.resources.omf.channel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.omf.interface module
+-----------------------------------
+
+.. automodule:: nepi.resources.omf.interface
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.omf.messages_5_4 module
+--------------------------------------
+
+.. automodule:: nepi.resources.omf.messages_5_4
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.omf.messages_6 module
+------------------------------------
+
+.. automodule:: nepi.resources.omf.messages_6
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.omf.node module
+------------------------------
+
+.. automodule:: nepi.resources.omf.node
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.omf.omf5_api module
+----------------------------------
+
+.. automodule:: nepi.resources.omf.omf5_api
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.omf.omf6_api module
+----------------------------------
+
+.. automodule:: nepi.resources.omf.omf6_api
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.omf.omf6_parser module
+-------------------------------------
+
+.. automodule:: nepi.resources.omf.omf6_parser
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.omf.omf_api_factory module
+-----------------------------------------
+
+.. automodule:: nepi.resources.omf.omf_api_factory
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.omf.omf_client module
+------------------------------------
+
+.. automodule:: nepi.resources.omf.omf_client
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.omf.omf_resource module
+--------------------------------------
+
+.. automodule:: nepi.resources.omf.omf_resource
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.omf.wilabt_node module
+-------------------------------------
+
+.. automodule:: nepi.resources.omf.wilabt_node
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: nepi.resources.omf
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_build/html/_sources/_layout/nepi.resources.planetlab.ns3.txt b/doc/sphinx/_build/html/_sources/_layout/nepi.resources.planetlab.ns3.txt
new file mode 100644 (file)
index 0000000..a8759d4
--- /dev/null
@@ -0,0 +1,30 @@
+nepi.resources.planetlab.ns3 package
+====================================
+
+Submodules
+----------
+
+nepi.resources.planetlab.ns3.fdudptunnel module
+-----------------------------------------------
+
+.. automodule:: nepi.resources.planetlab.ns3.fdudptunnel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.planetlab.ns3.tuntapfdlink module
+------------------------------------------------
+
+.. automodule:: nepi.resources.planetlab.ns3.tuntapfdlink
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: nepi.resources.planetlab.ns3
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_build/html/_sources/_layout/nepi.resources.planetlab.openvswitch.txt b/doc/sphinx/_build/html/_sources/_layout/nepi.resources.planetlab.openvswitch.txt
new file mode 100644 (file)
index 0000000..edbb21a
--- /dev/null
@@ -0,0 +1,30 @@
+nepi.resources.planetlab.openvswitch package
+============================================
+
+Submodules
+----------
+
+nepi.resources.planetlab.openvswitch.ovs module
+-----------------------------------------------
+
+.. automodule:: nepi.resources.planetlab.openvswitch.ovs
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.planetlab.openvswitch.ovsport module
+---------------------------------------------------
+
+.. automodule:: nepi.resources.planetlab.openvswitch.ovsport
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: nepi.resources.planetlab.openvswitch
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_build/html/_sources/_layout/nepi.resources.planetlab.txt b/doc/sphinx/_build/html/_sources/_layout/nepi.resources.planetlab.txt
new file mode 100644 (file)
index 0000000..9fde12c
--- /dev/null
@@ -0,0 +1,70 @@
+nepi.resources.planetlab package
+================================
+
+Subpackages
+-----------
+
+.. toctree::
+
+    nepi.resources.planetlab.ns3
+    nepi.resources.planetlab.openvswitch
+
+Submodules
+----------
+
+nepi.resources.planetlab.node module
+------------------------------------
+
+.. automodule:: nepi.resources.planetlab.node
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.planetlab.plcapi module
+--------------------------------------
+
+.. automodule:: nepi.resources.planetlab.plcapi
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.planetlab.sfa_node module
+----------------------------------------
+
+.. automodule:: nepi.resources.planetlab.sfa_node
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.planetlab.tap module
+-----------------------------------
+
+.. automodule:: nepi.resources.planetlab.tap
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.planetlab.tun module
+-----------------------------------
+
+.. automodule:: nepi.resources.planetlab.tun
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.planetlab.vroute module
+--------------------------------------
+
+.. automodule:: nepi.resources.planetlab.vroute
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: nepi.resources.planetlab
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_build/html/_sources/_layout/nepi.resources.txt b/doc/sphinx/_build/html/_sources/_layout/nepi.resources.txt
new file mode 100644 (file)
index 0000000..4c1fcfc
--- /dev/null
@@ -0,0 +1,22 @@
+nepi.resources package
+======================
+
+Subpackages
+-----------
+
+.. toctree::
+
+    nepi.resources.all
+    nepi.resources.linux
+    nepi.resources.netns
+    nepi.resources.ns3
+    nepi.resources.omf
+    nepi.resources.planetlab
+
+Module contents
+---------------
+
+.. automodule:: nepi.resources
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_build/html/_sources/_layout/nepi.txt b/doc/sphinx/_build/html/_sources/_layout/nepi.txt
new file mode 100644 (file)
index 0000000..aa1d5d3
--- /dev/null
@@ -0,0 +1,20 @@
+nepi package
+============
+
+Subpackages
+-----------
+
+.. toctree::
+
+    nepi.data
+    nepi.execution
+    nepi.resources
+    nepi.util
+
+Module contents
+---------------
+
+.. automodule:: nepi
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_build/html/_sources/_layout/nepi.util.parsers.txt b/doc/sphinx/_build/html/_sources/_layout/nepi.util.parsers.txt
new file mode 100644 (file)
index 0000000..34888c1
--- /dev/null
@@ -0,0 +1,22 @@
+nepi.util.parsers package
+=========================
+
+Submodules
+----------
+
+nepi.util.parsers.xml_parser module
+-----------------------------------
+
+.. automodule:: nepi.util.parsers.xml_parser
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: nepi.util.parsers
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_build/html/_sources/_layout/nepi.util.txt b/doc/sphinx/_build/html/_sources/_layout/nepi.util.txt
new file mode 100644 (file)
index 0000000..cf0bc63
--- /dev/null
@@ -0,0 +1,141 @@
+nepi.util package
+=================
+
+Subpackages
+-----------
+
+.. toctree::
+
+    nepi.util.parsers
+
+Submodules
+----------
+
+nepi.util.environ module
+------------------------
+
+.. automodule:: nepi.util.environ
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.util.execfuncs module
+--------------------------
+
+.. automodule:: nepi.util.execfuncs
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.util.guid module
+---------------------
+
+.. automodule:: nepi.util.guid
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.util.logger module
+-----------------------
+
+.. automodule:: nepi.util.logger
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.util.manifoldapi module
+----------------------------
+
+.. automodule:: nepi.util.manifoldapi
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.util.netgraph module
+-------------------------
+
+.. automodule:: nepi.util.netgraph
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.util.parallel module
+-------------------------
+
+.. automodule:: nepi.util.parallel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.util.plotter module
+------------------------
+
+.. automodule:: nepi.util.plotter
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.util.rmatcher module
+-------------------------
+
+.. automodule:: nepi.util.rmatcher
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.util.serializer module
+---------------------------
+
+.. automodule:: nepi.util.serializer
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.util.sfaapi module
+-----------------------
+
+.. automodule:: nepi.util.sfaapi
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.util.sfarspec_proc module
+------------------------------
+
+.. automodule:: nepi.util.sfarspec_proc
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.util.sshfuncs module
+-------------------------
+
+.. automodule:: nepi.util.sshfuncs
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.util.statfuncs module
+--------------------------
+
+.. automodule:: nepi.util.statfuncs
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.util.timefuncs module
+--------------------------
+
+.. automodule:: nepi.util.timefuncs
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: nepi.util
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_build/html/_sources/index.txt b/doc/sphinx/_build/html/_sources/index.txt
new file mode 100644 (file)
index 0000000..6cc4c83
--- /dev/null
@@ -0,0 +1,91 @@
+.. Nepi documentation master file, created by
+   sphinx-quickstart on Tue Mar 26 11:36:35 2013.
+   You can adapt this file completely to your liking, but it should at least
+   contain the root `toctree` directive.
+
+NEPI modules 
+============
+
+This page documents the NEPI source code. It presents the NEPI core modules, the Platform resource modules (i.e. drivers to manage platforms), and other miscellaneous classes.
+
+Core modules
+------------
+
+  * ExperimentController API
+
+    * :mod:`ExperimentController <nepi.execution.ec>`
+
+  * ResourceManager API
+
+    * :mod:`ResourceManager <nepi.execution.resource>`
+  
+  * Attribute module
+    
+    * :mod:`Attribute <nepi.execution.attribute>`
+  
+  * Trace module
+    
+    * :mod:`Trace <nepi.execution.trace>`
+  
+  * Runner module
+
+    * :mod:`ExperimentRunner <nepi.execution.runner>`
+  
+  * Scheduler module
+
+    * :mod:`Scheduler <nepi.execution.scheduler>`
+
+
+
+Platform modules
+----------------
+
+  * Live Experiments
+
+    * Linux testbeds
+
+      * :mod:`Linux <nepi.resources.linux>`
+
+    * PlanetLab testbeds
+      * :mod:`PlanetLab <nepi.resources.planetlab>`
+
+    * OMF testbed
+
+      * :mod:`OMF <nepi.resources.omf>`
+
+  * Simulated Experiments
+
+    * ns-3 simulator
+
+      * :mod:`ns-3 <nepi.resources.ns3>`    
+
+      * :mod:`ns-3 in Linux hosts <nepi.resources.linux.ns3>`    
+  
+  * Emulated Experiments
+
+    * DCE emulation extension
+
+      * :mod:`DCE Application <nepi.resources.ns3.ns3dceapplication>`    
+
+      * :mod:`DCE Linux Application <nepi.resources.linux.ns3.ns3dceapplication>`    
+    
+    * NetNS emulator
+
+      * :mod:`NetNS <nepi.resources.netns>`    
+
+Miscellaneous modules
+---------------------
+
+      * :mod:`Util <nepi.util>`    
+
+.. toctree::
+
+
+Indices and tables
+==================
+
+* :ref:`genindex`
+* :ref:`modindex`
+* :ref:`search`
+
diff --git a/doc/sphinx/_build/html/_static/ajax-loader.gif b/doc/sphinx/_build/html/_static/ajax-loader.gif
new file mode 100644 (file)
index 0000000..61faf8c
Binary files /dev/null and b/doc/sphinx/_build/html/_static/ajax-loader.gif differ
diff --git a/doc/sphinx/_build/html/_static/basic.css b/doc/sphinx/_build/html/_static/basic.css
new file mode 100644 (file)
index 0000000..967e36c
--- /dev/null
@@ -0,0 +1,537 @@
+/*
+ * basic.css
+ * ~~~~~~~~~
+ *
+ * Sphinx stylesheet -- basic theme.
+ *
+ * :copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+/* -- main layout ----------------------------------------------------------- */
+
+div.clearer {
+    clear: both;
+}
+
+/* -- relbar ---------------------------------------------------------------- */
+
+div.related {
+    width: 100%;
+    font-size: 90%;
+}
+
+div.related h3 {
+    display: none;
+}
+
+div.related ul {
+    margin: 0;
+    padding: 0 0 0 10px;
+    list-style: none;
+}
+
+div.related li {
+    display: inline;
+}
+
+div.related li.right {
+    float: right;
+    margin-right: 5px;
+}
+
+/* -- sidebar --------------------------------------------------------------- */
+
+div.sphinxsidebarwrapper {
+    padding: 10px 5px 0 10px;
+}
+
+div.sphinxsidebar {
+    float: left;
+    width: 230px;
+    margin-left: -100%;
+    font-size: 90%;
+}
+
+div.sphinxsidebar ul {
+    list-style: none;
+}
+
+div.sphinxsidebar ul ul,
+div.sphinxsidebar ul.want-points {
+    margin-left: 20px;
+    list-style: square;
+}
+
+div.sphinxsidebar ul ul {
+    margin-top: 0;
+    margin-bottom: 0;
+}
+
+div.sphinxsidebar form {
+    margin-top: 10px;
+}
+
+div.sphinxsidebar input {
+    border: 1px solid #98dbcc;
+    font-family: sans-serif;
+    font-size: 1em;
+}
+
+div.sphinxsidebar #searchbox input[type="text"] {
+    width: 170px;
+}
+
+div.sphinxsidebar #searchbox input[type="submit"] {
+    width: 30px;
+}
+
+img {
+    border: 0;
+    max-width: 100%;
+}
+
+/* -- search page ----------------------------------------------------------- */
+
+ul.search {
+    margin: 10px 0 0 20px;
+    padding: 0;
+}
+
+ul.search li {
+    padding: 5px 0 5px 20px;
+    background-image: url(file.png);
+    background-repeat: no-repeat;
+    background-position: 0 7px;
+}
+
+ul.search li a {
+    font-weight: bold;
+}
+
+ul.search li div.context {
+    color: #888;
+    margin: 2px 0 0 30px;
+    text-align: left;
+}
+
+ul.keywordmatches li.goodmatch a {
+    font-weight: bold;
+}
+
+/* -- index page ------------------------------------------------------------ */
+
+table.contentstable {
+    width: 90%;
+}
+
+table.contentstable p.biglink {
+    line-height: 150%;
+}
+
+a.biglink {
+    font-size: 1.3em;
+}
+
+span.linkdescr {
+    font-style: italic;
+    padding-top: 5px;
+    font-size: 90%;
+}
+
+/* -- general index --------------------------------------------------------- */
+
+table.indextable {
+    width: 100%;
+}
+
+table.indextable td {
+    text-align: left;
+    vertical-align: top;
+}
+
+table.indextable dl, table.indextable dd {
+    margin-top: 0;
+    margin-bottom: 0;
+}
+
+table.indextable tr.pcap {
+    height: 10px;
+}
+
+table.indextable tr.cap {
+    margin-top: 10px;
+    background-color: #f2f2f2;
+}
+
+img.toggler {
+    margin-right: 3px;
+    margin-top: 3px;
+    cursor: pointer;
+}
+
+div.modindex-jumpbox {
+    border-top: 1px solid #ddd;
+    border-bottom: 1px solid #ddd;
+    margin: 1em 0 1em 0;
+    padding: 0.4em;
+}
+
+div.genindex-jumpbox {
+    border-top: 1px solid #ddd;
+    border-bottom: 1px solid #ddd;
+    margin: 1em 0 1em 0;
+    padding: 0.4em;
+}
+
+/* -- general body styles --------------------------------------------------- */
+
+a.headerlink {
+    visibility: hidden;
+}
+
+h1:hover > a.headerlink,
+h2:hover > a.headerlink,
+h3:hover > a.headerlink,
+h4:hover > a.headerlink,
+h5:hover > a.headerlink,
+h6:hover > a.headerlink,
+dt:hover > a.headerlink {
+    visibility: visible;
+}
+
+div.body p.caption {
+    text-align: inherit;
+}
+
+div.body td {
+    text-align: left;
+}
+
+.field-list ul {
+    padding-left: 1em;
+}
+
+.first {
+    margin-top: 0 !important;
+}
+
+p.rubric {
+    margin-top: 30px;
+    font-weight: bold;
+}
+
+img.align-left, .figure.align-left, object.align-left {
+    clear: left;
+    float: left;
+    margin-right: 1em;
+}
+
+img.align-right, .figure.align-right, object.align-right {
+    clear: right;
+    float: right;
+    margin-left: 1em;
+}
+
+img.align-center, .figure.align-center, object.align-center {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+.align-left {
+    text-align: left;
+}
+
+.align-center {
+    text-align: center;
+}
+
+.align-right {
+    text-align: right;
+}
+
+/* -- sidebars -------------------------------------------------------------- */
+
+div.sidebar {
+    margin: 0 0 0.5em 1em;
+    border: 1px solid #ddb;
+    padding: 7px 7px 0 7px;
+    background-color: #ffe;
+    width: 40%;
+    float: right;
+}
+
+p.sidebar-title {
+    font-weight: bold;
+}
+
+/* -- topics ---------------------------------------------------------------- */
+
+div.topic {
+    border: 1px solid #ccc;
+    padding: 7px 7px 0 7px;
+    margin: 10px 0 10px 0;
+}
+
+p.topic-title {
+    font-size: 1.1em;
+    font-weight: bold;
+    margin-top: 10px;
+}
+
+/* -- admonitions ----------------------------------------------------------- */
+
+div.admonition {
+    margin-top: 10px;
+    margin-bottom: 10px;
+    padding: 7px;
+}
+
+div.admonition dt {
+    font-weight: bold;
+}
+
+div.admonition dl {
+    margin-bottom: 0;
+}
+
+p.admonition-title {
+    margin: 0px 10px 5px 0px;
+    font-weight: bold;
+}
+
+div.body p.centered {
+    text-align: center;
+    margin-top: 25px;
+}
+
+/* -- tables ---------------------------------------------------------------- */
+
+table.docutils {
+    border: 0;
+    border-collapse: collapse;
+}
+
+table.docutils td, table.docutils th {
+    padding: 1px 8px 1px 5px;
+    border-top: 0;
+    border-left: 0;
+    border-right: 0;
+    border-bottom: 1px solid #aaa;
+}
+
+table.field-list td, table.field-list th {
+    border: 0 !important;
+}
+
+table.footnote td, table.footnote th {
+    border: 0 !important;
+}
+
+th {
+    text-align: left;
+    padding-right: 5px;
+}
+
+table.citation {
+    border-left: solid 1px gray;
+    margin-left: 1px;
+}
+
+table.citation td {
+    border-bottom: none;
+}
+
+/* -- other body styles ----------------------------------------------------- */
+
+ol.arabic {
+    list-style: decimal;
+}
+
+ol.loweralpha {
+    list-style: lower-alpha;
+}
+
+ol.upperalpha {
+    list-style: upper-alpha;
+}
+
+ol.lowerroman {
+    list-style: lower-roman;
+}
+
+ol.upperroman {
+    list-style: upper-roman;
+}
+
+dl {
+    margin-bottom: 15px;
+}
+
+dd p {
+    margin-top: 0px;
+}
+
+dd ul, dd table {
+    margin-bottom: 10px;
+}
+
+dd {
+    margin-top: 3px;
+    margin-bottom: 10px;
+    margin-left: 30px;
+}
+
+dt:target, .highlighted {
+    background-color: #fbe54e;
+}
+
+dl.glossary dt {
+    font-weight: bold;
+    font-size: 1.1em;
+}
+
+.field-list ul {
+    margin: 0;
+    padding-left: 1em;
+}
+
+.field-list p {
+    margin: 0;
+}
+
+.optional {
+    font-size: 1.3em;
+}
+
+.versionmodified {
+    font-style: italic;
+}
+
+.system-message {
+    background-color: #fda;
+    padding: 5px;
+    border: 3px solid red;
+}
+
+.footnote:target  {
+    background-color: #ffa;
+}
+
+.line-block {
+    display: block;
+    margin-top: 1em;
+    margin-bottom: 1em;
+}
+
+.line-block .line-block {
+    margin-top: 0;
+    margin-bottom: 0;
+    margin-left: 1.5em;
+}
+
+.guilabel, .menuselection {
+    font-family: sans-serif;
+}
+
+.accelerator {
+    text-decoration: underline;
+}
+
+.classifier {
+    font-style: oblique;
+}
+
+abbr, acronym {
+    border-bottom: dotted 1px;
+    cursor: help;
+}
+
+/* -- code displays --------------------------------------------------------- */
+
+pre {
+    overflow: auto;
+    overflow-y: hidden;  /* fixes display issues on Chrome browsers */
+}
+
+td.linenos pre {
+    padding: 5px 0px;
+    border: 0;
+    background-color: transparent;
+    color: #aaa;
+}
+
+table.highlighttable {
+    margin-left: 0.5em;
+}
+
+table.highlighttable td {
+    padding: 0 0.5em 0 0.5em;
+}
+
+tt.descname {
+    background-color: transparent;
+    font-weight: bold;
+    font-size: 1.2em;
+}
+
+tt.descclassname {
+    background-color: transparent;
+}
+
+tt.xref, a tt {
+    background-color: transparent;
+    font-weight: bold;
+}
+
+h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt {
+    background-color: transparent;
+}
+
+.viewcode-link {
+    float: right;
+}
+
+.viewcode-back {
+    float: right;
+    font-family: sans-serif;
+}
+
+div.viewcode-block:target {
+    margin: -1px -10px;
+    padding: 0 10px;
+}
+
+/* -- math display ---------------------------------------------------------- */
+
+img.math {
+    vertical-align: middle;
+}
+
+div.body div.math p {
+    text-align: center;
+}
+
+span.eqno {
+    float: right;
+}
+
+/* -- printout stylesheet --------------------------------------------------- */
+
+@media print {
+    div.document,
+    div.documentwrapper,
+    div.bodywrapper {
+        margin: 0 !important;
+        width: 100%;
+    }
+
+    div.sphinxsidebar,
+    div.related,
+    div.footer,
+    #top-link {
+        display: none;
+    }
+}
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_static/comment-bright.png b/doc/sphinx/_build/html/_static/comment-bright.png
new file mode 100644 (file)
index 0000000..551517b
Binary files /dev/null and b/doc/sphinx/_build/html/_static/comment-bright.png differ
diff --git a/doc/sphinx/_build/html/_static/comment-close.png b/doc/sphinx/_build/html/_static/comment-close.png
new file mode 100644 (file)
index 0000000..09b54be
Binary files /dev/null and b/doc/sphinx/_build/html/_static/comment-close.png differ
diff --git a/doc/sphinx/_build/html/_static/comment.png b/doc/sphinx/_build/html/_static/comment.png
new file mode 100644 (file)
index 0000000..92feb52
Binary files /dev/null and b/doc/sphinx/_build/html/_static/comment.png differ
diff --git a/doc/sphinx/_build/html/_static/contents.png b/doc/sphinx/_build/html/_static/contents.png
new file mode 100644 (file)
index 0000000..7fb8215
Binary files /dev/null and b/doc/sphinx/_build/html/_static/contents.png differ
diff --git a/doc/sphinx/_build/html/_static/doctools.js b/doc/sphinx/_build/html/_static/doctools.js
new file mode 100644 (file)
index 0000000..c5455c9
--- /dev/null
@@ -0,0 +1,238 @@
+/*
+ * doctools.js
+ * ~~~~~~~~~~~
+ *
+ * Sphinx JavaScript utilities for all documentation.
+ *
+ * :copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+/**
+ * select a different prefix for underscore
+ */
+$u = _.noConflict();
+
+/**
+ * make the code below compatible with browsers without
+ * an installed firebug like debugger
+if (!window.console || !console.firebug) {
+  var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
+    "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace",
+    "profile", "profileEnd"];
+  window.console = {};
+  for (var i = 0; i < names.length; ++i)
+    window.console[names[i]] = function() {};
+}
+ */
+
+/**
+ * small helper function to urldecode strings
+ */
+jQuery.urldecode = function(x) {
+  return decodeURIComponent(x).replace(/\+/g, ' ');
+};
+
+/**
+ * small helper function to urlencode strings
+ */
+jQuery.urlencode = encodeURIComponent;
+
+/**
+ * This function returns the parsed url parameters of the
+ * current request. Multiple values per key are supported,
+ * it will always return arrays of strings for the value parts.
+ */
+jQuery.getQueryParameters = function(s) {
+  if (typeof s == 'undefined')
+    s = document.location.search;
+  var parts = s.substr(s.indexOf('?') + 1).split('&');
+  var result = {};
+  for (var i = 0; i < parts.length; i++) {
+    var tmp = parts[i].split('=', 2);
+    var key = jQuery.urldecode(tmp[0]);
+    var value = jQuery.urldecode(tmp[1]);
+    if (key in result)
+      result[key].push(value);
+    else
+      result[key] = [value];
+  }
+  return result;
+};
+
+/**
+ * highlight a given string on a jquery object by wrapping it in
+ * span elements with the given class name.
+ */
+jQuery.fn.highlightText = function(text, className) {
+  function highlight(node) {
+    if (node.nodeType == 3) {
+      var val = node.nodeValue;
+      var pos = val.toLowerCase().indexOf(text);
+      if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) {
+        var span = document.createElement("span");
+        span.className = className;
+        span.appendChild(document.createTextNode(val.substr(pos, text.length)));
+        node.parentNode.insertBefore(span, node.parentNode.insertBefore(
+          document.createTextNode(val.substr(pos + text.length)),
+          node.nextSibling));
+        node.nodeValue = val.substr(0, pos);
+      }
+    }
+    else if (!jQuery(node).is("button, select, textarea")) {
+      jQuery.each(node.childNodes, function() {
+        highlight(this);
+      });
+    }
+  }
+  return this.each(function() {
+    highlight(this);
+  });
+};
+
+/**
+ * Small JavaScript module for the documentation.
+ */
+var Documentation = {
+
+  init : function() {
+    this.fixFirefoxAnchorBug();
+    this.highlightSearchWords();
+    this.initIndexTable();
+  },
+
+  /**
+   * i18n support
+   */
+  TRANSLATIONS : {},
+  PLURAL_EXPR : function(n) { return n == 1 ? 0 : 1; },
+  LOCALE : 'unknown',
+
+  // gettext and ngettext don't access this so that the functions
+  // can safely bound to a different name (_ = Documentation.gettext)
+  gettext : function(string) {
+    var translated = Documentation.TRANSLATIONS[string];
+    if (typeof translated == 'undefined')
+      return string;
+    return (typeof translated == 'string') ? translated : translated[0];
+  },
+
+  ngettext : function(singular, plural, n) {
+    var translated = Documentation.TRANSLATIONS[singular];
+    if (typeof translated == 'undefined')
+      return (n == 1) ? singular : plural;
+    return translated[Documentation.PLURALEXPR(n)];
+  },
+
+  addTranslations : function(catalog) {
+    for (var key in catalog.messages)
+      this.TRANSLATIONS[key] = catalog.messages[key];
+    this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')');
+    this.LOCALE = catalog.locale;
+  },
+
+  /**
+   * add context elements like header anchor links
+   */
+  addContextElements : function() {
+    $('div[id] > :header:first').each(function() {
+      $('<a class="headerlink">\u00B6</a>').
+      attr('href', '#' + this.id).
+      attr('title', _('Permalink to this headline')).
+      appendTo(this);
+    });
+    $('dt[id]').each(function() {
+      $('<a class="headerlink">\u00B6</a>').
+      attr('href', '#' + this.id).
+      attr('title', _('Permalink to this definition')).
+      appendTo(this);
+    });
+  },
+
+  /**
+   * workaround a firefox stupidity
+   */
+  fixFirefoxAnchorBug : function() {
+    if (document.location.hash && $.browser.mozilla)
+      window.setTimeout(function() {
+        document.location.href += '';
+      }, 10);
+  },
+
+  /**
+   * highlight the search words provided in the url in the text
+   */
+  highlightSearchWords : function() {
+    var params = $.getQueryParameters();
+    var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
+    if (terms.length) {
+      var body = $('div.body');
+      if (!body.length) {
+        body = $('body');
+      }
+      window.setTimeout(function() {
+        $.each(terms, function() {
+          body.highlightText(this.toLowerCase(), 'highlighted');
+        });
+      }, 10);
+      $('<p class="highlight-link"><a href="javascript:Documentation.' +
+        'hideSearchWords()">' + _('Hide Search Matches') + '</a></p>')
+          .appendTo($('#searchbox'));
+    }
+  },
+
+  /**
+   * init the domain index toggle buttons
+   */
+  initIndexTable : function() {
+    var togglers = $('img.toggler').click(function() {
+      var src = $(this).attr('src');
+      var idnum = $(this).attr('id').substr(7);
+      $('tr.cg-' + idnum).toggle();
+      if (src.substr(-9) == 'minus.png')
+        $(this).attr('src', src.substr(0, src.length-9) + 'plus.png');
+      else
+        $(this).attr('src', src.substr(0, src.length-8) + 'minus.png');
+    }).css('display', '');
+    if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) {
+        togglers.click();
+    }
+  },
+
+  /**
+   * helper function to hide the search marks again
+   */
+  hideSearchWords : function() {
+    $('#searchbox .highlight-link').fadeOut(300);
+    $('span.highlighted').removeClass('highlighted');
+  },
+
+  /**
+   * make the url absolute
+   */
+  makeURL : function(relativeURL) {
+    return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL;
+  },
+
+  /**
+   * get the current relative url
+   */
+  getCurrentURL : function() {
+    var path = document.location.pathname;
+    var parts = path.split(/\//);
+    $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() {
+      if (this == '..')
+        parts.pop();
+    });
+    var url = parts.join('/');
+    return path.substring(url.lastIndexOf('/') + 1, path.length - 1);
+  }
+};
+
+// quick alias for translations
+_ = Documentation.gettext;
+
+$(document).ready(function() {
+  Documentation.init();
+});
diff --git a/doc/sphinx/_build/html/_static/down-pressed.png b/doc/sphinx/_build/html/_static/down-pressed.png
new file mode 100644 (file)
index 0000000..6f7ad78
Binary files /dev/null and b/doc/sphinx/_build/html/_static/down-pressed.png differ
diff --git a/doc/sphinx/_build/html/_static/down.png b/doc/sphinx/_build/html/_static/down.png
new file mode 100644 (file)
index 0000000..3003a88
Binary files /dev/null and b/doc/sphinx/_build/html/_static/down.png differ
diff --git a/doc/sphinx/_build/html/_static/file.png b/doc/sphinx/_build/html/_static/file.png
new file mode 100644 (file)
index 0000000..d18082e
Binary files /dev/null and b/doc/sphinx/_build/html/_static/file.png differ
diff --git a/doc/sphinx/_build/html/_static/jquery.js b/doc/sphinx/_build/html/_static/jquery.js
new file mode 100644 (file)
index 0000000..1258119
--- /dev/null
@@ -0,0 +1,9404 @@
+/*!
+ * jQuery JavaScript Library v1.7.2
+ * http://jquery.com/
+ *
+ * Copyright 2011, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Thu Aug  1 23:20:30 BRT 2013
+ */
+(function( window, undefined ) {
+
+// Use the correct document accordingly with window argument (sandbox)
+var document = window.document,
+       navigator = window.navigator,
+       location = window.location;
+var jQuery = (function() {
+
+// Define a local copy of jQuery
+var jQuery = function( selector, context ) {
+               // The jQuery object is actually just the init constructor 'enhanced'
+               return new jQuery.fn.init( selector, context, rootjQuery );
+       },
+
+       // Map over jQuery in case of overwrite
+       _jQuery = window.jQuery,
+
+       // Map over the $ in case of overwrite
+       _$ = window.$,
+
+       // A central reference to the root jQuery(document)
+       rootjQuery,
+
+       // A simple way to check for HTML strings or ID strings
+       // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+       quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
+
+       // Check if a string has a non-whitespace character in it
+       rnotwhite = /\S/,
+
+       // Used for trimming whitespace
+       trimLeft = /^\s+/,
+       trimRight = /\s+$/,
+
+       // Match a standalone tag
+       rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
+
+       // JSON RegExp
+       rvalidchars = /^[\],:{}\s]*$/,
+       rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
+       rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
+       rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
+
+       // Useragent RegExp
+       rwebkit = /(webkit)[ \/]([\w.]+)/,
+       ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
+       rmsie = /(msie) ([\w.]+)/,
+       rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
+
+       // Matches dashed string for camelizing
+       rdashAlpha = /-([a-z]|[0-9])/ig,
+       rmsPrefix = /^-ms-/,
+
+       // Used by jQuery.camelCase as callback to replace()
+       fcamelCase = function( all, letter ) {
+               return ( letter + "" ).toUpperCase();
+       },
+
+       // Keep a UserAgent string for use with jQuery.browser
+       userAgent = navigator.userAgent,
+
+       // For matching the engine and version of the browser
+       browserMatch,
+
+       // The deferred used on DOM ready
+       readyList,
+
+       // The ready event handler
+       DOMContentLoaded,
+
+       // Save a reference to some core methods
+       toString = Object.prototype.toString,
+       hasOwn = Object.prototype.hasOwnProperty,
+       push = Array.prototype.push,
+       slice = Array.prototype.slice,
+       trim = String.prototype.trim,
+       indexOf = Array.prototype.indexOf,
+
+       // [[Class]] -> type pairs
+       class2type = {};
+
+jQuery.fn = jQuery.prototype = {
+       constructor: jQuery,
+       init: function( selector, context, rootjQuery ) {
+               var match, elem, ret, doc;
+
+               // Handle $(""), $(null), or $(undefined)
+               if ( !selector ) {
+                       return this;
+               }
+
+               // Handle $(DOMElement)
+               if ( selector.nodeType ) {
+                       this.context = this[0] = selector;
+                       this.length = 1;
+                       return this;
+               }
+
+               // The body element only exists once, optimize finding it
+               if ( selector === "body" && !context && document.body ) {
+                       this.context = document;
+                       this[0] = document.body;
+                       this.selector = selector;
+                       this.length = 1;
+                       return this;
+               }
+
+               // Handle HTML strings
+               if ( typeof selector === "string" ) {
+                       // Are we dealing with HTML string or an ID?
+                       if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
+                               // Assume that strings that start and end with <> are HTML and skip the regex check
+                               match = [ null, selector, null ];
+
+                       } else {
+                               match = quickExpr.exec( selector );
+                       }
+
+                       // Verify a match, and that no context was specified for #id
+                       if ( match && (match[1] || !context) ) {
+
+                               // HANDLE: $(html) -> $(array)
+                               if ( match[1] ) {
+                                       context = context instanceof jQuery ? context[0] : context;
+                                       doc = ( context ? context.ownerDocument || context : document );
+
+                                       // If a single string is passed in and it's a single tag
+                                       // just do a createElement and skip the rest
+                                       ret = rsingleTag.exec( selector );
+
+                                       if ( ret ) {
+                                               if ( jQuery.isPlainObject( context ) ) {
+                                                       selector = [ document.createElement( ret[1] ) ];
+                                                       jQuery.fn.attr.call( selector, context, true );
+
+                                               } else {
+                                                       selector = [ doc.createElement( ret[1] ) ];
+                                               }
+
+                                       } else {
+                                               ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
+                                               selector = ( ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment ).childNodes;
+                                       }
+
+                                       return jQuery.merge( this, selector );
+
+                               // HANDLE: $("#id")
+                               } else {
+                                       elem = document.getElementById( match[2] );
+
+                                       // Check parentNode to catch when Blackberry 4.6 returns
+                                       // nodes that are no longer in the document #6963
+                                       if ( elem && elem.parentNode ) {
+                                               // Handle the case where IE and Opera return items
+                                               // by name instead of ID
+                                               if ( elem.id !== match[2] ) {
+                                                       return rootjQuery.find( selector );
+                                               }
+
+                                               // Otherwise, we inject the element directly into the jQuery object
+                                               this.length = 1;
+                                               this[0] = elem;
+                                       }
+
+                                       this.context = document;
+                                       this.selector = selector;
+                                       return this;
+                               }
+
+                       // HANDLE: $(expr, $(...))
+                       } else if ( !context || context.jquery ) {
+                               return ( context || rootjQuery ).find( selector );
+
+                       // HANDLE: $(expr, context)
+                       // (which is just equivalent to: $(context).find(expr)
+                       } else {
+                               return this.constructor( context ).find( selector );
+                       }
+
+               // HANDLE: $(function)
+               // Shortcut for document ready
+               } else if ( jQuery.isFunction( selector ) ) {
+                       return rootjQuery.ready( selector );
+               }
+
+               if ( selector.selector !== undefined ) {
+                       this.selector = selector.selector;
+                       this.context = selector.context;
+               }
+
+               return jQuery.makeArray( selector, this );
+       },
+
+       // Start with an empty selector
+       selector: "",
+
+       // The current version of jQuery being used
+       jquery: "1.7.2",
+
+       // The default length of a jQuery object is 0
+       length: 0,
+
+       // The number of elements contained in the matched element set
+       size: function() {
+               return this.length;
+       },
+
+       toArray: function() {
+               return slice.call( this, 0 );
+       },
+
+       // Get the Nth element in the matched element set OR
+       // Get the whole matched element set as a clean array
+       get: function( num ) {
+               return num == null ?
+
+                       // Return a 'clean' array
+                       this.toArray() :
+
+                       // Return just the object
+                       ( num < 0 ? this[ this.length + num ] : this[ num ] );
+       },
+
+       // Take an array of elements and push it onto the stack
+       // (returning the new matched element set)
+       pushStack: function( elems, name, selector ) {
+               // Build a new jQuery matched element set
+               var ret = this.constructor();
+
+               if ( jQuery.isArray( elems ) ) {
+                       push.apply( ret, elems );
+
+               } else {
+                       jQuery.merge( ret, elems );
+               }
+
+               // Add the old object onto the stack (as a reference)
+               ret.prevObject = this;
+
+               ret.context = this.context;
+
+               if ( name === "find" ) {
+                       ret.selector = this.selector + ( this.selector ? " " : "" ) + selector;
+               } else if ( name ) {
+                       ret.selector = this.selector + "." + name + "(" + selector + ")";
+               }
+
+               // Return the newly-formed element set
+               return ret;
+       },
+
+       // Execute a callback for every element in the matched set.
+       // (You can seed the arguments with an array of args, but this is
+       // only used internally.)
+       each: function( callback, args ) {
+               return jQuery.each( this, callback, args );
+       },
+
+       ready: function( fn ) {
+               // Attach the listeners
+               jQuery.bindReady();
+
+               // Add the callback
+               readyList.add( fn );
+
+               return this;
+       },
+
+       eq: function( i ) {
+               i = +i;
+               return i === -1 ?
+                       this.slice( i ) :
+                       this.slice( i, i + 1 );
+       },
+
+       first: function() {
+               return this.eq( 0 );
+       },
+
+       last: function() {
+               return this.eq( -1 );
+       },
+
+       slice: function() {
+               return this.pushStack( slice.apply( this, arguments ),
+                       "slice", slice.call(arguments).join(",") );
+       },
+
+       map: function( callback ) {
+               return this.pushStack( jQuery.map(this, function( elem, i ) {
+                       return callback.call( elem, i, elem );
+               }));
+       },
+
+       end: function() {
+               return this.prevObject || this.constructor(null);
+       },
+
+       // For internal use only.
+       // Behaves like an Array's method, not like a jQuery method.
+       push: push,
+       sort: [].sort,
+       splice: [].splice
+};
+
+// Give the init function the jQuery prototype for later instantiation
+jQuery.fn.init.prototype = jQuery.fn;
+
+jQuery.extend = jQuery.fn.extend = function() {
+       var options, name, src, copy, copyIsArray, clone,
+               target = arguments[0] || {},
+               i = 1,
+               length = arguments.length,
+               deep = false;
+
+       // Handle a deep copy situation
+       if ( typeof target === "boolean" ) {
+               deep = target;
+               target = arguments[1] || {};
+               // skip the boolean and the target
+               i = 2;
+       }
+
+       // Handle case when target is a string or something (possible in deep copy)
+       if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+               target = {};
+       }
+
+       // extend jQuery itself if only one argument is passed
+       if ( length === i ) {
+               target = this;
+               --i;
+       }
+
+       for ( ; i < length; i++ ) {
+               // Only deal with non-null/undefined values
+               if ( (options = arguments[ i ]) != null ) {
+                       // Extend the base object
+                       for ( name in options ) {
+                               src = target[ name ];
+                               copy = options[ name ];
+
+                               // Prevent never-ending loop
+                               if ( target === copy ) {
+                                       continue;
+                               }
+
+                               // Recurse if we're merging plain objects or arrays
+                               if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
+                                       if ( copyIsArray ) {
+                                               copyIsArray = false;
+                                               clone = src && jQuery.isArray(src) ? src : [];
+
+                                       } else {
+                                               clone = src && jQuery.isPlainObject(src) ? src : {};
+                                       }
+
+                                       // Never move original objects, clone them
+                                       target[ name ] = jQuery.extend( deep, clone, copy );
+
+                               // Don't bring in undefined values
+                               } else if ( copy !== undefined ) {
+                                       target[ name ] = copy;
+                               }
+                       }
+               }
+       }
+
+       // Return the modified object
+       return target;
+};
+
+jQuery.extend({
+       noConflict: function( deep ) {
+               if ( window.$ === jQuery ) {
+                       window.$ = _$;
+               }
+
+               if ( deep && window.jQuery === jQuery ) {
+                       window.jQuery = _jQuery;
+               }
+
+               return jQuery;
+       },
+
+       // Is the DOM ready to be used? Set to true once it occurs.
+       isReady: false,
+
+       // A counter to track how many items to wait for before
+       // the ready event fires. See #6781
+       readyWait: 1,
+
+       // Hold (or release) the ready event
+       holdReady: function( hold ) {
+               if ( hold ) {
+                       jQuery.readyWait++;
+               } else {
+                       jQuery.ready( true );
+               }
+       },
+
+       // Handle when the DOM is ready
+       ready: function( wait ) {
+               // Either a released hold or an DOMready/load event and not yet ready
+               if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {
+                       // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+                       if ( !document.body ) {
+                               return setTimeout( jQuery.ready, 1 );
+                       }
+
+                       // Remember that the DOM is ready
+                       jQuery.isReady = true;
+
+                       // If a normal DOM Ready event fired, decrement, and wait if need be
+                       if ( wait !== true && --jQuery.readyWait > 0 ) {
+                               return;
+                       }
+
+                       // If there are functions bound, to execute
+                       readyList.fireWith( document, [ jQuery ] );
+
+                       // Trigger any bound ready events
+                       if ( jQuery.fn.trigger ) {
+                               jQuery( document ).trigger( "ready" ).off( "ready" );
+                       }
+               }
+       },
+
+       bindReady: function() {
+               if ( readyList ) {
+                       return;
+               }
+
+               readyList = jQuery.Callbacks( "once memory" );
+
+               // Catch cases where $(document).ready() is called after the
+               // browser event has already occurred.
+               if ( document.readyState === "complete" ) {
+                       // Handle it asynchronously to allow scripts the opportunity to delay ready
+                       return setTimeout( jQuery.ready, 1 );
+               }
+
+               // Mozilla, Opera and webkit nightlies currently support this event
+               if ( document.addEventListener ) {
+                       // Use the handy event callback
+                       document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+
+                       // A fallback to window.onload, that will always work
+                       window.addEventListener( "load", jQuery.ready, false );
+
+               // If IE event model is used
+               } else if ( document.attachEvent ) {
+                       // ensure firing before onload,
+                       // maybe late but safe also for iframes
+                       document.attachEvent( "onreadystatechange", DOMContentLoaded );
+
+                       // A fallback to window.onload, that will always work
+                       window.attachEvent( "onload", jQuery.ready );
+
+                       // If IE and not a frame
+                       // continually check to see if the document is ready
+                       var toplevel = false;
+
+                       try {
+                               toplevel = window.frameElement == null;
+                       } catch(e) {}
+
+                       if ( document.documentElement.doScroll && toplevel ) {
+                               doScrollCheck();
+                       }
+               }
+       },
+
+       // See test/unit/core.js for details concerning isFunction.
+       // Since version 1.3, DOM methods and functions like alert
+       // aren't supported. They return false on IE (#2968).
+       isFunction: function( obj ) {
+               return jQuery.type(obj) === "function";
+       },
+
+       isArray: Array.isArray || function( obj ) {
+               return jQuery.type(obj) === "array";
+       },
+
+       isWindow: function( obj ) {
+               return obj != null && obj == obj.window;
+       },
+
+       isNumeric: function( obj ) {
+               return !isNaN( parseFloat(obj) ) && isFinite( obj );
+       },
+
+       type: function( obj ) {
+               return obj == null ?
+                       String( obj ) :
+                       class2type[ toString.call(obj) ] || "object";
+       },
+
+       isPlainObject: function( obj ) {
+               // Must be an Object.
+               // Because of IE, we also have to check the presence of the constructor property.
+               // Make sure that DOM nodes and window objects don't pass through, as well
+               if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+                       return false;
+               }
+
+               try {
+                       // Not own constructor property must be Object
+                       if ( obj.constructor &&
+                               !hasOwn.call(obj, "constructor") &&
+                               !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
+                               return false;
+                       }
+               } catch ( e ) {
+                       // IE8,9 Will throw exceptions on certain host objects #9897
+                       return false;
+               }
+
+               // Own properties are enumerated firstly, so to speed up,
+               // if last one is own, then all properties are own.
+
+               var key;
+               for ( key in obj ) {}
+
+               return key === undefined || hasOwn.call( obj, key );
+       },
+
+       isEmptyObject: function( obj ) {
+               for ( var name in obj ) {
+                       return false;
+               }
+               return true;
+       },
+
+       error: function( msg ) {
+               throw new Error( msg );
+       },
+
+       parseJSON: function( data ) {
+               if ( typeof data !== "string" || !data ) {
+                       return null;
+               }
+
+               // Make sure leading/trailing whitespace is removed (IE can't handle it)
+               data = jQuery.trim( data );
+
+               // Attempt to parse using the native JSON parser first
+               if ( window.JSON && window.JSON.parse ) {
+                       return window.JSON.parse( data );
+               }
+
+               // Make sure the incoming data is actual JSON
+               // Logic borrowed from http://json.org/json2.js
+               if ( rvalidchars.test( data.replace( rvalidescape, "@" )
+                       .replace( rvalidtokens, "]" )
+                       .replace( rvalidbraces, "")) ) {
+
+                       return ( new Function( "return " + data ) )();
+
+               }
+               jQuery.error( "Invalid JSON: " + data );
+       },
+
+       // Cross-browser xml parsing
+       parseXML: function( data ) {
+               if ( typeof data !== "string" || !data ) {
+                       return null;
+               }
+               var xml, tmp;
+               try {
+                       if ( window.DOMParser ) { // Standard
+                               tmp = new DOMParser();
+                               xml = tmp.parseFromString( data , "text/xml" );
+                       } else { // IE
+                               xml = new ActiveXObject( "Microsoft.XMLDOM" );
+                               xml.async = "false";
+                               xml.loadXML( data );
+                       }
+               } catch( e ) {
+                       xml = undefined;
+               }
+               if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
+                       jQuery.error( "Invalid XML: " + data );
+               }
+               return xml;
+       },
+
+       noop: function() {},
+
+       // Evaluates a script in a global context
+       // Workarounds based on findings by Jim Driscoll
+       // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
+       globalEval: function( data ) {
+               if ( data && rnotwhite.test( data ) ) {
+                       // We use execScript on Internet Explorer
+                       // We use an anonymous function so that context is window
+                       // rather than jQuery in Firefox
+                       ( window.execScript || function( data ) {
+                               window[ "eval" ].call( window, data );
+                       } )( data );
+               }
+       },
+
+       // Convert dashed to camelCase; used by the css and data modules
+       // Microsoft forgot to hump their vendor prefix (#9572)
+       camelCase: function( string ) {
+               return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+       },
+
+       nodeName: function( elem, name ) {
+               return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
+       },
+
+       // args is for internal usage only
+       each: function( object, callback, args ) {
+               var name, i = 0,
+                       length = object.length,
+                       isObj = length === undefined || jQuery.isFunction( object );
+
+               if ( args ) {
+                       if ( isObj ) {
+                               for ( name in object ) {
+                                       if ( callback.apply( object[ name ], args ) === false ) {
+                                               break;
+                                       }
+                               }
+                       } else {
+                               for ( ; i < length; ) {
+                                       if ( callback.apply( object[ i++ ], args ) === false ) {
+                                               break;
+                                       }
+                               }
+                       }
+
+               // A special, fast, case for the most common use of each
+               } else {
+                       if ( isObj ) {
+                               for ( name in object ) {
+                                       if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
+                                               break;
+                                       }
+                               }
+                       } else {
+                               for ( ; i < length; ) {
+                                       if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
+                                               break;
+                                       }
+                               }
+                       }
+               }
+
+               return object;
+       },
+
+       // Use native String.trim function wherever possible
+       trim: trim ?
+               function( text ) {
+                       return text == null ?
+                               "" :
+                               trim.call( text );
+               } :
+
+               // Otherwise use our own trimming functionality
+               function( text ) {
+                       return text == null ?
+                               "" :
+                               text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
+               },
+
+       // results is for internal usage only
+       makeArray: function( array, results ) {
+               var ret = results || [];
+
+               if ( array != null ) {
+                       // The window, strings (and functions) also have 'length'
+                       // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
+                       var type = jQuery.type( array );
+
+                       if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
+                               push.call( ret, array );
+                       } else {
+                               jQuery.merge( ret, array );
+                       }
+               }
+
+               return ret;
+       },
+
+       inArray: function( elem, array, i ) {
+               var len;
+
+               if ( array ) {
+                       if ( indexOf ) {
+                               return indexOf.call( array, elem, i );
+                       }
+
+                       len = array.length;
+                       i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
+
+                       for ( ; i < len; i++ ) {
+                               // Skip accessing in sparse arrays
+                               if ( i in array && array[ i ] === elem ) {
+                                       return i;
+                               }
+                       }
+               }
+
+               return -1;
+       },
+
+       merge: function( first, second ) {
+               var i = first.length,
+                       j = 0;
+
+               if ( typeof second.length === "number" ) {
+                       for ( var l = second.length; j < l; j++ ) {
+                               first[ i++ ] = second[ j ];
+                       }
+
+               } else {
+                       while ( second[j] !== undefined ) {
+                               first[ i++ ] = second[ j++ ];
+                       }
+               }
+
+               first.length = i;
+
+               return first;
+       },
+
+       grep: function( elems, callback, inv ) {
+               var ret = [], retVal;
+               inv = !!inv;
+
+               // Go through the array, only saving the items
+               // that pass the validator function
+               for ( var i = 0, length = elems.length; i < length; i++ ) {
+                       retVal = !!callback( elems[ i ], i );
+                       if ( inv !== retVal ) {
+                               ret.push( elems[ i ] );
+                       }
+               }
+
+               return ret;
+       },
+
+       // arg is for internal usage only
+       map: function( elems, callback, arg ) {
+               var value, key, ret = [],
+                       i = 0,
+                       length = elems.length,
+                       // jquery objects are treated as arrays
+                       isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
+
+               // Go through the array, translating each of the items to their
+               if ( isArray ) {
+                       for ( ; i < length; i++ ) {
+                               value = callback( elems[ i ], i, arg );
+
+                               if ( value != null ) {
+                                       ret[ ret.length ] = value;
+                               }
+                       }
+
+               // Go through every key on the object,
+               } else {
+                       for ( key in elems ) {
+                               value = callback( elems[ key ], key, arg );
+
+                               if ( value != null ) {
+                                       ret[ ret.length ] = value;
+                               }
+                       }
+               }
+
+               // Flatten any nested arrays
+               return ret.concat.apply( [], ret );
+       },
+
+       // A global GUID counter for objects
+       guid: 1,
+
+       // Bind a function to a context, optionally partially applying any
+       // arguments.
+       proxy: function( fn, context ) {
+               if ( typeof context === "string" ) {
+                       var tmp = fn[ context ];
+                       context = fn;
+                       fn = tmp;
+               }
+
+               // Quick check to determine if target is callable, in the spec
+               // this throws a TypeError, but we will just return undefined.
+               if ( !jQuery.isFunction( fn ) ) {
+                       return undefined;
+               }
+
+               // Simulated bind
+               var args = slice.call( arguments, 2 ),
+                       proxy = function() {
+                               return fn.apply( context, args.concat( slice.call( arguments ) ) );
+                       };
+
+               // Set the guid of unique handler to the same of original handler, so it can be removed
+               proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
+
+               return proxy;
+       },
+
+       // Mutifunctional method to get and set values to a collection
+       // The value/s can optionally be executed if it's a function
+       access: function( elems, fn, key, value, chainable, emptyGet, pass ) {
+               var exec,
+                       bulk = key == null,
+                       i = 0,
+                       length = elems.length;
+
+               // Sets many values
+               if ( key && typeof key === "object" ) {
+                       for ( i in key ) {
+                               jQuery.access( elems, fn, i, key[i], 1, emptyGet, value );
+                       }
+                       chainable = 1;
+
+               // Sets one value
+               } else if ( value !== undefined ) {
+                       // Optionally, function values get executed if exec is true
+                       exec = pass === undefined && jQuery.isFunction( value );
+
+                       if ( bulk ) {
+                               // Bulk operations only iterate when executing function values
+                               if ( exec ) {
+                                       exec = fn;
+                                       fn = function( elem, key, value ) {
+                                               return exec.call( jQuery( elem ), value );
+                                       };
+
+                               // Otherwise they run against the entire set
+                               } else {
+                                       fn.call( elems, value );
+                                       fn = null;
+                               }
+                       }
+
+                       if ( fn ) {
+                               for (; i < length; i++ ) {
+                                       fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
+                               }
+                       }
+
+                       chainable = 1;
+               }
+
+               return chainable ?
+                       elems :
+
+                       // Gets
+                       bulk ?
+                               fn.call( elems ) :
+                               length ? fn( elems[0], key ) : emptyGet;
+       },
+
+       now: function() {
+               return ( new Date() ).getTime();
+       },
+
+       // Use of jQuery.browser is frowned upon.
+       // More details: http://docs.jquery.com/Utilities/jQuery.browser
+       uaMatch: function( ua ) {
+               ua = ua.toLowerCase();
+
+               var match = rwebkit.exec( ua ) ||
+                       ropera.exec( ua ) ||
+                       rmsie.exec( ua ) ||
+                       ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
+                       [];
+
+               return { browser: match[1] || "", version: match[2] || "0" };
+       },
+
+       sub: function() {
+               function jQuerySub( selector, context ) {
+                       return new jQuerySub.fn.init( selector, context );
+               }
+               jQuery.extend( true, jQuerySub, this );
+               jQuerySub.superclass = this;
+               jQuerySub.fn = jQuerySub.prototype = this();
+               jQuerySub.fn.constructor = jQuerySub;
+               jQuerySub.sub = this.sub;
+               jQuerySub.fn.init = function init( selector, context ) {
+                       if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
+                               context = jQuerySub( context );
+                       }
+
+                       return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
+               };
+               jQuerySub.fn.init.prototype = jQuerySub.fn;
+               var rootjQuerySub = jQuerySub(document);
+               return jQuerySub;
+       },
+
+       browser: {}
+});
+
+// Populate the class2type map
+jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
+       class2type[ "[object " + name + "]" ] = name.toLowerCase();
+});
+
+browserMatch = jQuery.uaMatch( userAgent );
+if ( browserMatch.browser ) {
+       jQuery.browser[ browserMatch.browser ] = true;
+       jQuery.browser.version = browserMatch.version;
+}
+
+// Deprecated, use jQuery.browser.webkit instead
+if ( jQuery.browser.webkit ) {
+       jQuery.browser.safari = true;
+}
+
+// IE doesn't match non-breaking spaces with \s
+if ( rnotwhite.test( "\xA0" ) ) {
+       trimLeft = /^[\s\xA0]+/;
+       trimRight = /[\s\xA0]+$/;
+}
+
+// All jQuery objects should point back to these
+rootjQuery = jQuery(document);
+
+// Cleanup functions for the document ready method
+if ( document.addEventListener ) {
+       DOMContentLoaded = function() {
+               document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+               jQuery.ready();
+       };
+
+} else if ( document.attachEvent ) {
+       DOMContentLoaded = function() {
+               // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+               if ( document.readyState === "complete" ) {
+                       document.detachEvent( "onreadystatechange", DOMContentLoaded );
+                       jQuery.ready();
+               }
+       };
+}
+
+// The DOM ready check for Internet Explorer
+function doScrollCheck() {
+       if ( jQuery.isReady ) {
+               return;
+       }
+
+       try {
+               // If IE is used, use the trick by Diego Perini
+               // http://javascript.nwbox.com/IEContentLoaded/
+               document.documentElement.doScroll("left");
+       } catch(e) {
+               setTimeout( doScrollCheck, 1 );
+               return;
+       }
+
+       // and execute any waiting functions
+       jQuery.ready();
+}
+
+return jQuery;
+
+})();
+
+
+// String to Object flags format cache
+var flagsCache = {};
+
+// Convert String-formatted flags into Object-formatted ones and store in cache
+function createFlags( flags ) {
+       var object = flagsCache[ flags ] = {},
+               i, length;
+       flags = flags.split( /\s+/ );
+       for ( i = 0, length = flags.length; i < length; i++ ) {
+               object[ flags[i] ] = true;
+       }
+       return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ *     flags:  an optional list of space-separated flags that will change how
+ *                     the callback list behaves
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible flags:
+ *
+ *     once:                   will ensure the callback list can only be fired once (like a Deferred)
+ *
+ *     memory:                 will keep track of previous values and will call any callback added
+ *                                     after the list has been fired right away with the latest "memorized"
+ *                                     values (like a Deferred)
+ *
+ *     unique:                 will ensure a callback can only be added once (no duplicate in the list)
+ *
+ *     stopOnFalse:    interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( flags ) {
+
+       // Convert flags from String-formatted to Object-formatted
+       // (we check in cache first)
+       flags = flags ? ( flagsCache[ flags ] || createFlags( flags ) ) : {};
+
+       var // Actual callback list
+               list = [],
+               // Stack of fire calls for repeatable lists
+               stack = [],
+               // Last fire value (for non-forgettable lists)
+               memory,
+               // Flag to know if list was already fired
+               fired,
+               // Flag to know if list is currently firing
+               firing,
+               // First callback to fire (used internally by add and fireWith)
+               firingStart,
+               // End of the loop when firing
+               firingLength,
+               // Index of currently firing callback (modified by remove if needed)
+               firingIndex,
+               // Add one or several callbacks to the list
+               add = function( args ) {
+                       var i,
+                               length,
+                               elem,
+                               type,
+                               actual;
+                       for ( i = 0, length = args.length; i < length; i++ ) {
+                               elem = args[ i ];
+                               type = jQuery.type( elem );
+                               if ( type === "array" ) {
+                                       // Inspect recursively
+                                       add( elem );
+                               } else if ( type === "function" ) {
+                                       // Add if not in unique mode and callback is not in
+                                       if ( !flags.unique || !self.has( elem ) ) {
+                                               list.push( elem );
+                                       }
+                               }
+                       }
+               },
+               // Fire callbacks
+               fire = function( context, args ) {
+                       args = args || [];
+                       memory = !flags.memory || [ context, args ];
+                       fired = true;
+                       firing = true;
+                       firingIndex = firingStart || 0;
+                       firingStart = 0;
+                       firingLength = list.length;
+                       for ( ; list && firingIndex < firingLength; firingIndex++ ) {
+                               if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) {
+                                       memory = true; // Mark as halted
+                                       break;
+                               }
+                       }
+                       firing = false;
+                       if ( list ) {
+                               if ( !flags.once ) {
+                                       if ( stack && stack.length ) {
+                                               memory = stack.shift();
+                                               self.fireWith( memory[ 0 ], memory[ 1 ] );
+                                       }
+                               } else if ( memory === true ) {
+                                       self.disable();
+                               } else {
+                                       list = [];
+                               }
+                       }
+               },
+               // Actual Callbacks object
+               self = {
+                       // Add a callback or a collection of callbacks to the list
+                       add: function() {
+                               if ( list ) {
+                                       var length = list.length;
+                                       add( arguments );
+                                       // Do we need to add the callbacks to the
+                                       // current firing batch?
+                                       if ( firing ) {
+                                               firingLength = list.length;
+                                       // With memory, if we're not firing then
+                                       // we should call right away, unless previous
+                                       // firing was halted (stopOnFalse)
+                                       } else if ( memory && memory !== true ) {
+                                               firingStart = length;
+                                               fire( memory[ 0 ], memory[ 1 ] );
+                                       }
+                               }
+                               return this;
+                       },
+                       // Remove a callback from the list
+                       remove: function() {
+                               if ( list ) {
+                                       var args = arguments,
+                                               argIndex = 0,
+                                               argLength = args.length;
+                                       for ( ; argIndex < argLength ; argIndex++ ) {
+                                               for ( var i = 0; i < list.length; i++ ) {
+                                                       if ( args[ argIndex ] === list[ i ] ) {
+                                                               // Handle firingIndex and firingLength
+                                                               if ( firing ) {
+                                                                       if ( i <= firingLength ) {
+                                                                               firingLength--;
+                                                                               if ( i <= firingIndex ) {
+                                                                                       firingIndex--;
+                                                                               }
+                                                                       }
+                                                               }
+                                                               // Remove the element
+                                                               list.splice( i--, 1 );
+                                                               // If we have some unicity property then
+                                                               // we only need to do this once
+                                                               if ( flags.unique ) {
+                                                                       break;
+                                                               }
+                                                       }
+                                               }
+                                       }
+                               }
+                               return this;
+                       },
+                       // Control if a given callback is in the list
+                       has: function( fn ) {
+                               if ( list ) {
+                                       var i = 0,
+                                               length = list.length;
+                                       for ( ; i < length; i++ ) {
+                                               if ( fn === list[ i ] ) {
+                                                       return true;
+                                               }
+                                       }
+                               }
+                               return false;
+                       },
+                       // Remove all callbacks from the list
+                       empty: function() {
+                               list = [];
+                               return this;
+                       },
+                       // Have the list do nothing anymore
+                       disable: function() {
+                               list = stack = memory = undefined;
+                               return this;
+                       },
+                       // Is it disabled?
+                       disabled: function() {
+                               return !list;
+                       },
+                       // Lock the list in its current state
+                       lock: function() {
+                               stack = undefined;
+                               if ( !memory || memory === true ) {
+                                       self.disable();
+                               }
+                               return this;
+                       },
+                       // Is it locked?
+                       locked: function() {
+                               return !stack;
+                       },
+                       // Call all callbacks with the given context and arguments
+                       fireWith: function( context, args ) {
+                               if ( stack ) {
+                                       if ( firing ) {
+                                               if ( !flags.once ) {
+                                                       stack.push( [ context, args ] );
+                                               }
+                                       } else if ( !( flags.once && memory ) ) {
+                                               fire( context, args );
+                                       }
+                               }
+                               return this;
+                       },
+                       // Call all the callbacks with the given arguments
+                       fire: function() {
+                               self.fireWith( this, arguments );
+                               return this;
+                       },
+                       // To know if the callbacks have already been called at least once
+                       fired: function() {
+                               return !!fired;
+                       }
+               };
+
+       return self;
+};
+
+
+
+
+var // Static reference to slice
+       sliceDeferred = [].slice;
+
+jQuery.extend({
+
+       Deferred: function( func ) {
+               var doneList = jQuery.Callbacks( "once memory" ),
+                       failList = jQuery.Callbacks( "once memory" ),
+                       progressList = jQuery.Callbacks( "memory" ),
+                       state = "pending",
+                       lists = {
+                               resolve: doneList,
+                               reject: failList,
+                               notify: progressList
+                       },
+                       promise = {
+                               done: doneList.add,
+                               fail: failList.add,
+                               progress: progressList.add,
+
+                               state: function() {
+                                       return state;
+                               },
+
+                               // Deprecated
+                               isResolved: doneList.fired,
+                               isRejected: failList.fired,
+
+                               then: function( doneCallbacks, failCallbacks, progressCallbacks ) {
+                                       deferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks );
+                                       return this;
+                               },
+                               always: function() {
+                                       deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments );
+                                       return this;
+                               },
+                               pipe: function( fnDone, fnFail, fnProgress ) {
+                                       return jQuery.Deferred(function( newDefer ) {
+                                               jQuery.each( {
+                                                       done: [ fnDone, "resolve" ],
+                                                       fail: [ fnFail, "reject" ],
+                                                       progress: [ fnProgress, "notify" ]
+                                               }, function( handler, data ) {
+                                                       var fn = data[ 0 ],
+                                                               action = data[ 1 ],
+                                                               returned;
+                                                       if ( jQuery.isFunction( fn ) ) {
+                                                               deferred[ handler ](function() {
+                                                                       returned = fn.apply( this, arguments );
+                                                                       if ( returned && jQuery.isFunction( returned.promise ) ) {
+                                                                               returned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify );
+                                                                       } else {
+                                                                               newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] );
+                                                                       }
+                                                               });
+                                                       } else {
+                                                               deferred[ handler ]( newDefer[ action ] );
+                                                       }
+                                               });
+                                       }).promise();
+                               },
+                               // Get a promise for this deferred
+                               // If obj is provided, the promise aspect is added to the object
+                               promise: function( obj ) {
+                                       if ( obj == null ) {
+                                               obj = promise;
+                                       } else {
+                                               for ( var key in promise ) {
+                                                       obj[ key ] = promise[ key ];
+                                               }
+                                       }
+                                       return obj;
+                               }
+                       },
+                       deferred = promise.promise({}),
+                       key;
+
+               for ( key in lists ) {
+                       deferred[ key ] = lists[ key ].fire;
+                       deferred[ key + "With" ] = lists[ key ].fireWith;
+               }
+
+               // Handle state
+               deferred.done( function() {
+                       state = "resolved";
+               }, failList.disable, progressList.lock ).fail( function() {
+                       state = "rejected";
+               }, doneList.disable, progressList.lock );
+
+               // Call given func if any
+               if ( func ) {
+                       func.call( deferred, deferred );
+               }
+
+               // All done!
+               return deferred;
+       },
+
+       // Deferred helper
+       when: function( firstParam ) {
+               var args = sliceDeferred.call( arguments, 0 ),
+                       i = 0,
+                       length = args.length,
+                       pValues = new Array( length ),
+                       count = length,
+                       pCount = length,
+                       deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?
+                               firstParam :
+                               jQuery.Deferred(),
+                       promise = deferred.promise();
+               function resolveFunc( i ) {
+                       return function( value ) {
+                               args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
+                               if ( !( --count ) ) {
+                                       deferred.resolveWith( deferred, args );
+                               }
+                       };
+               }
+               function progressFunc( i ) {
+                       return function( value ) {
+                               pValues[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
+                               deferred.notifyWith( promise, pValues );
+                       };
+               }
+               if ( length > 1 ) {
+                       for ( ; i < length; i++ ) {
+                               if ( args[ i ] && args[ i ].promise && jQuery.isFunction( args[ i ].promise ) ) {
+                                       args[ i ].promise().then( resolveFunc(i), deferred.reject, progressFunc(i) );
+                               } else {
+                                       --count;
+                               }
+                       }
+                       if ( !count ) {
+                               deferred.resolveWith( deferred, args );
+                       }
+               } else if ( deferred !== firstParam ) {
+                       deferred.resolveWith( deferred, length ? [ firstParam ] : [] );
+               }
+               return promise;
+       }
+});
+
+
+
+
+jQuery.support = (function() {
+
+       var support,
+               all,
+               a,
+               select,
+               opt,
+               input,
+               fragment,
+               tds,
+               events,
+               eventName,
+               i,
+               isSupported,
+               div = document.createElement( "div" ),
+               documentElement = document.documentElement;
+
+       // Preliminary tests
+       div.setAttribute("className", "t");
+       div.innerHTML = "   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
+
+       all = div.getElementsByTagName( "*" );
+       a = div.getElementsByTagName( "a" )[ 0 ];
+
+       // Can't get basic test support
+       if ( !all || !all.length || !a ) {
+               return {};
+       }
+
+       // First batch of supports tests
+       select = document.createElement( "select" );
+       opt = select.appendChild( document.createElement("option") );
+       input = div.getElementsByTagName( "input" )[ 0 ];
+
+       support = {
+               // IE strips leading whitespace when .innerHTML is used
+               leadingWhitespace: ( div.firstChild.nodeType === 3 ),
+
+               // Make sure that tbody elements aren't automatically inserted
+               // IE will insert them into empty tables
+               tbody: !div.getElementsByTagName("tbody").length,
+
+               // Make sure that link elements get serialized correctly by innerHTML
+               // This requires a wrapper element in IE
+               htmlSerialize: !!div.getElementsByTagName("link").length,
+
+               // Get the style information from getAttribute
+               // (IE uses .cssText instead)
+               style: /top/.test( a.getAttribute("style") ),
+
+               // Make sure that URLs aren't manipulated
+               // (IE normalizes it by default)
+               hrefNormalized: ( a.getAttribute("href") === "/a" ),
+
+               // Make sure that element opacity exists
+               // (IE uses filter instead)
+               // Use a regex to work around a WebKit issue. See #5145
+               opacity: /^0.55/.test( a.style.opacity ),
+
+               // Verify style float existence
+               // (IE uses styleFloat instead of cssFloat)
+               cssFloat: !!a.style.cssFloat,
+
+               // Make sure that if no value is specified for a checkbox
+               // that it defaults to "on".
+               // (WebKit defaults to "" instead)
+               checkOn: ( input.value === "on" ),
+
+               // Make sure that a selected-by-default option has a working selected property.
+               // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
+               optSelected: opt.selected,
+
+               // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
+               getSetAttribute: div.className !== "t",
+
+               // Tests for enctype support on a form(#6743)
+               enctype: !!document.createElement("form").enctype,
+
+               // Makes sure cloning an html5 element does not cause problems
+               // Where outerHTML is undefined, this still works
+               html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>",
+
+               // Will be defined later
+               submitBubbles: true,
+               changeBubbles: true,
+               focusinBubbles: false,
+               deleteExpando: true,
+               noCloneEvent: true,
+               inlineBlockNeedsLayout: false,
+               shrinkWrapBlocks: false,
+               reliableMarginRight: true,
+               pixelMargin: true
+       };
+
+       // jQuery.boxModel DEPRECATED in 1.3, use jQuery.support.boxModel instead
+       jQuery.boxModel = support.boxModel = (document.compatMode === "CSS1Compat");
+
+       // Make sure checked status is properly cloned
+       input.checked = true;
+       support.noCloneChecked = input.cloneNode( true ).checked;
+
+       // Make sure that the options inside disabled selects aren't marked as disabled
+       // (WebKit marks them as disabled)
+       select.disabled = true;
+       support.optDisabled = !opt.disabled;
+
+       // Test to see if it's possible to delete an expando from an element
+       // Fails in Internet Explorer
+       try {
+               delete div.test;
+       } catch( e ) {
+               support.deleteExpando = false;
+       }
+
+       if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
+               div.attachEvent( "onclick", function() {
+                       // Cloning a node shouldn't copy over any
+                       // bound event handlers (IE does this)
+                       support.noCloneEvent = false;
+               });
+               div.cloneNode( true ).fireEvent( "onclick" );
+       }
+
+       // Check if a radio maintains its value
+       // after being appended to the DOM
+       input = document.createElement("input");
+       input.value = "t";
+       input.setAttribute("type", "radio");
+       support.radioValue = input.value === "t";
+
+       input.setAttribute("checked", "checked");
+
+       // #11217 - WebKit loses check when the name is after the checked attribute
+       input.setAttribute( "name", "t" );
+
+       div.appendChild( input );
+       fragment = document.createDocumentFragment();
+       fragment.appendChild( div.lastChild );
+
+       // WebKit doesn't clone checked state correctly in fragments
+       support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+       // Check if a disconnected checkbox will retain its checked
+       // value of true after appended to the DOM (IE6/7)
+       support.appendChecked = input.checked;
+
+       fragment.removeChild( input );
+       fragment.appendChild( div );
+
+       // Technique from Juriy Zaytsev
+       // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/
+       // We only care about the case where non-standard event systems
+       // are used, namely in IE. Short-circuiting here helps us to
+       // avoid an eval call (in setAttribute) which can cause CSP
+       // to go haywire. See: https://developer.mozilla.org/en/Security/CSP
+       if ( div.attachEvent ) {
+               for ( i in {
+                       submit: 1,
+                       change: 1,
+                       focusin: 1
+               }) {
+                       eventName = "on" + i;
+                       isSupported = ( eventName in div );
+                       if ( !isSupported ) {
+                               div.setAttribute( eventName, "return;" );
+                               isSupported = ( typeof div[ eventName ] === "function" );
+                       }
+                       support[ i + "Bubbles" ] = isSupported;
+               }
+       }
+
+       fragment.removeChild( div );
+
+       // Null elements to avoid leaks in IE
+       fragment = select = opt = div = input = null;
+
+       // Run tests that need a body at doc ready
+       jQuery(function() {
+               var container, outer, inner, table, td, offsetSupport,
+                       marginDiv, conMarginTop, style, html, positionTopLeftWidthHeight,
+                       paddingMarginBorderVisibility, paddingMarginBorder,
+                       body = document.getElementsByTagName("body")[0];
+
+               if ( !body ) {
+                       // Return for frameset docs that don't have a body
+                       return;
+               }
+
+               conMarginTop = 1;
+               paddingMarginBorder = "padding:0;margin:0;border:";
+               positionTopLeftWidthHeight = "position:absolute;top:0;left:0;width:1px;height:1px;";
+               paddingMarginBorderVisibility = paddingMarginBorder + "0;visibility:hidden;";
+               style = "style='" + positionTopLeftWidthHeight + paddingMarginBorder + "5px solid #000;";
+               html = "<div " + style + "display:block;'><div style='" + paddingMarginBorder + "0;display:block;overflow:hidden;'></div></div>" +
+                       "<table " + style + "' cellpadding='0' cellspacing='0'>" +
+                       "<tr><td></td></tr></table>";
+
+               container = document.createElement("div");
+               container.style.cssText = paddingMarginBorderVisibility + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px";
+               body.insertBefore( container, body.firstChild );
+
+               // Construct the test element
+               div = document.createElement("div");
+               container.appendChild( div );
+
+               // Check if table cells still have offsetWidth/Height when they are set
+               // to display:none and there are still other visible table cells in a
+               // table row; if so, offsetWidth/Height are not reliable for use when
+               // determining if an element has been hidden directly using
+               // display:none (it is still safe to use offsets if a parent element is
+               // hidden; don safety goggles and see bug #4512 for more information).
+               // (only IE 8 fails this test)
+               div.innerHTML = "<table><tr><td style='" + paddingMarginBorder + "0;display:none'></td><td>t</td></tr></table>";
+               tds = div.getElementsByTagName( "td" );
+               isSupported = ( tds[ 0 ].offsetHeight === 0 );
+
+               tds[ 0 ].style.display = "";
+               tds[ 1 ].style.display = "none";
+
+               // Check if empty table cells still have offsetWidth/Height
+               // (IE <= 8 fail this test)
+               support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
+
+               // Check if div with explicit width and no margin-right incorrectly
+               // gets computed margin-right based on width of container. For more
+               // info see bug #3333
+               // Fails in WebKit before Feb 2011 nightlies
+               // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+               if ( window.getComputedStyle ) {
+                       div.innerHTML = "";
+                       marginDiv = document.createElement( "div" );
+                       marginDiv.style.width = "0";
+                       marginDiv.style.marginRight = "0";
+                       div.style.width = "2px";
+                       div.appendChild( marginDiv );
+                       support.reliableMarginRight =
+                               ( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;
+               }
+
+               if ( typeof div.style.zoom !== "undefined" ) {
+                       // Check if natively block-level elements act like inline-block
+                       // elements when setting their display to 'inline' and giving
+                       // them layout
+                       // (IE < 8 does this)
+                       div.innerHTML = "";
+                       div.style.width = div.style.padding = "1px";
+                       div.style.border = 0;
+                       div.style.overflow = "hidden";
+                       div.style.display = "inline";
+                       div.style.zoom = 1;
+                       support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );
+
+                       // Check if elements with layout shrink-wrap their children
+                       // (IE 6 does this)
+                       div.style.display = "block";
+                       div.style.overflow = "visible";
+                       div.innerHTML = "<div style='width:5px;'></div>";
+                       support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );
+               }
+
+               div.style.cssText = positionTopLeftWidthHeight + paddingMarginBorderVisibility;
+               div.innerHTML = html;
+
+               outer = div.firstChild;
+               inner = outer.firstChild;
+               td = outer.nextSibling.firstChild.firstChild;
+
+               offsetSupport = {
+                       doesNotAddBorder: ( inner.offsetTop !== 5 ),
+                       doesAddBorderForTableAndCells: ( td.offsetTop === 5 )
+               };
+
+               inner.style.position = "fixed";
+               inner.style.top = "20px";
+
+               // safari subtracts parent border width here which is 5px
+               offsetSupport.fixedPosition = ( inner.offsetTop === 20 || inner.offsetTop === 15 );
+               inner.style.position = inner.style.top = "";
+
+               outer.style.overflow = "hidden";
+               outer.style.position = "relative";
+
+               offsetSupport.subtractsBorderForOverflowNotVisible = ( inner.offsetTop === -5 );
+               offsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop );
+
+               if ( window.getComputedStyle ) {
+                       div.style.marginTop = "1%";
+                       support.pixelMargin = ( window.getComputedStyle( div, null ) || { marginTop: 0 } ).marginTop !== "1%";
+               }
+
+               if ( typeof container.style.zoom !== "undefined" ) {
+                       container.style.zoom = 1;
+               }
+
+               body.removeChild( container );
+               marginDiv = div = container = null;
+
+               jQuery.extend( support, offsetSupport );
+       });
+
+       return support;
+})();
+
+
+
+
+var rbrace = /^(?:\{.*\}|\[.*\])$/,
+       rmultiDash = /([A-Z])/g;
+
+jQuery.extend({
+       cache: {},
+
+       // Please use with caution
+       uuid: 0,
+
+       // Unique for each copy of jQuery on the page
+       // Non-digits removed to match rinlinejQuery
+       expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
+
+       // The following elements throw uncatchable exceptions if you
+       // attempt to add expando properties to them.
+       noData: {
+               "embed": true,
+               // Ban all objects except for Flash (which handle expandos)
+               "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
+               "applet": true
+       },
+
+       hasData: function( elem ) {
+               elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
+               return !!elem && !isEmptyDataObject( elem );
+       },
+
+       data: function( elem, name, data, pvt /* Internal Use Only */ ) {
+               if ( !jQuery.acceptData( elem ) ) {
+                       return;
+               }
+
+               var privateCache, thisCache, ret,
+                       internalKey = jQuery.expando,
+                       getByName = typeof name === "string",
+
+                       // We have to handle DOM nodes and JS objects differently because IE6-7
+                       // can't GC object references properly across the DOM-JS boundary
+                       isNode = elem.nodeType,
+
+                       // Only DOM nodes need the global jQuery cache; JS object data is
+                       // attached directly to the object so GC can occur automatically
+                       cache = isNode ? jQuery.cache : elem,
+
+                       // Only defining an ID for JS objects if its cache already exists allows
+                       // the code to shortcut on the same path as a DOM node with no cache
+                       id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey,
+                       isEvents = name === "events";
+
+               // Avoid doing any more work than we need to when trying to get data on an
+               // object that has no data at all
+               if ( (!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined ) {
+                       return;
+               }
+
+               if ( !id ) {
+                       // Only DOM nodes need a new unique ID for each element since their data
+                       // ends up in the global cache
+                       if ( isNode ) {
+                               elem[ internalKey ] = id = ++jQuery.uuid;
+                       } else {
+                               id = internalKey;
+                       }
+               }
+
+               if ( !cache[ id ] ) {
+                       cache[ id ] = {};
+
+                       // Avoids exposing jQuery metadata on plain JS objects when the object
+                       // is serialized using JSON.stringify
+                       if ( !isNode ) {
+                               cache[ id ].toJSON = jQuery.noop;
+                       }
+               }
+
+               // An object can be passed to jQuery.data instead of a key/value pair; this gets
+               // shallow copied over onto the existing cache
+               if ( typeof name === "object" || typeof name === "function" ) {
+                       if ( pvt ) {
+                               cache[ id ] = jQuery.extend( cache[ id ], name );
+                       } else {
+                               cache[ id ].data = jQuery.extend( cache[ id ].data, name );
+                       }
+               }
+
+               privateCache = thisCache = cache[ id ];
+
+               // jQuery data() is stored in a separate object inside the object's internal data
+               // cache in order to avoid key collisions between internal data and user-defined
+               // data.
+               if ( !pvt ) {
+                       if ( !thisCache.data ) {
+                               thisCache.data = {};
+                       }
+
+                       thisCache = thisCache.data;
+               }
+
+               if ( data !== undefined ) {
+                       thisCache[ jQuery.camelCase( name ) ] = data;
+               }
+
+               // Users should not attempt to inspect the internal events object using jQuery.data,
+               // it is undocumented and subject to change. But does anyone listen? No.
+               if ( isEvents && !thisCache[ name ] ) {
+                       return privateCache.events;
+               }
+
+               // Check for both converted-to-camel and non-converted data property names
+               // If a data property was specified
+               if ( getByName ) {
+
+                       // First Try to find as-is property data
+                       ret = thisCache[ name ];
+
+                       // Test for null|undefined property data
+                       if ( ret == null ) {
+
+                               // Try to find the camelCased property
+                               ret = thisCache[ jQuery.camelCase( name ) ];
+                       }
+               } else {
+                       ret = thisCache;
+               }
+
+               return ret;
+       },
+
+       removeData: function( elem, name, pvt /* Internal Use Only */ ) {
+               if ( !jQuery.acceptData( elem ) ) {
+                       return;
+               }
+
+               var thisCache, i, l,
+
+                       // Reference to internal data cache key
+                       internalKey = jQuery.expando,
+
+                       isNode = elem.nodeType,
+
+                       // See jQuery.data for more information
+                       cache = isNode ? jQuery.cache : elem,
+
+                       // See jQuery.data for more information
+                       id = isNode ? elem[ internalKey ] : internalKey;
+
+               // If there is already no cache entry for this object, there is no
+               // purpose in continuing
+               if ( !cache[ id ] ) {
+                       return;
+               }
+
+               if ( name ) {
+
+                       thisCache = pvt ? cache[ id ] : cache[ id ].data;
+
+                       if ( thisCache ) {
+
+                               // Support array or space separated string names for data keys
+                               if ( !jQuery.isArray( name ) ) {
+
+                                       // try the string as a key before any manipulation
+                                       if ( name in thisCache ) {
+                                               name = [ name ];
+                                       } else {
+
+                                               // split the camel cased version by spaces unless a key with the spaces exists
+                                               name = jQuery.camelCase( name );
+                                               if ( name in thisCache ) {
+                                                       name = [ name ];
+                                               } else {
+                                                       name = name.split( " " );
+                                               }
+                                       }
+                               }
+
+                               for ( i = 0, l = name.length; i < l; i++ ) {
+                                       delete thisCache[ name[i] ];
+                               }
+
+                               // If there is no data left in the cache, we want to continue
+                               // and let the cache object itself get destroyed
+                               if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {
+                                       return;
+                               }
+                       }
+               }
+
+               // See jQuery.data for more information
+               if ( !pvt ) {
+                       delete cache[ id ].data;
+
+                       // Don't destroy the parent cache unless the internal data object
+                       // had been the only thing left in it
+                       if ( !isEmptyDataObject(cache[ id ]) ) {
+                               return;
+                       }
+               }
+
+               // Browsers that fail expando deletion also refuse to delete expandos on
+               // the window, but it will allow it on all other JS objects; other browsers
+               // don't care
+               // Ensure that `cache` is not a window object #10080
+               if ( jQuery.support.deleteExpando || !cache.setInterval ) {
+                       delete cache[ id ];
+               } else {
+                       cache[ id ] = null;
+               }
+
+               // We destroyed the cache and need to eliminate the expando on the node to avoid
+               // false lookups in the cache for entries that no longer exist
+               if ( isNode ) {
+                       // IE does not allow us to delete expando properties from nodes,
+                       // nor does it have a removeAttribute function on Document nodes;
+                       // we must handle all of these cases
+                       if ( jQuery.support.deleteExpando ) {
+                               delete elem[ internalKey ];
+                       } else if ( elem.removeAttribute ) {
+                               elem.removeAttribute( internalKey );
+                       } else {
+                               elem[ internalKey ] = null;
+                       }
+               }
+       },
+
+       // For internal use only.
+       _data: function( elem, name, data ) {
+               return jQuery.data( elem, name, data, true );
+       },
+
+       // A method for determining if a DOM node can handle the data expando
+       acceptData: function( elem ) {
+               if ( elem.nodeName ) {
+                       var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
+
+                       if ( match ) {
+                               return !(match === true || elem.getAttribute("classid") !== match);
+                       }
+               }
+
+               return true;
+       }
+});
+
+jQuery.fn.extend({
+       data: function( key, value ) {
+               var parts, part, attr, name, l,
+                       elem = this[0],
+                       i = 0,
+                       data = null;
+
+               // Gets all values
+               if ( key === undefined ) {
+                       if ( this.length ) {
+                               data = jQuery.data( elem );
+
+                               if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
+                                       attr = elem.attributes;
+                                       for ( l = attr.length; i < l; i++ ) {
+                                               name = attr[i].name;
+
+                                               if ( name.indexOf( "data-" ) === 0 ) {
+                                                       name = jQuery.camelCase( name.substring(5) );
+
+                                                       dataAttr( elem, name, data[ name ] );
+                                               }
+                                       }
+                                       jQuery._data( elem, "parsedAttrs", true );
+                               }
+                       }
+
+                       return data;
+               }
+
+               // Sets multiple values
+               if ( typeof key === "object" ) {
+                       return this.each(function() {
+                               jQuery.data( this, key );
+                       });
+               }
+
+               parts = key.split( ".", 2 );
+               parts[1] = parts[1] ? "." + parts[1] : "";
+               part = parts[1] + "!";
+
+               return jQuery.access( this, function( value ) {
+
+                       if ( value === undefined ) {
+                               data = this.triggerHandler( "getData" + part, [ parts[0] ] );
+
+                               // Try to fetch any internally stored data first
+                               if ( data === undefined && elem ) {
+                                       data = jQuery.data( elem, key );
+                                       data = dataAttr( elem, key, data );
+                               }
+
+                               return data === undefined && parts[1] ?
+                                       this.data( parts[0] ) :
+                                       data;
+                       }
+
+                       parts[1] = value;
+                       this.each(function() {
+                               var self = jQuery( this );
+
+                               self.triggerHandler( "setData" + part, parts );
+                               jQuery.data( this, key, value );
+                               self.triggerHandler( "changeData" + part, parts );
+                       });
+               }, null, value, arguments.length > 1, null, false );
+       },
+
+       removeData: function( key ) {
+               return this.each(function() {
+                       jQuery.removeData( this, key );
+               });
+       }
+});
+
+function dataAttr( elem, key, data ) {
+       // If nothing was found internally, try to fetch any
+       // data from the HTML5 data-* attribute
+       if ( data === undefined && elem.nodeType === 1 ) {
+
+               var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
+
+               data = elem.getAttribute( name );
+
+               if ( typeof data === "string" ) {
+                       try {
+                               data = data === "true" ? true :
+                               data === "false" ? false :
+                               data === "null" ? null :
+                               jQuery.isNumeric( data ) ? +data :
+                                       rbrace.test( data ) ? jQuery.parseJSON( data ) :
+                                       data;
+                       } catch( e ) {}
+
+                       // Make sure we set the data so it isn't changed later
+                       jQuery.data( elem, key, data );
+
+               } else {
+                       data = undefined;
+               }
+       }
+
+       return data;
+}
+
+// checks a cache object for emptiness
+function isEmptyDataObject( obj ) {
+       for ( var name in obj ) {
+
+               // if the public data object is empty, the private is still empty
+               if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
+                       continue;
+               }
+               if ( name !== "toJSON" ) {
+                       return false;
+               }
+       }
+
+       return true;
+}
+
+
+
+
+function handleQueueMarkDefer( elem, type, src ) {
+       var deferDataKey = type + "defer",
+               queueDataKey = type + "queue",
+               markDataKey = type + "mark",
+               defer = jQuery._data( elem, deferDataKey );
+       if ( defer &&
+               ( src === "queue" || !jQuery._data(elem, queueDataKey) ) &&
+               ( src === "mark" || !jQuery._data(elem, markDataKey) ) ) {
+               // Give room for hard-coded callbacks to fire first
+               // and eventually mark/queue something else on the element
+               setTimeout( function() {
+                       if ( !jQuery._data( elem, queueDataKey ) &&
+                               !jQuery._data( elem, markDataKey ) ) {
+                               jQuery.removeData( elem, deferDataKey, true );
+                               defer.fire();
+                       }
+               }, 0 );
+       }
+}
+
+jQuery.extend({
+
+       _mark: function( elem, type ) {
+               if ( elem ) {
+                       type = ( type || "fx" ) + "mark";
+                       jQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 );
+               }
+       },
+
+       _unmark: function( force, elem, type ) {
+               if ( force !== true ) {
+                       type = elem;
+                       elem = force;
+                       force = false;
+               }
+               if ( elem ) {
+                       type = type || "fx";
+                       var key = type + "mark",
+                               count = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 );
+                       if ( count ) {
+                               jQuery._data( elem, key, count );
+                       } else {
+                               jQuery.removeData( elem, key, true );
+                               handleQueueMarkDefer( elem, type, "mark" );
+                       }
+               }
+       },
+
+       queue: function( elem, type, data ) {
+               var q;
+               if ( elem ) {
+                       type = ( type || "fx" ) + "queue";
+                       q = jQuery._data( elem, type );
+
+                       // Speed up dequeue by getting out quickly if this is just a lookup
+                       if ( data ) {
+                               if ( !q || jQuery.isArray(data) ) {
+                                       q = jQuery._data( elem, type, jQuery.makeArray(data) );
+                               } else {
+                                       q.push( data );
+                               }
+                       }
+                       return q || [];
+               }
+       },
+
+       dequeue: function( elem, type ) {
+               type = type || "fx";
+
+               var queue = jQuery.queue( elem, type ),
+                       fn = queue.shift(),
+                       hooks = {};
+
+               // If the fx queue is dequeued, always remove the progress sentinel
+               if ( fn === "inprogress" ) {
+                       fn = queue.shift();
+               }
+
+               if ( fn ) {
+                       // Add a progress sentinel to prevent the fx queue from being
+                       // automatically dequeued
+                       if ( type === "fx" ) {
+                               queue.unshift( "inprogress" );
+                       }
+
+                       jQuery._data( elem, type + ".run", hooks );
+                       fn.call( elem, function() {
+                               jQuery.dequeue( elem, type );
+                       }, hooks );
+               }
+
+               if ( !queue.length ) {
+                       jQuery.removeData( elem, type + "queue " + type + ".run", true );
+                       handleQueueMarkDefer( elem, type, "queue" );
+               }
+       }
+});
+
+jQuery.fn.extend({
+       queue: function( type, data ) {
+               var setter = 2;
+
+               if ( typeof type !== "string" ) {
+                       data = type;
+                       type = "fx";
+                       setter--;
+               }
+
+               if ( arguments.length < setter ) {
+                       return jQuery.queue( this[0], type );
+               }
+
+               return data === undefined ?
+                       this :
+                       this.each(function() {
+                               var queue = jQuery.queue( this, type, data );
+
+                               if ( type === "fx" && queue[0] !== "inprogress" ) {
+                                       jQuery.dequeue( this, type );
+                               }
+                       });
+       },
+       dequeue: function( type ) {
+               return this.each(function() {
+                       jQuery.dequeue( this, type );
+               });
+       },
+       // Based off of the plugin by Clint Helfers, with permission.
+       // http://blindsignals.com/index.php/2009/07/jquery-delay/
+       delay: function( time, type ) {
+               time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+               type = type || "fx";
+
+               return this.queue( type, function( next, hooks ) {
+                       var timeout = setTimeout( next, time );
+                       hooks.stop = function() {
+                               clearTimeout( timeout );
+                       };
+               });
+       },
+       clearQueue: function( type ) {
+               return this.queue( type || "fx", [] );
+       },
+       // Get a promise resolved when queues of a certain type
+       // are emptied (fx is the type by default)
+       promise: function( type, object ) {
+               if ( typeof type !== "string" ) {
+                       object = type;
+                       type = undefined;
+               }
+               type = type || "fx";
+               var defer = jQuery.Deferred(),
+                       elements = this,
+                       i = elements.length,
+                       count = 1,
+                       deferDataKey = type + "defer",
+                       queueDataKey = type + "queue",
+                       markDataKey = type + "mark",
+                       tmp;
+               function resolve() {
+                       if ( !( --count ) ) {
+                               defer.resolveWith( elements, [ elements ] );
+                       }
+               }
+               while( i-- ) {
+                       if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
+                                       ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
+                                               jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
+                                       jQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( "once memory" ), true ) )) {
+                               count++;
+                               tmp.add( resolve );
+                       }
+               }
+               resolve();
+               return defer.promise( object );
+       }
+});
+
+
+
+
+var rclass = /[\n\t\r]/g,
+       rspace = /\s+/,
+       rreturn = /\r/g,
+       rtype = /^(?:button|input)$/i,
+       rfocusable = /^(?:button|input|object|select|textarea)$/i,
+       rclickable = /^a(?:rea)?$/i,
+       rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
+       getSetAttribute = jQuery.support.getSetAttribute,
+       nodeHook, boolHook, fixSpecified;
+
+jQuery.fn.extend({
+       attr: function( name, value ) {
+               return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );
+       },
+
+       removeAttr: function( name ) {
+               return this.each(function() {
+                       jQuery.removeAttr( this, name );
+               });
+       },
+
+       prop: function( name, value ) {
+               return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );
+       },
+
+       removeProp: function( name ) {
+               name = jQuery.propFix[ name ] || name;
+               return this.each(function() {
+                       // try/catch handles cases where IE balks (such as removing a property on window)
+                       try {
+                               this[ name ] = undefined;
+                               delete this[ name ];
+                       } catch( e ) {}
+               });
+       },
+
+       addClass: function( value ) {
+               var classNames, i, l, elem,
+                       setClass, c, cl;
+
+               if ( jQuery.isFunction( value ) ) {
+                       return this.each(function( j ) {
+                               jQuery( this ).addClass( value.call(this, j, this.className) );
+                       });
+               }
+
+               if ( value && typeof value === "string" ) {
+                       classNames = value.split( rspace );
+
+                       for ( i = 0, l = this.length; i < l; i++ ) {
+                               elem = this[ i ];
+
+                               if ( elem.nodeType === 1 ) {
+                                       if ( !elem.className && classNames.length === 1 ) {
+                                               elem.className = value;
+
+                                       } else {
+                                               setClass = " " + elem.className + " ";
+
+                                               for ( c = 0, cl = classNames.length; c < cl; c++ ) {
+                                                       if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) {
+                                                               setClass += classNames[ c ] + " ";
+                                                       }
+                                               }
+                                               elem.className = jQuery.trim( setClass );
+                                       }
+                               }
+                       }
+               }
+
+               return this;
+       },
+
+       removeClass: function( value ) {
+               var classNames, i, l, elem, className, c, cl;
+
+               if ( jQuery.isFunction( value ) ) {
+                       return this.each(function( j ) {
+                               jQuery( this ).removeClass( value.call(this, j, this.className) );
+                       });
+               }
+
+               if ( (value && typeof value === "string") || value === undefined ) {
+                       classNames = ( value || "" ).split( rspace );
+
+                       for ( i = 0, l = this.length; i < l; i++ ) {
+                               elem = this[ i ];
+
+                               if ( elem.nodeType === 1 && elem.className ) {
+                                       if ( value ) {
+                                               className = (" " + elem.className + " ").replace( rclass, " " );
+                                               for ( c = 0, cl = classNames.length; c < cl; c++ ) {
+                                                       className = className.replace(" " + classNames[ c ] + " ", " ");
+                                               }
+                                               elem.className = jQuery.trim( className );
+
+                                       } else {
+                                               elem.className = "";
+                                       }
+                               }
+                       }
+               }
+
+               return this;
+       },
+
+       toggleClass: function( value, stateVal ) {
+               var type = typeof value,
+                       isBool = typeof stateVal === "boolean";
+
+               if ( jQuery.isFunction( value ) ) {
+                       return this.each(function( i ) {
+                               jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
+                       });
+               }
+
+               return this.each(function() {
+                       if ( type === "string" ) {
+                               // toggle individual class names
+                               var className,
+                                       i = 0,
+                                       self = jQuery( this ),
+                                       state = stateVal,
+                                       classNames = value.split( rspace );
+
+                               while ( (className = classNames[ i++ ]) ) {
+                                       // check each className given, space seperated list
+                                       state = isBool ? state : !self.hasClass( className );
+                                       self[ state ? "addClass" : "removeClass" ]( className );
+                               }
+
+                       } else if ( type === "undefined" || type === "boolean" ) {
+                               if ( this.className ) {
+                                       // store className if set
+                                       jQuery._data( this, "__className__", this.className );
+                               }
+
+                               // toggle whole className
+                               this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
+                       }
+               });
+       },
+
+       hasClass: function( selector ) {
+               var className = " " + selector + " ",
+                       i = 0,
+                       l = this.length;
+               for ( ; i < l; i++ ) {
+                       if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
+                               return true;
+                       }
+               }
+
+               return false;
+       },
+
+       val: function( value ) {
+               var hooks, ret, isFunction,
+                       elem = this[0];
+
+               if ( !arguments.length ) {
+                       if ( elem ) {
+                               hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+
+                               if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
+                                       return ret;
+                               }
+
+                               ret = elem.value;
+
+                               return typeof ret === "string" ?
+                                       // handle most common string cases
+                                       ret.replace(rreturn, "") :
+                                       // handle cases where value is null/undef or number
+                                       ret == null ? "" : ret;
+                       }
+
+                       return;
+               }
+
+               isFunction = jQuery.isFunction( value );
+
+               return this.each(function( i ) {
+                       var self = jQuery(this), val;
+
+                       if ( this.nodeType !== 1 ) {
+                               return;
+                       }
+
+                       if ( isFunction ) {
+                               val = value.call( this, i, self.val() );
+                       } else {
+                               val = value;
+                       }
+
+                       // Treat null/undefined as ""; convert numbers to string
+                       if ( val == null ) {
+                               val = "";
+                       } else if ( typeof val === "number" ) {
+                               val += "";
+                       } else if ( jQuery.isArray( val ) ) {
+                               val = jQuery.map(val, function ( value ) {
+                                       return value == null ? "" : value + "";
+                               });
+                       }
+
+                       hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+
+                       // If set returns undefined, fall back to normal setting
+                       if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
+                               this.value = val;
+                       }
+               });
+       }
+});
+
+jQuery.extend({
+       valHooks: {
+               option: {
+                       get: function( elem ) {
+                               // attributes.value is undefined in Blackberry 4.7 but
+                               // uses .value. See #6932
+                               var val = elem.attributes.value;
+                               return !val || val.specified ? elem.value : elem.text;
+                       }
+               },
+               select: {
+                       get: function( elem ) {
+                               var value, i, max, option,
+                                       index = elem.selectedIndex,
+                                       values = [],
+                                       options = elem.options,
+                                       one = elem.type === "select-one";
+
+                               // Nothing was selected
+                               if ( index < 0 ) {
+                                       return null;
+                               }
+
+                               // Loop through all the selected options
+                               i = one ? index : 0;
+                               max = one ? index + 1 : options.length;
+                               for ( ; i < max; i++ ) {
+                                       option = options[ i ];
+
+                                       // Don't return options that are disabled or in a disabled optgroup
+                                       if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
+                                                       (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
+
+                                               // Get the specific value for the option
+                                               value = jQuery( option ).val();
+
+                                               // We don't need an array for one selects
+                                               if ( one ) {
+                                                       return value;
+                                               }
+
+                                               // Multi-Selects return an array
+                                               values.push( value );
+                                       }
+                               }
+
+                               // Fixes Bug #2551 -- select.val() broken in IE after form.reset()
+                               if ( one && !values.length && options.length ) {
+                                       return jQuery( options[ index ] ).val();
+                               }
+
+                               return values;
+                       },
+
+                       set: function( elem, value ) {
+                               var values = jQuery.makeArray( value );
+
+                               jQuery(elem).find("option").each(function() {
+                                       this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
+                               });
+
+                               if ( !values.length ) {
+                                       elem.selectedIndex = -1;
+                               }
+                               return values;
+                       }
+               }
+       },
+
+       attrFn: {
+               val: true,
+               css: true,
+               html: true,
+               text: true,
+               data: true,
+               width: true,
+               height: true,
+               offset: true
+       },
+
+       attr: function( elem, name, value, pass ) {
+               var ret, hooks, notxml,
+                       nType = elem.nodeType;
+
+               // don't get/set attributes on text, comment and attribute nodes
+               if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+                       return;
+               }
+
+               if ( pass && name in jQuery.attrFn ) {
+                       return jQuery( elem )[ name ]( value );
+               }
+
+               // Fallback to prop when attributes are not supported
+               if ( typeof elem.getAttribute === "undefined" ) {
+                       return jQuery.prop( elem, name, value );
+               }
+
+               notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+               // All attributes are lowercase
+               // Grab necessary hook if one is defined
+               if ( notxml ) {
+                       name = name.toLowerCase();
+                       hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );
+               }
+
+               if ( value !== undefined ) {
+
+                       if ( value === null ) {
+                               jQuery.removeAttr( elem, name );
+                               return;
+
+                       } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
+                               return ret;
+
+                       } else {
+                               elem.setAttribute( name, "" + value );
+                               return value;
+                       }
+
+               } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {
+                       return ret;
+
+               } else {
+
+                       ret = elem.getAttribute( name );
+
+                       // Non-existent attributes return null, we normalize to undefined
+                       return ret === null ?
+                               undefined :
+                               ret;
+               }
+       },
+
+       removeAttr: function( elem, value ) {
+               var propName, attrNames, name, l, isBool,
+                       i = 0;
+
+               if ( value && elem.nodeType === 1 ) {
+                       attrNames = value.toLowerCase().split( rspace );
+                       l = attrNames.length;
+
+                       for ( ; i < l; i++ ) {
+                               name = attrNames[ i ];
+
+                               if ( name ) {
+                                       propName = jQuery.propFix[ name ] || name;
+                                       isBool = rboolean.test( name );
+
+                                       // See #9699 for explanation of this approach (setting first, then removal)
+                                       // Do not do this for boolean attributes (see #10870)
+                                       if ( !isBool ) {
+                                               jQuery.attr( elem, name, "" );
+                                       }
+                                       elem.removeAttribute( getSetAttribute ? name : propName );
+
+                                       // Set corresponding property to false for boolean attributes
+                                       if ( isBool && propName in elem ) {
+                                               elem[ propName ] = false;
+                                       }
+                               }
+                       }
+               }
+       },
+
+       attrHooks: {
+               type: {
+                       set: function( elem, value ) {
+                               // We can't allow the type property to be changed (since it causes problems in IE)
+                               if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
+                                       jQuery.error( "type property can't be changed" );
+                               } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
+                                       // Setting the type on a radio button after the value resets the value in IE6-9
+                                       // Reset value to it's default in case type is set after value
+                                       // This is for element creation
+                                       var val = elem.value;
+                                       elem.setAttribute( "type", value );
+                                       if ( val ) {
+                                               elem.value = val;
+                                       }
+                                       return value;
+                               }
+                       }
+               },
+               // Use the value property for back compat
+               // Use the nodeHook for button elements in IE6/7 (#1954)
+               value: {
+                       get: function( elem, name ) {
+                               if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
+                                       return nodeHook.get( elem, name );
+                               }
+                               return name in elem ?
+                                       elem.value :
+                                       null;
+                       },
+                       set: function( elem, value, name ) {
+                               if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
+                                       return nodeHook.set( elem, value, name );
+                               }
+                               // Does not return so that setAttribute is also used
+                               elem.value = value;
+                       }
+               }
+       },
+
+       propFix: {
+               tabindex: "tabIndex",
+               readonly: "readOnly",
+               "for": "htmlFor",
+               "class": "className",
+               maxlength: "maxLength",
+               cellspacing: "cellSpacing",
+               cellpadding: "cellPadding",
+               rowspan: "rowSpan",
+               colspan: "colSpan",
+               usemap: "useMap",
+               frameborder: "frameBorder",
+               contenteditable: "contentEditable"
+       },
+
+       prop: function( elem, name, value ) {
+               var ret, hooks, notxml,
+                       nType = elem.nodeType;
+
+               // don't get/set properties on text, comment and attribute nodes
+               if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+                       return;
+               }
+
+               notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+               if ( notxml ) {
+                       // Fix name and attach hooks
+                       name = jQuery.propFix[ name ] || name;
+                       hooks = jQuery.propHooks[ name ];
+               }
+
+               if ( value !== undefined ) {
+                       if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+                               return ret;
+
+                       } else {
+                               return ( elem[ name ] = value );
+                       }
+
+               } else {
+                       if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
+                               return ret;
+
+                       } else {
+                               return elem[ name ];
+                       }
+               }
+       },
+
+       propHooks: {
+               tabIndex: {
+                       get: function( elem ) {
+                               // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
+                               // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+                               var attributeNode = elem.getAttributeNode("tabindex");
+
+                               return attributeNode && attributeNode.specified ?
+                                       parseInt( attributeNode.value, 10 ) :
+                                       rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
+                                               0 :
+                                               undefined;
+                       }
+               }
+       }
+});
+
+// Add the tabIndex propHook to attrHooks for back-compat (different case is intentional)
+jQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex;
+
+// Hook for boolean attributes
+boolHook = {
+       get: function( elem, name ) {
+               // Align boolean attributes with corresponding properties
+               // Fall back to attribute presence where some booleans are not supported
+               var attrNode,
+                       property = jQuery.prop( elem, name );
+               return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?
+                       name.toLowerCase() :
+                       undefined;
+       },
+       set: function( elem, value, name ) {
+               var propName;
+               if ( value === false ) {
+                       // Remove boolean attributes when set to false
+                       jQuery.removeAttr( elem, name );
+               } else {
+                       // value is true since we know at this point it's type boolean and not false
+                       // Set boolean attributes to the same name and set the DOM property
+                       propName = jQuery.propFix[ name ] || name;
+                       if ( propName in elem ) {
+                               // Only set the IDL specifically if it already exists on the element
+                               elem[ propName ] = true;
+                       }
+
+                       elem.setAttribute( name, name.toLowerCase() );
+               }
+               return name;
+       }
+};
+
+// IE6/7 do not support getting/setting some attributes with get/setAttribute
+if ( !getSetAttribute ) {
+
+       fixSpecified = {
+               name: true,
+               id: true,
+               coords: true
+       };
+
+       // Use this for any attribute in IE6/7
+       // This fixes almost every IE6/7 issue
+       nodeHook = jQuery.valHooks.button = {
+               get: function( elem, name ) {
+                       var ret;
+                       ret = elem.getAttributeNode( name );
+                       return ret && ( fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified ) ?
+                               ret.nodeValue :
+                               undefined;
+               },
+               set: function( elem, value, name ) {
+                       // Set the existing or create a new attribute node
+                       var ret = elem.getAttributeNode( name );
+                       if ( !ret ) {
+                               ret = document.createAttribute( name );
+                               elem.setAttributeNode( ret );
+                       }
+                       return ( ret.nodeValue = value + "" );
+               }
+       };
+
+       // Apply the nodeHook to tabindex
+       jQuery.attrHooks.tabindex.set = nodeHook.set;
+
+       // Set width and height to auto instead of 0 on empty string( Bug #8150 )
+       // This is for removals
+       jQuery.each([ "width", "height" ], function( i, name ) {
+               jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+                       set: function( elem, value ) {
+                               if ( value === "" ) {
+                                       elem.setAttribute( name, "auto" );
+                                       return value;
+                               }
+                       }
+               });
+       });
+
+       // Set contenteditable to false on removals(#10429)
+       // Setting to empty string throws an error as an invalid value
+       jQuery.attrHooks.contenteditable = {
+               get: nodeHook.get,
+               set: function( elem, value, name ) {
+                       if ( value === "" ) {
+                               value = "false";
+                       }
+                       nodeHook.set( elem, value, name );
+               }
+       };
+}
+
+
+// Some attributes require a special call on IE
+if ( !jQuery.support.hrefNormalized ) {
+       jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
+               jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+                       get: function( elem ) {
+                               var ret = elem.getAttribute( name, 2 );
+                               return ret === null ? undefined : ret;
+                       }
+               });
+       });
+}
+
+if ( !jQuery.support.style ) {
+       jQuery.attrHooks.style = {
+               get: function( elem ) {
+                       // Return undefined in the case of empty string
+                       // Normalize to lowercase since IE uppercases css property names
+                       return elem.style.cssText.toLowerCase() || undefined;
+               },
+               set: function( elem, value ) {
+                       return ( elem.style.cssText = "" + value );
+               }
+       };
+}
+
+// Safari mis-reports the default selected property of an option
+// Accessing the parent's selectedIndex property fixes it
+if ( !jQuery.support.optSelected ) {
+       jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
+               get: function( elem ) {
+                       var parent = elem.parentNode;
+
+                       if ( parent ) {
+                               parent.selectedIndex;
+
+                               // Make sure that it also works with optgroups, see #5701
+                               if ( parent.parentNode ) {
+                                       parent.parentNode.selectedIndex;
+                               }
+                       }
+                       return null;
+               }
+       });
+}
+
+// IE6/7 call enctype encoding
+if ( !jQuery.support.enctype ) {
+       jQuery.propFix.enctype = "encoding";
+}
+
+// Radios and checkboxes getter/setter
+if ( !jQuery.support.checkOn ) {
+       jQuery.each([ "radio", "checkbox" ], function() {
+               jQuery.valHooks[ this ] = {
+                       get: function( elem ) {
+                               // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
+                               return elem.getAttribute("value") === null ? "on" : elem.value;
+                       }
+               };
+       });
+}
+jQuery.each([ "radio", "checkbox" ], function() {
+       jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
+               set: function( elem, value ) {
+                       if ( jQuery.isArray( value ) ) {
+                               return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
+                       }
+               }
+       });
+});
+
+
+
+
+var rformElems = /^(?:textarea|input|select)$/i,
+       rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/,
+       rhoverHack = /(?:^|\s)hover(\.\S+)?\b/,
+       rkeyEvent = /^key/,
+       rmouseEvent = /^(?:mouse|contextmenu)|click/,
+       rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
+       rquickIs = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,
+       quickParse = function( selector ) {
+               var quick = rquickIs.exec( selector );
+               if ( quick ) {
+                       //   0  1    2   3
+                       // [ _, tag, id, class ]
+                       quick[1] = ( quick[1] || "" ).toLowerCase();
+                       quick[3] = quick[3] && new RegExp( "(?:^|\\s)" + quick[3] + "(?:\\s|$)" );
+               }
+               return quick;
+       },
+       quickIs = function( elem, m ) {
+               var attrs = elem.attributes || {};
+               return (
+                       (!m[1] || elem.nodeName.toLowerCase() === m[1]) &&
+                       (!m[2] || (attrs.id || {}).value === m[2]) &&
+                       (!m[3] || m[3].test( (attrs[ "class" ] || {}).value ))
+               );
+       },
+       hoverHack = function( events ) {
+               return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" );
+       };
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+       add: function( elem, types, handler, data, selector ) {
+
+               var elemData, eventHandle, events,
+                       t, tns, type, namespaces, handleObj,
+                       handleObjIn, quick, handlers, special;
+
+               // Don't attach events to noData or text/comment nodes (allow plain objects tho)
+               if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) {
+                       return;
+               }
+
+               // Caller can pass in an object of custom data in lieu of the handler
+               if ( handler.handler ) {
+                       handleObjIn = handler;
+                       handler = handleObjIn.handler;
+                       selector = handleObjIn.selector;
+               }
+
+               // Make sure that the handler has a unique ID, used to find/remove it later
+               if ( !handler.guid ) {
+                       handler.guid = jQuery.guid++;
+               }
+
+               // Init the element's event structure and main handler, if this is the first
+               events = elemData.events;
+               if ( !events ) {
+                       elemData.events = events = {};
+               }
+               eventHandle = elemData.handle;
+               if ( !eventHandle ) {
+                       elemData.handle = eventHandle = function( e ) {
+                               // Discard the second event of a jQuery.event.trigger() and
+                               // when an event is called after a page has unloaded
+                               return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
+                                       jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
+                                       undefined;
+                       };
+                       // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
+                       eventHandle.elem = elem;
+               }
+
+               // Handle multiple events separated by a space
+               // jQuery(...).bind("mouseover mouseout", fn);
+               types = jQuery.trim( hoverHack(types) ).split( " " );
+               for ( t = 0; t < types.length; t++ ) {
+
+                       tns = rtypenamespace.exec( types[t] ) || [];
+                       type = tns[1];
+                       namespaces = ( tns[2] || "" ).split( "." ).sort();
+
+                       // If event changes its type, use the special event handlers for the changed type
+                       special = jQuery.event.special[ type ] || {};
+
+                       // If selector defined, determine special event api type, otherwise given type
+                       type = ( selector ? special.delegateType : special.bindType ) || type;
+
+                       // Update special based on newly reset type
+                       special = jQuery.event.special[ type ] || {};
+
+                       // handleObj is passed to all event handlers
+                       handleObj = jQuery.extend({
+                               type: type,
+                               origType: tns[1],
+                               data: data,
+                               handler: handler,
+                               guid: handler.guid,
+                               selector: selector,
+                               quick: selector && quickParse( selector ),
+                               namespace: namespaces.join(".")
+                       }, handleObjIn );
+
+                       // Init the event handler queue if we're the first
+                       handlers = events[ type ];
+                       if ( !handlers ) {
+                               handlers = events[ type ] = [];
+                               handlers.delegateCount = 0;
+
+                               // Only use addEventListener/attachEvent if the special events handler returns false
+                               if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+                                       // Bind the global event handler to the element
+                                       if ( elem.addEventListener ) {
+                                               elem.addEventListener( type, eventHandle, false );
+
+                                       } else if ( elem.attachEvent ) {
+                                               elem.attachEvent( "on" + type, eventHandle );
+                                       }
+                               }
+                       }
+
+                       if ( special.add ) {
+                               special.add.call( elem, handleObj );
+
+                               if ( !handleObj.handler.guid ) {
+                                       handleObj.handler.guid = handler.guid;
+                               }
+                       }
+
+                       // Add to the element's handler list, delegates in front
+                       if ( selector ) {
+                               handlers.splice( handlers.delegateCount++, 0, handleObj );
+                       } else {
+                               handlers.push( handleObj );
+                       }
+
+                       // Keep track of which events have ever been used, for event optimization
+                       jQuery.event.global[ type ] = true;
+               }
+
+               // Nullify elem to prevent memory leaks in IE
+               elem = null;
+       },
+
+       global: {},
+
+       // Detach an event or set of events from an element
+       remove: function( elem, types, handler, selector, mappedTypes ) {
+
+               var elemData = jQuery.hasData( elem ) && jQuery._data( elem ),
+                       t, tns, type, origType, namespaces, origCount,
+                       j, events, special, handle, eventType, handleObj;
+
+               if ( !elemData || !(events = elemData.events) ) {
+                       return;
+               }
+
+               // Once for each type.namespace in types; type may be omitted
+               types = jQuery.trim( hoverHack( types || "" ) ).split(" ");
+               for ( t = 0; t < types.length; t++ ) {
+                       tns = rtypenamespace.exec( types[t] ) || [];
+                       type = origType = tns[1];
+                       namespaces = tns[2];
+
+                       // Unbind all events (on this namespace, if provided) for the element
+                       if ( !type ) {
+                               for ( type in events ) {
+                                       jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+                               }
+                               continue;
+                       }
+
+                       special = jQuery.event.special[ type ] || {};
+                       type = ( selector? special.delegateType : special.bindType ) || type;
+                       eventType = events[ type ] || [];
+                       origCount = eventType.length;
+                       namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
+
+                       // Remove matching events
+                       for ( j = 0; j < eventType.length; j++ ) {
+                               handleObj = eventType[ j ];
+
+                               if ( ( mappedTypes || origType === handleObj.origType ) &&
+                                        ( !handler || handler.guid === handleObj.guid ) &&
+                                        ( !namespaces || namespaces.test( handleObj.namespace ) ) &&
+                                        ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
+                                       eventType.splice( j--, 1 );
+
+                                       if ( handleObj.selector ) {
+                                               eventType.delegateCount--;
+                                       }
+                                       if ( special.remove ) {
+                                               special.remove.call( elem, handleObj );
+                                       }
+                               }
+                       }
+
+                       // Remove generic event handler if we removed something and no more handlers exist
+                       // (avoids potential for endless recursion during removal of special event handlers)
+                       if ( eventType.length === 0 && origCount !== eventType.length ) {
+                               if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
+                                       jQuery.removeEvent( elem, type, elemData.handle );
+                               }
+
+                               delete events[ type ];
+                       }
+               }
+
+               // Remove the expando if it's no longer used
+               if ( jQuery.isEmptyObject( events ) ) {
+                       handle = elemData.handle;
+                       if ( handle ) {
+                               handle.elem = null;
+                       }
+
+                       // removeData also checks for emptiness and clears the expando if empty
+                       // so use it instead of delete
+                       jQuery.removeData( elem, [ "events", "handle" ], true );
+               }
+       },
+
+       // Events that are safe to short-circuit if no handlers are attached.
+       // Native DOM events should not be added, they may have inline handlers.
+       customEvent: {
+               "getData": true,
+               "setData": true,
+               "changeData": true
+       },
+
+       trigger: function( event, data, elem, onlyHandlers ) {
+               // Don't do events on text and comment nodes
+               if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) {
+                       return;
+               }
+
+               // Event object or event type
+               var type = event.type || event,
+                       namespaces = [],
+                       cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType;
+
+               // focus/blur morphs to focusin/out; ensure we're not firing them right now
+               if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+                       return;
+               }
+
+               if ( type.indexOf( "!" ) >= 0 ) {
+                       // Exclusive events trigger only for the exact event (no namespaces)
+                       type = type.slice(0, -1);
+                       exclusive = true;
+               }
+
+               if ( type.indexOf( "." ) >= 0 ) {
+                       // Namespaced trigger; create a regexp to match event type in handle()
+                       namespaces = type.split(".");
+                       type = namespaces.shift();
+                       namespaces.sort();
+               }
+
+               if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
+                       // No jQuery handlers for this event type, and it can't have inline handlers
+                       return;
+               }
+
+               // Caller can pass in an Event, Object, or just an event type string
+               event = typeof event === "object" ?
+                       // jQuery.Event object
+                       event[ jQuery.expando ] ? event :
+                       // Object literal
+                       new jQuery.Event( type, event ) :
+                       // Just the event type (string)
+                       new jQuery.Event( type );
+
+               event.type = type;
+               event.isTrigger = true;
+               event.exclusive = exclusive;
+               event.namespace = namespaces.join( "." );
+               event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
+               ontype = type.indexOf( ":" ) < 0 ? "on" + type : "";
+
+               // Handle a global trigger
+               if ( !elem ) {
+
+                       // TODO: Stop taunting the data cache; remove global events and always attach to document
+                       cache = jQuery.cache;
+                       for ( i in cache ) {
+                               if ( cache[ i ].events && cache[ i ].events[ type ] ) {
+                                       jQuery.event.trigger( event, data, cache[ i ].handle.elem, true );
+                               }
+                       }
+                       return;
+               }
+
+               // Clean up the event in case it is being reused
+               event.result = undefined;
+               if ( !event.target ) {
+                       event.target = elem;
+               }
+
+               // Clone any incoming data and prepend the event, creating the handler arg list
+               data = data != null ? jQuery.makeArray( data ) : [];
+               data.unshift( event );
+
+               // Allow special events to draw outside the lines
+               special = jQuery.event.special[ type ] || {};
+               if ( special.trigger && special.trigger.apply( elem, data ) === false ) {
+                       return;
+               }
+
+               // Determine event propagation path in advance, per W3C events spec (#9951)
+               // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+               eventPath = [[ elem, special.bindType || type ]];
+               if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+
+                       bubbleType = special.delegateType || type;
+                       cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode;
+                       old = null;
+                       for ( ; cur; cur = cur.parentNode ) {
+                               eventPath.push([ cur, bubbleType ]);
+                               old = cur;
+                       }
+
+                       // Only add window if we got to document (e.g., not plain obj or detached DOM)
+                       if ( old && old === elem.ownerDocument ) {
+                               eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]);
+                       }
+               }
+
+               // Fire handlers on the event path
+               for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) {
+
+                       cur = eventPath[i][0];
+                       event.type = eventPath[i][1];
+
+                       handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
+                       if ( handle ) {
+                               handle.apply( cur, data );
+                       }
+                       // Note that this is a bare JS function and not a jQuery handler
+                       handle = ontype && cur[ ontype ];
+                       if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) {
+                               event.preventDefault();
+                       }
+               }
+               event.type = type;
+
+               // If nobody prevented the default action, do it now
+               if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+                       if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&
+                               !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
+
+                               // Call a native DOM method on the target with the same name name as the event.
+                               // Can't use an .isFunction() check here because IE6/7 fails that test.
+                               // Don't do default actions on window, that's where global variables be (#6170)
+                               // IE<9 dies on focus/blur to hidden element (#1486)
+                               if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) {
+
+                                       // Don't re-trigger an onFOO event when we call its FOO() method
+                                       old = elem[ ontype ];
+
+                                       if ( old ) {
+                                               elem[ ontype ] = null;
+                                       }
+
+                                       // Prevent re-triggering of the same event, since we already bubbled it above
+                                       jQuery.event.triggered = type;
+                                       elem[ type ]();
+                                       jQuery.event.triggered = undefined;
+
+                                       if ( old ) {
+                                               elem[ ontype ] = old;
+                                       }
+                               }
+                       }
+               }
+
+               return event.result;
+       },
+
+       dispatch: function( event ) {
+
+               // Make a writable jQuery.Event from the native event object
+               event = jQuery.event.fix( event || window.event );
+
+               var handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []),
+                       delegateCount = handlers.delegateCount,
+                       args = [].slice.call( arguments, 0 ),
+                       run_all = !event.exclusive && !event.namespace,
+                       special = jQuery.event.special[ event.type ] || {},
+                       handlerQueue = [],
+                       i, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related;
+
+               // Use the fix-ed jQuery.Event rather than the (read-only) native event
+               args[0] = event;
+               event.delegateTarget = this;
+
+               // Call the preDispatch hook for the mapped type, and let it bail if desired
+               if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+                       return;
+               }
+
+               // Determine handlers that should run if there are delegated events
+               // Avoid non-left-click bubbling in Firefox (#3861)
+               if ( delegateCount && !(event.button && event.type === "click") ) {
+
+                       // Pregenerate a single jQuery object for reuse with .is()
+                       jqcur = jQuery(this);
+                       jqcur.context = this.ownerDocument || this;
+
+                       for ( cur = event.target; cur != this; cur = cur.parentNode || this ) {
+
+                               // Don't process events on disabled elements (#6911, #8165)
+                               if ( cur.disabled !== true ) {
+                                       selMatch = {};
+                                       matches = [];
+                                       jqcur[0] = cur;
+                                       for ( i = 0; i < delegateCount; i++ ) {
+                                               handleObj = handlers[ i ];
+                                               sel = handleObj.selector;
+
+                                               if ( selMatch[ sel ] === undefined ) {
+                                                       selMatch[ sel ] = (
+                                                               handleObj.quick ? quickIs( cur, handleObj.quick ) : jqcur.is( sel )
+                                                       );
+                                               }
+                                               if ( selMatch[ sel ] ) {
+                                                       matches.push( handleObj );
+                                               }
+                                       }
+                                       if ( matches.length ) {
+                                               handlerQueue.push({ elem: cur, matches: matches });
+                                       }
+                               }
+                       }
+               }
+
+               // Add the remaining (directly-bound) handlers
+               if ( handlers.length > delegateCount ) {
+                       handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) });
+               }
+
+               // Run delegates first; they may want to stop propagation beneath us
+               for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) {
+                       matched = handlerQueue[ i ];
+                       event.currentTarget = matched.elem;
+
+                       for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) {
+                               handleObj = matched.matches[ j ];
+
+                               // Triggered event must either 1) be non-exclusive and have no namespace, or
+                               // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
+                               if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) {
+
+                                       event.data = handleObj.data;
+                                       event.handleObj = handleObj;
+
+                                       ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
+                                                       .apply( matched.elem, args );
+
+                                       if ( ret !== undefined ) {
+                                               event.result = ret;
+                                               if ( ret === false ) {
+                                                       event.preventDefault();
+                                                       event.stopPropagation();
+                                               }
+                                       }
+                               }
+                       }
+               }
+
+               // Call the postDispatch hook for the mapped type
+               if ( special.postDispatch ) {
+                       special.postDispatch.call( this, event );
+               }
+
+               return event.result;
+       },
+
+       // Includes some event props shared by KeyEvent and MouseEvent
+       // *** attrChange attrName relatedNode srcElement  are not normalized, non-W3C, deprecated, will be removed in 1.8 ***
+       props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
+
+       fixHooks: {},
+
+       keyHooks: {
+               props: "char charCode key keyCode".split(" "),
+               filter: function( event, original ) {
+
+                       // Add which for key events
+                       if ( event.which == null ) {
+                               event.which = original.charCode != null ? original.charCode : original.keyCode;
+                       }
+
+                       return event;
+               }
+       },
+
+       mouseHooks: {
+               props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
+               filter: function( event, original ) {
+                       var eventDoc, doc, body,
+                               button = original.button,
+                               fromElement = original.fromElement;
+
+                       // Calculate pageX/Y if missing and clientX/Y available
+                       if ( event.pageX == null && original.clientX != null ) {
+                               eventDoc = event.target.ownerDocument || document;
+                               doc = eventDoc.documentElement;
+                               body = eventDoc.body;
+
+                               event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
+                               event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
+                       }
+
+                       // Add relatedTarget, if necessary
+                       if ( !event.relatedTarget && fromElement ) {
+                               event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
+                       }
+
+                       // Add which for click: 1 === left; 2 === middle; 3 === right
+                       // Note: button is not normalized, so don't use it
+                       if ( !event.which && button !== undefined ) {
+                               event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
+                       }
+
+                       return event;
+               }
+       },
+
+       fix: function( event ) {
+               if ( event[ jQuery.expando ] ) {
+                       return event;
+               }
+
+               // Create a writable copy of the event object and normalize some properties
+               var i, prop,
+                       originalEvent = event,
+                       fixHook = jQuery.event.fixHooks[ event.type ] || {},
+                       copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
+
+               event = jQuery.Event( originalEvent );
+
+               for ( i = copy.length; i; ) {
+                       prop = copy[ --i ];
+                       event[ prop ] = originalEvent[ prop ];
+               }
+
+               // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2)
+               if ( !event.target ) {
+                       event.target = originalEvent.srcElement || document;
+               }
+
+               // Target should not be a text node (#504, Safari)
+               if ( event.target.nodeType === 3 ) {
+                       event.target = event.target.parentNode;
+               }
+
+               // For mouse/key events; add metaKey if it's not there (#3368, IE6/7/8)
+               if ( event.metaKey === undefined ) {
+                       event.metaKey = event.ctrlKey;
+               }
+
+               return fixHook.filter? fixHook.filter( event, originalEvent ) : event;
+       },
+
+       special: {
+               ready: {
+                       // Make sure the ready event is setup
+                       setup: jQuery.bindReady
+               },
+
+               load: {
+                       // Prevent triggered image.load events from bubbling to window.load
+                       noBubble: true
+               },
+
+               focus: {
+                       delegateType: "focusin"
+               },
+               blur: {
+                       delegateType: "focusout"
+               },
+
+               beforeunload: {
+                       setup: function( data, namespaces, eventHandle ) {
+                               // We only want to do this special case on windows
+                               if ( jQuery.isWindow( this ) ) {
+                                       this.onbeforeunload = eventHandle;
+                               }
+                       },
+
+                       teardown: function( namespaces, eventHandle ) {
+                               if ( this.onbeforeunload === eventHandle ) {
+                                       this.onbeforeunload = null;
+                               }
+                       }
+               }
+       },
+
+       simulate: function( type, elem, event, bubble ) {
+               // Piggyback on a donor event to simulate a different one.
+               // Fake originalEvent to avoid donor's stopPropagation, but if the
+               // simulated event prevents default then we do the same on the donor.
+               var e = jQuery.extend(
+                       new jQuery.Event(),
+                       event,
+                       { type: type,
+                               isSimulated: true,
+                               originalEvent: {}
+                       }
+               );
+               if ( bubble ) {
+                       jQuery.event.trigger( e, null, elem );
+               } else {
+                       jQuery.event.dispatch.call( elem, e );
+               }
+               if ( e.isDefaultPrevented() ) {
+                       event.preventDefault();
+               }
+       }
+};
+
+// Some plugins are using, but it's undocumented/deprecated and will be removed.
+// The 1.7 special event interface should provide all the hooks needed now.
+jQuery.event.handle = jQuery.event.dispatch;
+
+jQuery.removeEvent = document.removeEventListener ?
+       function( elem, type, handle ) {
+               if ( elem.removeEventListener ) {
+                       elem.removeEventListener( type, handle, false );
+               }
+       } :
+       function( elem, type, handle ) {
+               if ( elem.detachEvent ) {
+                       elem.detachEvent( "on" + type, handle );
+               }
+       };
+
+jQuery.Event = function( src, props ) {
+       // Allow instantiation without the 'new' keyword
+       if ( !(this instanceof jQuery.Event) ) {
+               return new jQuery.Event( src, props );
+       }
+
+       // Event object
+       if ( src && src.type ) {
+               this.originalEvent = src;
+               this.type = src.type;
+
+               // Events bubbling up the document may have been marked as prevented
+               // by a handler lower down the tree; reflect the correct value.
+               this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
+                       src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
+
+       // Event type
+       } else {
+               this.type = src;
+       }
+
+       // Put explicitly provided properties onto the event object
+       if ( props ) {
+               jQuery.extend( this, props );
+       }
+
+       // Create a timestamp if incoming event doesn't have one
+       this.timeStamp = src && src.timeStamp || jQuery.now();
+
+       // Mark it as fixed
+       this[ jQuery.expando ] = true;
+};
+
+function returnFalse() {
+       return false;
+}
+function returnTrue() {
+       return true;
+}
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+       preventDefault: function() {
+               this.isDefaultPrevented = returnTrue;
+
+               var e = this.originalEvent;
+               if ( !e ) {
+                       return;
+               }
+
+               // if preventDefault exists run it on the original event
+               if ( e.preventDefault ) {
+                       e.preventDefault();
+
+               // otherwise set the returnValue property of the original event to false (IE)
+               } else {
+                       e.returnValue = false;
+               }
+       },
+       stopPropagation: function() {
+               this.isPropagationStopped = returnTrue;
+
+               var e = this.originalEvent;
+               if ( !e ) {
+                       return;
+               }
+               // if stopPropagation exists run it on the original event
+               if ( e.stopPropagation ) {
+                       e.stopPropagation();
+               }
+               // otherwise set the cancelBubble property of the original event to true (IE)
+               e.cancelBubble = true;
+       },
+       stopImmediatePropagation: function() {
+               this.isImmediatePropagationStopped = returnTrue;
+               this.stopPropagation();
+       },
+       isDefaultPrevented: returnFalse,
+       isPropagationStopped: returnFalse,
+       isImmediatePropagationStopped: returnFalse
+};
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+jQuery.each({
+       mouseenter: "mouseover",
+       mouseleave: "mouseout"
+}, function( orig, fix ) {
+       jQuery.event.special[ orig ] = {
+               delegateType: fix,
+               bindType: fix,
+
+               handle: function( event ) {
+                       var target = this,
+                               related = event.relatedTarget,
+                               handleObj = event.handleObj,
+                               selector = handleObj.selector,
+                               ret;
+
+                       // For mousenter/leave call the handler if related is outside the target.
+                       // NB: No relatedTarget if the mouse left/entered the browser window
+                       if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
+                               event.type = handleObj.origType;
+                               ret = handleObj.handler.apply( this, arguments );
+                               event.type = fix;
+                       }
+                       return ret;
+               }
+       };
+});
+
+// IE submit delegation
+if ( !jQuery.support.submitBubbles ) {
+
+       jQuery.event.special.submit = {
+               setup: function() {
+                       // Only need this for delegated form submit events
+                       if ( jQuery.nodeName( this, "form" ) ) {
+                               return false;
+                       }
+
+                       // Lazy-add a submit handler when a descendant form may potentially be submitted
+                       jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
+                               // Node name check avoids a VML-related crash in IE (#9807)
+                               var elem = e.target,
+                                       form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
+                               if ( form && !form._submit_attached ) {
+                                       jQuery.event.add( form, "submit._submit", function( event ) {
+                                               event._submit_bubble = true;
+                                       });
+                                       form._submit_attached = true;
+                               }
+                       });
+                       // return undefined since we don't need an event listener
+               },
+               
+               postDispatch: function( event ) {
+                       // If form was submitted by the user, bubble the event up the tree
+                       if ( event._submit_bubble ) {
+                               delete event._submit_bubble;
+                               if ( this.parentNode && !event.isTrigger ) {
+                                       jQuery.event.simulate( "submit", this.parentNode, event, true );
+                               }
+                       }
+               },
+
+               teardown: function() {
+                       // Only need this for delegated form submit events
+                       if ( jQuery.nodeName( this, "form" ) ) {
+                               return false;
+                       }
+
+                       // Remove delegated handlers; cleanData eventually reaps submit handlers attached above
+                       jQuery.event.remove( this, "._submit" );
+               }
+       };
+}
+
+// IE change delegation and checkbox/radio fix
+if ( !jQuery.support.changeBubbles ) {
+
+       jQuery.event.special.change = {
+
+               setup: function() {
+
+                       if ( rformElems.test( this.nodeName ) ) {
+                               // IE doesn't fire change on a check/radio until blur; trigger it on click
+                               // after a propertychange. Eat the blur-change in special.change.handle.
+                               // This still fires onchange a second time for check/radio after blur.
+                               if ( this.type === "checkbox" || this.type === "radio" ) {
+                                       jQuery.event.add( this, "propertychange._change", function( event ) {
+                                               if ( event.originalEvent.propertyName === "checked" ) {
+                                                       this._just_changed = true;
+                                               }
+                                       });
+                                       jQuery.event.add( this, "click._change", function( event ) {
+                                               if ( this._just_changed && !event.isTrigger ) {
+                                                       this._just_changed = false;
+                                                       jQuery.event.simulate( "change", this, event, true );
+                                               }
+                                       });
+                               }
+                               return false;
+                       }
+                       // Delegated event; lazy-add a change handler on descendant inputs
+                       jQuery.event.add( this, "beforeactivate._change", function( e ) {
+                               var elem = e.target;
+
+                               if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) {
+                                       jQuery.event.add( elem, "change._change", function( event ) {
+                                               if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
+                                                       jQuery.event.simulate( "change", this.parentNode, event, true );
+                                               }
+                                       });
+                                       elem._change_attached = true;
+                               }
+                       });
+               },
+
+               handle: function( event ) {
+                       var elem = event.target;
+
+                       // Swallow native change events from checkbox/radio, we already triggered them above
+                       if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
+                               return event.handleObj.handler.apply( this, arguments );
+                       }
+               },
+
+               teardown: function() {
+                       jQuery.event.remove( this, "._change" );
+
+                       return rformElems.test( this.nodeName );
+               }
+       };
+}
+
+// Create "bubbling" focus and blur events
+if ( !jQuery.support.focusinBubbles ) {
+       jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+               // Attach a single capturing handler while someone wants focusin/focusout
+               var attaches = 0,
+                       handler = function( event ) {
+                               jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
+                       };
+
+               jQuery.event.special[ fix ] = {
+                       setup: function() {
+                               if ( attaches++ === 0 ) {
+                                       document.addEventListener( orig, handler, true );
+                               }
+                       },
+                       teardown: function() {
+                               if ( --attaches === 0 ) {
+                                       document.removeEventListener( orig, handler, true );
+                               }
+                       }
+               };
+       });
+}
+
+jQuery.fn.extend({
+
+       on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
+               var origFn, type;
+
+               // Types can be a map of types/handlers
+               if ( typeof types === "object" ) {
+                       // ( types-Object, selector, data )
+                       if ( typeof selector !== "string" ) { // && selector != null
+                               // ( types-Object, data )
+                               data = data || selector;
+                               selector = undefined;
+                       }
+                       for ( type in types ) {
+                               this.on( type, selector, data, types[ type ], one );
+                       }
+                       return this;
+               }
+
+               if ( data == null && fn == null ) {
+                       // ( types, fn )
+                       fn = selector;
+                       data = selector = undefined;
+               } else if ( fn == null ) {
+                       if ( typeof selector === "string" ) {
+                               // ( types, selector, fn )
+                               fn = data;
+                               data = undefined;
+                       } else {
+                               // ( types, data, fn )
+                               fn = data;
+                               data = selector;
+                               selector = undefined;
+                       }
+               }
+               if ( fn === false ) {
+                       fn = returnFalse;
+               } else if ( !fn ) {
+                       return this;
+               }
+
+               if ( one === 1 ) {
+                       origFn = fn;
+                       fn = function( event ) {
+                               // Can use an empty set, since event contains the info
+                               jQuery().off( event );
+                               return origFn.apply( this, arguments );
+                       };
+                       // Use same guid so caller can remove using origFn
+                       fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+               }
+               return this.each( function() {
+                       jQuery.event.add( this, types, fn, data, selector );
+               });
+       },
+       one: function( types, selector, data, fn ) {
+               return this.on( types, selector, data, fn, 1 );
+       },
+       off: function( types, selector, fn ) {
+               if ( types && types.preventDefault && types.handleObj ) {
+                       // ( event )  dispatched jQuery.Event
+                       var handleObj = types.handleObj;
+                       jQuery( types.delegateTarget ).off(
+                               handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
+                               handleObj.selector,
+                               handleObj.handler
+                       );
+                       return this;
+               }
+               if ( typeof types === "object" ) {
+                       // ( types-object [, selector] )
+                       for ( var type in types ) {
+                               this.off( type, selector, types[ type ] );
+                       }
+                       return this;
+               }
+               if ( selector === false || typeof selector === "function" ) {
+                       // ( types [, fn] )
+                       fn = selector;
+                       selector = undefined;
+               }
+               if ( fn === false ) {
+                       fn = returnFalse;
+               }
+               return this.each(function() {
+                       jQuery.event.remove( this, types, fn, selector );
+               });
+       },
+
+       bind: function( types, data, fn ) {
+               return this.on( types, null, data, fn );
+       },
+       unbind: function( types, fn ) {
+               return this.off( types, null, fn );
+       },
+
+       live: function( types, data, fn ) {
+               jQuery( this.context ).on( types, this.selector, data, fn );
+               return this;
+       },
+       die: function( types, fn ) {
+               jQuery( this.context ).off( types, this.selector || "**", fn );
+               return this;
+       },
+
+       delegate: function( selector, types, data, fn ) {
+               return this.on( types, selector, data, fn );
+       },
+       undelegate: function( selector, types, fn ) {
+               // ( namespace ) or ( selector, types [, fn] )
+               return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn );
+       },
+
+       trigger: function( type, data ) {
+               return this.each(function() {
+                       jQuery.event.trigger( type, data, this );
+               });
+       },
+       triggerHandler: function( type, data ) {
+               if ( this[0] ) {
+                       return jQuery.event.trigger( type, data, this[0], true );
+               }
+       },
+
+       toggle: function( fn ) {
+               // Save reference to arguments for access in closure
+               var args = arguments,
+                       guid = fn.guid || jQuery.guid++,
+                       i = 0,
+                       toggler = function( event ) {
+                               // Figure out which function to execute
+                               var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i;
+                               jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 );
+
+                               // Make sure that clicks stop
+                               event.preventDefault();
+
+                               // and execute the function
+                               return args[ lastToggle ].apply( this, arguments ) || false;
+                       };
+
+               // link all the functions, so any of them can unbind this click handler
+               toggler.guid = guid;
+               while ( i < args.length ) {
+                       args[ i++ ].guid = guid;
+               }
+
+               return this.click( toggler );
+       },
+
+       hover: function( fnOver, fnOut ) {
+               return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+       }
+});
+
+jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
+       "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+       "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
+
+       // Handle event binding
+       jQuery.fn[ name ] = function( data, fn ) {
+               if ( fn == null ) {
+                       fn = data;
+                       data = null;
+               }
+
+               return arguments.length > 0 ?
+                       this.on( name, null, data, fn ) :
+                       this.trigger( name );
+       };
+
+       if ( jQuery.attrFn ) {
+               jQuery.attrFn[ name ] = true;
+       }
+
+       if ( rkeyEvent.test( name ) ) {
+               jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks;
+       }
+
+       if ( rmouseEvent.test( name ) ) {
+               jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks;
+       }
+});
+
+
+
+/*!
+ * Sizzle CSS Selector Engine
+ *  Copyright 2011, The Dojo Foundation
+ *  Released under the MIT, BSD, and GPL Licenses.
+ *  More information: http://sizzlejs.com/
+ */
+(function(){
+
+var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
+       expando = "sizcache" + (Math.random() + '').replace('.', ''),
+       done = 0,
+       toString = Object.prototype.toString,
+       hasDuplicate = false,
+       baseHasDuplicate = true,
+       rBackslash = /\\/g,
+       rReturn = /\r\n/g,
+       rNonWord = /\W/;
+
+// Here we check if the JavaScript engine is using some sort of
+// optimization where it does not always call our comparision
+// function. If that is the case, discard the hasDuplicate value.
+//   Thus far that includes Google Chrome.
+[0, 0].sort(function() {
+       baseHasDuplicate = false;
+       return 0;
+});
+
+var Sizzle = function( selector, context, results, seed ) {
+       results = results || [];
+       context = context || document;
+
+       var origContext = context;
+
+       if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
+               return [];
+       }
+
+       if ( !selector || typeof selector !== "string" ) {
+               return results;
+       }
+
+       var m, set, checkSet, extra, ret, cur, pop, i,
+               prune = true,
+               contextXML = Sizzle.isXML( context ),
+               parts = [],
+               soFar = selector;
+
+       // Reset the position of the chunker regexp (start from head)
+       do {
+               chunker.exec( "" );
+               m = chunker.exec( soFar );
+
+               if ( m ) {
+                       soFar = m[3];
+
+                       parts.push( m[1] );
+
+                       if ( m[2] ) {
+                               extra = m[3];
+                               break;
+                       }
+               }
+       } while ( m );
+
+       if ( parts.length > 1 && origPOS.exec( selector ) ) {
+
+               if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
+                       set = posProcess( parts[0] + parts[1], context, seed );
+
+               } else {
+                       set = Expr.relative[ parts[0] ] ?
+                               [ context ] :
+                               Sizzle( parts.shift(), context );
+
+                       while ( parts.length ) {
+                               selector = parts.shift();
+
+                               if ( Expr.relative[ selector ] ) {
+                                       selector += parts.shift();
+                               }
+
+                               set = posProcess( selector, set, seed );
+                       }
+               }
+
+       } else {
+               // Take a shortcut and set the context if the root selector is an ID
+               // (but not if it'll be faster if the inner selector is an ID)
+               if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
+                               Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
+
+                       ret = Sizzle.find( parts.shift(), context, contextXML );
+                       context = ret.expr ?
+                               Sizzle.filter( ret.expr, ret.set )[0] :
+                               ret.set[0];
+               }
+
+               if ( context ) {
+                       ret = seed ?
+                               { expr: parts.pop(), set: makeArray(seed) } :
+                               Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
+
+                       set = ret.expr ?
+                               Sizzle.filter( ret.expr, ret.set ) :
+                               ret.set;
+
+                       if ( parts.length > 0 ) {
+                               checkSet = makeArray( set );
+
+                       } else {
+                               prune = false;
+                       }
+
+                       while ( parts.length ) {
+                               cur = parts.pop();
+                               pop = cur;
+
+                               if ( !Expr.relative[ cur ] ) {
+                                       cur = "";
+                               } else {
+                                       pop = parts.pop();
+                               }
+
+                               if ( pop == null ) {
+                                       pop = context;
+                               }
+
+                               Expr.relative[ cur ]( checkSet, pop, contextXML );
+                       }
+
+               } else {
+                       checkSet = parts = [];
+               }
+       }
+
+       if ( !checkSet ) {
+               checkSet = set;
+       }
+
+       if ( !checkSet ) {
+               Sizzle.error( cur || selector );
+       }
+
+       if ( toString.call(checkSet) === "[object Array]" ) {
+               if ( !prune ) {
+                       results.push.apply( results, checkSet );
+
+               } else if ( context && context.nodeType === 1 ) {
+                       for ( i = 0; checkSet[i] != null; i++ ) {
+                               if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
+                                       results.push( set[i] );
+                               }
+                       }
+
+               } else {
+                       for ( i = 0; checkSet[i] != null; i++ ) {
+                               if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
+                                       results.push( set[i] );
+                               }
+                       }
+               }
+
+       } else {
+               makeArray( checkSet, results );
+       }
+
+       if ( extra ) {
+               Sizzle( extra, origContext, results, seed );
+               Sizzle.uniqueSort( results );
+       }
+
+       return results;
+};
+
+Sizzle.uniqueSort = function( results ) {
+       if ( sortOrder ) {
+               hasDuplicate = baseHasDuplicate;
+               results.sort( sortOrder );
+
+               if ( hasDuplicate ) {
+                       for ( var i = 1; i < results.length; i++ ) {
+                               if ( results[i] === results[ i - 1 ] ) {
+                                       results.splice( i--, 1 );
+                               }
+                       }
+               }
+       }
+
+       return results;
+};
+
+Sizzle.matches = function( expr, set ) {
+       return Sizzle( expr, null, null, set );
+};
+
+Sizzle.matchesSelector = function( node, expr ) {
+       return Sizzle( expr, null, null, [node] ).length > 0;
+};
+
+Sizzle.find = function( expr, context, isXML ) {
+       var set, i, len, match, type, left;
+
+       if ( !expr ) {
+               return [];
+       }
+
+       for ( i = 0, len = Expr.order.length; i < len; i++ ) {
+               type = Expr.order[i];
+
+               if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
+                       left = match[1];
+                       match.splice( 1, 1 );
+
+                       if ( left.substr( left.length - 1 ) !== "\\" ) {
+                               match[1] = (match[1] || "").replace( rBackslash, "" );
+                               set = Expr.find[ type ]( match, context, isXML );
+
+                               if ( set != null ) {
+                                       expr = expr.replace( Expr.match[ type ], "" );
+                                       break;
+                               }
+                       }
+               }
+       }
+
+       if ( !set ) {
+               set = typeof context.getElementsByTagName !== "undefined" ?
+                       context.getElementsByTagName( "*" ) :
+                       [];
+       }
+
+       return { set: set, expr: expr };
+};
+
+Sizzle.filter = function( expr, set, inplace, not ) {
+       var match, anyFound,
+               type, found, item, filter, left,
+               i, pass,
+               old = expr,
+               result = [],
+               curLoop = set,
+               isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
+
+       while ( expr && set.length ) {
+               for ( type in Expr.filter ) {
+                       if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
+                               filter = Expr.filter[ type ];
+                               left = match[1];
+
+                               anyFound = false;
+
+                               match.splice(1,1);
+
+                               if ( left.substr( left.length - 1 ) === "\\" ) {
+                                       continue;
+                               }
+
+                               if ( curLoop === result ) {
+                                       result = [];
+                               }
+
+                               if ( Expr.preFilter[ type ] ) {
+                                       match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
+
+                                       if ( !match ) {
+                                               anyFound = found = true;
+
+                                       } else if ( match === true ) {
+                                               continue;
+                                       }
+                               }
+
+                               if ( match ) {
+                                       for ( i = 0; (item = curLoop[i]) != null; i++ ) {
+                                               if ( item ) {
+                                                       found = filter( item, match, i, curLoop );
+                                                       pass = not ^ found;
+
+                                                       if ( inplace && found != null ) {
+                                                               if ( pass ) {
+                                                                       anyFound = true;
+
+                                                               } else {
+                                                                       curLoop[i] = false;
+                                                               }
+
+                                                       } else if ( pass ) {
+                                                               result.push( item );
+                                                               anyFound = true;
+                                                       }
+                                               }
+                                       }
+                               }
+
+                               if ( found !== undefined ) {
+                                       if ( !inplace ) {
+                                               curLoop = result;
+                                       }
+
+                                       expr = expr.replace( Expr.match[ type ], "" );
+
+                                       if ( !anyFound ) {
+                                               return [];
+                                       }
+
+                                       break;
+                               }
+                       }
+               }
+
+               // Improper expression
+               if ( expr === old ) {
+                       if ( anyFound == null ) {
+                               Sizzle.error( expr );
+
+                       } else {
+                               break;
+                       }
+               }
+
+               old = expr;
+       }
+
+       return curLoop;
+};
+
+Sizzle.error = function( msg ) {
+       throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+/**
+ * Utility function for retreiving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+var getText = Sizzle.getText = function( elem ) {
+    var i, node,
+               nodeType = elem.nodeType,
+               ret = "";
+
+       if ( nodeType ) {
+               if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+                       // Use textContent || innerText for elements
+                       if ( typeof elem.textContent === 'string' ) {
+                               return elem.textContent;
+                       } else if ( typeof elem.innerText === 'string' ) {
+                               // Replace IE's carriage returns
+                               return elem.innerText.replace( rReturn, '' );
+                       } else {
+                               // Traverse it's children
+                               for ( elem = elem.firstChild; elem; elem = elem.nextSibling) {
+                                       ret += getText( elem );
+                               }
+                       }
+               } else if ( nodeType === 3 || nodeType === 4 ) {
+                       return elem.nodeValue;
+               }
+       } else {
+
+               // If no nodeType, this is expected to be an array
+               for ( i = 0; (node = elem[i]); i++ ) {
+                       // Do not traverse comment nodes
+                       if ( node.nodeType !== 8 ) {
+                               ret += getText( node );
+                       }
+               }
+       }
+       return ret;
+};
+
+var Expr = Sizzle.selectors = {
+       order: [ "ID", "NAME", "TAG" ],
+
+       match: {
+               ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
+               CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
+               NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
+               ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
+               TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
+               CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
+               POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
+               PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
+       },
+
+       leftMatch: {},
+
+       attrMap: {
+               "class": "className",
+               "for": "htmlFor"
+       },
+
+       attrHandle: {
+               href: function( elem ) {
+                       return elem.getAttribute( "href" );
+               },
+               type: function( elem ) {
+                       return elem.getAttribute( "type" );
+               }
+       },
+
+       relative: {
+               "+": function(checkSet, part){
+                       var isPartStr = typeof part === "string",
+                               isTag = isPartStr && !rNonWord.test( part ),
+                               isPartStrNotTag = isPartStr && !isTag;
+
+                       if ( isTag ) {
+                               part = part.toLowerCase();
+                       }
+
+                       for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
+                               if ( (elem = checkSet[i]) ) {
+                                       while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
+
+                                       checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
+                                               elem || false :
+                                               elem === part;
+                               }
+                       }
+
+                       if ( isPartStrNotTag ) {
+                               Sizzle.filter( part, checkSet, true );
+                       }
+               },
+
+               ">": function( checkSet, part ) {
+                       var elem,
+                               isPartStr = typeof part === "string",
+                               i = 0,
+                               l = checkSet.length;
+
+                       if ( isPartStr && !rNonWord.test( part ) ) {
+                               part = part.toLowerCase();
+
+                               for ( ; i < l; i++ ) {
+                                       elem = checkSet[i];
+
+                                       if ( elem ) {
+                                               var parent = elem.parentNode;
+                                               checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
+                                       }
+                               }
+
+                       } else {
+                               for ( ; i < l; i++ ) {
+                                       elem = checkSet[i];
+
+                                       if ( elem ) {
+                                               checkSet[i] = isPartStr ?
+                                                       elem.parentNode :
+                                                       elem.parentNode === part;
+                                       }
+                               }
+
+                               if ( isPartStr ) {
+                                       Sizzle.filter( part, checkSet, true );
+                               }
+                       }
+               },
+
+               "": function(checkSet, part, isXML){
+                       var nodeCheck,
+                               doneName = done++,
+                               checkFn = dirCheck;
+
+                       if ( typeof part === "string" && !rNonWord.test( part ) ) {
+                               part = part.toLowerCase();
+                               nodeCheck = part;
+                               checkFn = dirNodeCheck;
+                       }
+
+                       checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
+               },
+
+               "~": function( checkSet, part, isXML ) {
+                       var nodeCheck,
+                               doneName = done++,
+                               checkFn = dirCheck;
+
+                       if ( typeof part === "string" && !rNonWord.test( part ) ) {
+                               part = part.toLowerCase();
+                               nodeCheck = part;
+                               checkFn = dirNodeCheck;
+                       }
+
+                       checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
+               }
+       },
+
+       find: {
+               ID: function( match, context, isXML ) {
+                       if ( typeof context.getElementById !== "undefined" && !isXML ) {
+                               var m = context.getElementById(match[1]);
+                               // Check parentNode to catch when Blackberry 4.6 returns
+                               // nodes that are no longer in the document #6963
+                               return m && m.parentNode ? [m] : [];
+                       }
+               },
+
+               NAME: function( match, context ) {
+                       if ( typeof context.getElementsByName !== "undefined" ) {
+                               var ret = [],
+                                       results = context.getElementsByName( match[1] );
+
+                               for ( var i = 0, l = results.length; i < l; i++ ) {
+                                       if ( results[i].getAttribute("name") === match[1] ) {
+                                               ret.push( results[i] );
+                                       }
+                               }
+
+                               return ret.length === 0 ? null : ret;
+                       }
+               },
+
+               TAG: function( match, context ) {
+                       if ( typeof context.getElementsByTagName !== "undefined" ) {
+                               return context.getElementsByTagName( match[1] );
+                       }
+               }
+       },
+       preFilter: {
+               CLASS: function( match, curLoop, inplace, result, not, isXML ) {
+                       match = " " + match[1].replace( rBackslash, "" ) + " ";
+
+                       if ( isXML ) {
+                               return match;
+                       }
+
+                       for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
+                               if ( elem ) {
+                                       if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
+                                               if ( !inplace ) {
+                                                       result.push( elem );
+                                               }
+
+                                       } else if ( inplace ) {
+                                               curLoop[i] = false;
+                                       }
+                               }
+                       }
+
+                       return false;
+               },
+
+               ID: function( match ) {
+                       return match[1].replace( rBackslash, "" );
+               },
+
+               TAG: function( match, curLoop ) {
+                       return match[1].replace( rBackslash, "" ).toLowerCase();
+               },
+
+               CHILD: function( match ) {
+                       if ( match[1] === "nth" ) {
+                               if ( !match[2] ) {
+                                       Sizzle.error( match[0] );
+                               }
+
+                               match[2] = match[2].replace(/^\+|\s*/g, '');
+
+                               // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
+                               var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
+                                       match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
+                                       !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
+
+                               // calculate the numbers (first)n+(last) including if they are negative
+                               match[2] = (test[1] + (test[2] || 1)) - 0;
+                               match[3] = test[3] - 0;
+                       }
+                       else if ( match[2] ) {
+                               Sizzle.error( match[0] );
+                       }
+
+                       // TODO: Move to normal caching system
+                       match[0] = done++;
+
+                       return match;
+               },
+
+               ATTR: function( match, curLoop, inplace, result, not, isXML ) {
+                       var name = match[1] = match[1].replace( rBackslash, "" );
+
+                       if ( !isXML && Expr.attrMap[name] ) {
+                               match[1] = Expr.attrMap[name];
+                       }
+
+                       // Handle if an un-quoted value was used
+                       match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
+
+                       if ( match[2] === "~=" ) {
+                               match[4] = " " + match[4] + " ";
+                       }
+
+                       return match;
+               },
+
+               PSEUDO: function( match, curLoop, inplace, result, not ) {
+                       if ( match[1] === "not" ) {
+                               // If we're dealing with a complex expression, or a simple one
+                               if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
+                                       match[3] = Sizzle(match[3], null, null, curLoop);
+
+                               } else {
+                                       var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
+
+                                       if ( !inplace ) {
+                                               result.push.apply( result, ret );
+                                       }
+
+                                       return false;
+                               }
+
+                       } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
+                               return true;
+                       }
+
+                       return match;
+               },
+
+               POS: function( match ) {
+                       match.unshift( true );
+
+                       return match;
+               }
+       },
+
+       filters: {
+               enabled: function( elem ) {
+                       return elem.disabled === false && elem.type !== "hidden";
+               },
+
+               disabled: function( elem ) {
+                       return elem.disabled === true;
+               },
+
+               checked: function( elem ) {
+                       return elem.checked === true;
+               },
+
+               selected: function( elem ) {
+                       // Accessing this property makes selected-by-default
+                       // options in Safari work properly
+                       if ( elem.parentNode ) {
+                               elem.parentNode.selectedIndex;
+                       }
+
+                       return elem.selected === true;
+               },
+
+               parent: function( elem ) {
+                       return !!elem.firstChild;
+               },
+
+               empty: function( elem ) {
+                       return !elem.firstChild;
+               },
+
+               has: function( elem, i, match ) {
+                       return !!Sizzle( match[3], elem ).length;
+               },
+
+               header: function( elem ) {
+                       return (/h\d/i).test( elem.nodeName );
+               },
+
+               text: function( elem ) {
+                       var attr = elem.getAttribute( "type" ), type = elem.type;
+                       // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
+                       // use getAttribute instead to test this case
+                       return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
+               },
+
+               radio: function( elem ) {
+                       return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
+               },
+
+               checkbox: function( elem ) {
+                       return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
+               },
+
+               file: function( elem ) {
+                       return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
+               },
+
+               password: function( elem ) {
+                       return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
+               },
+
+               submit: function( elem ) {
+                       var name = elem.nodeName.toLowerCase();
+                       return (name === "input" || name === "button") && "submit" === elem.type;
+               },
+
+               image: function( elem ) {
+                       return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
+               },
+
+               reset: function( elem ) {
+                       var name = elem.nodeName.toLowerCase();
+                       return (name === "input" || name === "button") && "reset" === elem.type;
+               },
+
+               button: function( elem ) {
+                       var name = elem.nodeName.toLowerCase();
+                       return name === "input" && "button" === elem.type || name === "button";
+               },
+
+               input: function( elem ) {
+                       return (/input|select|textarea|button/i).test( elem.nodeName );
+               },
+
+               focus: function( elem ) {
+                       return elem === elem.ownerDocument.activeElement;
+               }
+       },
+       setFilters: {
+               first: function( elem, i ) {
+                       return i === 0;
+               },
+
+               last: function( elem, i, match, array ) {
+                       return i === array.length - 1;
+               },
+
+               even: function( elem, i ) {
+                       return i % 2 === 0;
+               },
+
+               odd: function( elem, i ) {
+                       return i % 2 === 1;
+               },
+
+               lt: function( elem, i, match ) {
+                       return i < match[3] - 0;
+               },
+
+               gt: function( elem, i, match ) {
+                       return i > match[3] - 0;
+               },
+
+               nth: function( elem, i, match ) {
+                       return match[3] - 0 === i;
+               },
+
+               eq: function( elem, i, match ) {
+                       return match[3] - 0 === i;
+               }
+       },
+       filter: {
+               PSEUDO: function( elem, match, i, array ) {
+                       var name = match[1],
+                               filter = Expr.filters[ name ];
+
+                       if ( filter ) {
+                               return filter( elem, i, match, array );
+
+                       } else if ( name === "contains" ) {
+                               return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0;
+
+                       } else if ( name === "not" ) {
+                               var not = match[3];
+
+                               for ( var j = 0, l = not.length; j < l; j++ ) {
+                                       if ( not[j] === elem ) {
+                                               return false;
+                                       }
+                               }
+
+                               return true;
+
+                       } else {
+                               Sizzle.error( name );
+                       }
+               },
+
+               CHILD: function( elem, match ) {
+                       var first, last,
+                               doneName, parent, cache,
+                               count, diff,
+                               type = match[1],
+                               node = elem;
+
+                       switch ( type ) {
+                               case "only":
+                               case "first":
+                                       while ( (node = node.previousSibling) ) {
+                                               if ( node.nodeType === 1 ) {
+                                                       return false;
+                                               }
+                                       }
+
+                                       if ( type === "first" ) {
+                                               return true;
+                                       }
+
+                                       node = elem;
+
+                                       /* falls through */
+                               case "last":
+                                       while ( (node = node.nextSibling) ) {
+                                               if ( node.nodeType === 1 ) {
+                                                       return false;
+                                               }
+                                       }
+
+                                       return true;
+
+                               case "nth":
+                                       first = match[2];
+                                       last = match[3];
+
+                                       if ( first === 1 && last === 0 ) {
+                                               return true;
+                                       }
+
+                                       doneName = match[0];
+                                       parent = elem.parentNode;
+
+                                       if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) {
+                                               count = 0;
+
+                                               for ( node = parent.firstChild; node; node = node.nextSibling ) {
+                                                       if ( node.nodeType === 1 ) {
+                                                               node.nodeIndex = ++count;
+                                                       }
+                                               }
+
+                                               parent[ expando ] = doneName;
+                                       }
+
+                                       diff = elem.nodeIndex - last;
+
+                                       if ( first === 0 ) {
+                                               return diff === 0;
+
+                                       } else {
+                                               return ( diff % first === 0 && diff / first >= 0 );
+                                       }
+                       }
+               },
+
+               ID: function( elem, match ) {
+                       return elem.nodeType === 1 && elem.getAttribute("id") === match;
+               },
+
+               TAG: function( elem, match ) {
+                       return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match;
+               },
+
+               CLASS: function( elem, match ) {
+                       return (" " + (elem.className || elem.getAttribute("class")) + " ")
+                               .indexOf( match ) > -1;
+               },
+
+               ATTR: function( elem, match ) {
+                       var name = match[1],
+                               result = Sizzle.attr ?
+                                       Sizzle.attr( elem, name ) :
+                                       Expr.attrHandle[ name ] ?
+                                       Expr.attrHandle[ name ]( elem ) :
+                                       elem[ name ] != null ?
+                                               elem[ name ] :
+                                               elem.getAttribute( name ),
+                               value = result + "",
+                               type = match[2],
+                               check = match[4];
+
+                       return result == null ?
+                               type === "!=" :
+                               !type && Sizzle.attr ?
+                               result != null :
+                               type === "=" ?
+                               value === check :
+                               type === "*=" ?
+                               value.indexOf(check) >= 0 :
+                               type === "~=" ?
+                               (" " + value + " ").indexOf(check) >= 0 :
+                               !check ?
+                               value && result !== false :
+                               type === "!=" ?
+                               value !== check :
+                               type === "^=" ?
+                               value.indexOf(check) === 0 :
+                               type === "$=" ?
+                               value.substr(value.length - check.length) === check :
+                               type === "|=" ?
+                               value === check || value.substr(0, check.length + 1) === check + "-" :
+                               false;
+               },
+
+               POS: function( elem, match, i, array ) {
+                       var name = match[2],
+                               filter = Expr.setFilters[ name ];
+
+                       if ( filter ) {
+                               return filter( elem, i, match, array );
+                       }
+               }
+       }
+};
+
+var origPOS = Expr.match.POS,
+       fescape = function(all, num){
+               return "\\" + (num - 0 + 1);
+       };
+
+for ( var type in Expr.match ) {
+       Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
+       Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
+}
+// Expose origPOS
+// "global" as in regardless of relation to brackets/parens
+Expr.match.globalPOS = origPOS;
+
+var makeArray = function( array, results ) {
+       array = Array.prototype.slice.call( array, 0 );
+
+       if ( results ) {
+               results.push.apply( results, array );
+               return results;
+       }
+
+       return array;
+};
+
+// Perform a simple check to determine if the browser is capable of
+// converting a NodeList to an array using builtin methods.
+// Also verifies that the returned array holds DOM nodes
+// (which is not the case in the Blackberry browser)
+try {
+       Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
+
+// Provide a fallback method if it does not work
+} catch( e ) {
+       makeArray = function( array, results ) {
+               var i = 0,
+                       ret = results || [];
+
+               if ( toString.call(array) === "[object Array]" ) {
+                       Array.prototype.push.apply( ret, array );
+
+               } else {
+                       if ( typeof array.length === "number" ) {
+                               for ( var l = array.length; i < l; i++ ) {
+                                       ret.push( array[i] );
+                               }
+
+                       } else {
+                               for ( ; array[i]; i++ ) {
+                                       ret.push( array[i] );
+                               }
+                       }
+               }
+
+               return ret;
+       };
+}
+
+var sortOrder, siblingCheck;
+
+if ( document.documentElement.compareDocumentPosition ) {
+       sortOrder = function( a, b ) {
+               if ( a === b ) {
+                       hasDuplicate = true;
+                       return 0;
+               }
+
+               if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
+                       return a.compareDocumentPosition ? -1 : 1;
+               }
+
+               return a.compareDocumentPosition(b) & 4 ? -1 : 1;
+       };
+
+} else {
+       sortOrder = function( a, b ) {
+               // The nodes are identical, we can exit early
+               if ( a === b ) {
+                       hasDuplicate = true;
+                       return 0;
+
+               // Fallback to using sourceIndex (in IE) if it's available on both nodes
+               } else if ( a.sourceIndex && b.sourceIndex ) {
+                       return a.sourceIndex - b.sourceIndex;
+               }
+
+               var al, bl,
+                       ap = [],
+                       bp = [],
+                       aup = a.parentNode,
+                       bup = b.parentNode,
+                       cur = aup;
+
+               // If the nodes are siblings (or identical) we can do a quick check
+               if ( aup === bup ) {
+                       return siblingCheck( a, b );
+
+               // If no parents were found then the nodes are disconnected
+               } else if ( !aup ) {
+                       return -1;
+
+               } else if ( !bup ) {
+                       return 1;
+               }
+
+               // Otherwise they're somewhere else in the tree so we need
+               // to build up a full list of the parentNodes for comparison
+               while ( cur ) {
+                       ap.unshift( cur );
+                       cur = cur.parentNode;
+               }
+
+               cur = bup;
+
+               while ( cur ) {
+                       bp.unshift( cur );
+                       cur = cur.parentNode;
+               }
+
+               al = ap.length;
+               bl = bp.length;
+
+               // Start walking down the tree looking for a discrepancy
+               for ( var i = 0; i < al && i < bl; i++ ) {
+                       if ( ap[i] !== bp[i] ) {
+                               return siblingCheck( ap[i], bp[i] );
+                       }
+               }
+
+               // We ended someplace up the tree so do a sibling check
+               return i === al ?
+                       siblingCheck( a, bp[i], -1 ) :
+                       siblingCheck( ap[i], b, 1 );
+       };
+
+       siblingCheck = function( a, b, ret ) {
+               if ( a === b ) {
+                       return ret;
+               }
+
+               var cur = a.nextSibling;
+
+               while ( cur ) {
+                       if ( cur === b ) {
+                               return -1;
+                       }
+
+                       cur = cur.nextSibling;
+               }
+
+               return 1;
+       };
+}
+
+// Check to see if the browser returns elements by name when
+// querying by getElementById (and provide a workaround)
+(function(){
+       // We're going to inject a fake input element with a specified name
+       var form = document.createElement("div"),
+               id = "script" + (new Date()).getTime(),
+               root = document.documentElement;
+
+       form.innerHTML = "<a name='" + id + "'/>";
+
+       // Inject it into the root element, check its status, and remove it quickly
+       root.insertBefore( form, root.firstChild );
+
+       // The workaround has to do additional checks after a getElementById
+       // Which slows things down for other browsers (hence the branching)
+       if ( document.getElementById( id ) ) {
+               Expr.find.ID = function( match, context, isXML ) {
+                       if ( typeof context.getElementById !== "undefined" && !isXML ) {
+                               var m = context.getElementById(match[1]);
+
+                               return m ?
+                                       m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
+                                               [m] :
+                                               undefined :
+                                       [];
+                       }
+               };
+
+               Expr.filter.ID = function( elem, match ) {
+                       var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
+
+                       return elem.nodeType === 1 && node && node.nodeValue === match;
+               };
+       }
+
+       root.removeChild( form );
+
+       // release memory in IE
+       root = form = null;
+})();
+
+(function(){
+       // Check to see if the browser returns only elements
+       // when doing getElementsByTagName("*")
+
+       // Create a fake element
+       var div = document.createElement("div");
+       div.appendChild( document.createComment("") );
+
+       // Make sure no comments are found
+       if ( div.getElementsByTagName("*").length > 0 ) {
+               Expr.find.TAG = function( match, context ) {
+                       var results = context.getElementsByTagName( match[1] );
+
+                       // Filter out possible comments
+                       if ( match[1] === "*" ) {
+                               var tmp = [];
+
+                               for ( var i = 0; results[i]; i++ ) {
+                                       if ( results[i].nodeType === 1 ) {
+                                               tmp.push( results[i] );
+                                       }
+                               }
+
+                               results = tmp;
+                       }
+
+                       return results;
+               };
+       }
+
+       // Check to see if an attribute returns normalized href attributes
+       div.innerHTML = "<a href='#'></a>";
+
+       if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
+                       div.firstChild.getAttribute("href") !== "#" ) {
+
+               Expr.attrHandle.href = function( elem ) {
+                       return elem.getAttribute( "href", 2 );
+               };
+       }
+
+       // release memory in IE
+       div = null;
+})();
+
+if ( document.querySelectorAll ) {
+       (function(){
+               var oldSizzle = Sizzle,
+                       div = document.createElement("div"),
+                       id = "__sizzle__";
+
+               div.innerHTML = "<p class='TEST'></p>";
+
+               // Safari can't handle uppercase or unicode characters when
+               // in quirks mode.
+               if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
+                       return;
+               }
+
+               Sizzle = function( query, context, extra, seed ) {
+                       context = context || document;
+
+                       // Only use querySelectorAll on non-XML documents
+                       // (ID selectors don't work in non-HTML documents)
+                       if ( !seed && !Sizzle.isXML(context) ) {
+                               // See if we find a selector to speed up
+                               var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
+
+                               if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
+                                       // Speed-up: Sizzle("TAG")
+                                       if ( match[1] ) {
+                                               return makeArray( context.getElementsByTagName( query ), extra );
+
+                                       // Speed-up: Sizzle(".CLASS")
+                                       } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
+                                               return makeArray( context.getElementsByClassName( match[2] ), extra );
+                                       }
+                               }
+
+                               if ( context.nodeType === 9 ) {
+                                       // Speed-up: Sizzle("body")
+                                       // The body element only exists once, optimize finding it
+                                       if ( query === "body" && context.body ) {
+                                               return makeArray( [ context.body ], extra );
+
+                                       // Speed-up: Sizzle("#ID")
+                                       } else if ( match && match[3] ) {
+                                               var elem = context.getElementById( match[3] );
+
+                                               // Check parentNode to catch when Blackberry 4.6 returns
+                                               // nodes that are no longer in the document #6963
+                                               if ( elem && elem.parentNode ) {
+                                                       // Handle the case where IE and Opera return items
+                                                       // by name instead of ID
+                                                       if ( elem.id === match[3] ) {
+                                                               return makeArray( [ elem ], extra );
+                                                       }
+
+                                               } else {
+                                                       return makeArray( [], extra );
+                                               }
+                                       }
+
+                                       try {
+                                               return makeArray( context.querySelectorAll(query), extra );
+                                       } catch(qsaError) {}
+
+                               // qSA works strangely on Element-rooted queries
+                               // We can work around this by specifying an extra ID on the root
+                               // and working up from there (Thanks to Andrew Dupont for the technique)
+                               // IE 8 doesn't work on object elements
+                               } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+                                       var oldContext = context,
+                                               old = context.getAttribute( "id" ),
+                                               nid = old || id,
+                                               hasParent = context.parentNode,
+                                               relativeHierarchySelector = /^\s*[+~]/.test( query );
+
+                                       if ( !old ) {
+                                               context.setAttribute( "id", nid );
+                                       } else {
+                                               nid = nid.replace( /'/g, "\\$&" );
+                                       }
+                                       if ( relativeHierarchySelector && hasParent ) {
+                                               context = context.parentNode;
+                                       }
+
+                                       try {
+                                               if ( !relativeHierarchySelector || hasParent ) {
+                                                       return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
+                                               }
+
+                                       } catch(pseudoError) {
+                                       } finally {
+                                               if ( !old ) {
+                                                       oldContext.removeAttribute( "id" );
+                                               }
+                                       }
+                               }
+                       }
+
+                       return oldSizzle(query, context, extra, seed);
+               };
+
+               for ( var prop in oldSizzle ) {
+                       Sizzle[ prop ] = oldSizzle[ prop ];
+               }
+
+               // release memory in IE
+               div = null;
+       })();
+}
+
+(function(){
+       var html = document.documentElement,
+               matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;
+
+       if ( matches ) {
+               // Check to see if it's possible to do matchesSelector
+               // on a disconnected node (IE 9 fails this)
+               var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
+                       pseudoWorks = false;
+
+               try {
+                       // This should fail with an exception
+                       // Gecko does not error, returns false instead
+                       matches.call( document.documentElement, "[test!='']:sizzle" );
+
+               } catch( pseudoError ) {
+                       pseudoWorks = true;
+               }
+
+               Sizzle.matchesSelector = function( node, expr ) {
+                       // Make sure that attribute selectors are quoted
+                       expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
+
+                       if ( !Sizzle.isXML( node ) ) {
+                               try {
+                                       if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
+                                               var ret = matches.call( node, expr );
+
+                                               // IE 9's matchesSelector returns false on disconnected nodes
+                                               if ( ret || !disconnectedMatch ||
+                                                               // As well, disconnected nodes are said to be in a document
+                                                               // fragment in IE 9, so check for that
+                                                               node.document && node.document.nodeType !== 11 ) {
+                                                       return ret;
+                                               }
+                                       }
+                               } catch(e) {}
+                       }
+
+                       return Sizzle(expr, null, null, [node]).length > 0;
+               };
+       }
+})();
+
+(function(){
+       var div = document.createElement("div");
+
+       div.innerHTML = "<div class='test e'></div><div class='test'></div>";
+
+       // Opera can't find a second classname (in 9.6)
+       // Also, make sure that getElementsByClassName actually exists
+       if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
+               return;
+       }
+
+       // Safari caches class attributes, doesn't catch changes (in 3.2)
+       div.lastChild.className = "e";
+
+       if ( div.getElementsByClassName("e").length === 1 ) {
+               return;
+       }
+
+       Expr.order.splice(1, 0, "CLASS");
+       Expr.find.CLASS = function( match, context, isXML ) {
+               if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
+                       return context.getElementsByClassName(match[1]);
+               }
+       };
+
+       // release memory in IE
+       div = null;
+})();
+
+function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+       for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+               var elem = checkSet[i];
+
+               if ( elem ) {
+                       var match = false;
+
+                       elem = elem[dir];
+
+                       while ( elem ) {
+                               if ( elem[ expando ] === doneName ) {
+                                       match = checkSet[elem.sizset];
+                                       break;
+                               }
+
+                               if ( elem.nodeType === 1 && !isXML ){
+                                       elem[ expando ] = doneName;
+                                       elem.sizset = i;
+                               }
+
+                               if ( elem.nodeName.toLowerCase() === cur ) {
+                                       match = elem;
+                                       break;
+                               }
+
+                               elem = elem[dir];
+                       }
+
+                       checkSet[i] = match;
+               }
+       }
+}
+
+function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+       for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+               var elem = checkSet[i];
+
+               if ( elem ) {
+                       var match = false;
+
+                       elem = elem[dir];
+
+                       while ( elem ) {
+                               if ( elem[ expando ] === doneName ) {
+                                       match = checkSet[elem.sizset];
+                                       break;
+                               }
+
+                               if ( elem.nodeType === 1 ) {
+                                       if ( !isXML ) {
+                                               elem[ expando ] = doneName;
+                                               elem.sizset = i;
+                                       }
+
+                                       if ( typeof cur !== "string" ) {
+                                               if ( elem === cur ) {
+                                                       match = true;
+                                                       break;
+                                               }
+
+                                       } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
+                                               match = elem;
+                                               break;
+                                       }
+                               }
+
+                               elem = elem[dir];
+                       }
+
+                       checkSet[i] = match;
+               }
+       }
+}
+
+if ( document.documentElement.contains ) {
+       Sizzle.contains = function( a, b ) {
+               return a !== b && (a.contains ? a.contains(b) : true);
+       };
+
+} else if ( document.documentElement.compareDocumentPosition ) {
+       Sizzle.contains = function( a, b ) {
+               return !!(a.compareDocumentPosition(b) & 16);
+       };
+
+} else {
+       Sizzle.contains = function() {
+               return false;
+       };
+}
+
+Sizzle.isXML = function( elem ) {
+       // documentElement is verified for cases where it doesn't yet exist
+       // (such as loading iframes in IE - #4833)
+       var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
+
+       return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+var posProcess = function( selector, context, seed ) {
+       var match,
+               tmpSet = [],
+               later = "",
+               root = context.nodeType ? [context] : context;
+
+       // Position selectors must be done after the filter
+       // And so must :not(positional) so we move all PSEUDOs to the end
+       while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
+               later += match[0];
+               selector = selector.replace( Expr.match.PSEUDO, "" );
+       }
+
+       selector = Expr.relative[selector] ? selector + "*" : selector;
+
+       for ( var i = 0, l = root.length; i < l; i++ ) {
+               Sizzle( selector, root[i], tmpSet, seed );
+       }
+
+       return Sizzle.filter( later, tmpSet );
+};
+
+// EXPOSE
+// Override sizzle attribute retrieval
+Sizzle.attr = jQuery.attr;
+Sizzle.selectors.attrMap = {};
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+jQuery.expr[":"] = jQuery.expr.filters;
+jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+
+
+})();
+
+
+var runtil = /Until$/,
+       rparentsprev = /^(?:parents|prevUntil|prevAll)/,
+       // Note: This RegExp should be improved, or likely pulled from Sizzle
+       rmultiselector = /,/,
+       isSimple = /^.[^:#\[\.,]*$/,
+       slice = Array.prototype.slice,
+       POS = jQuery.expr.match.globalPOS,
+       // methods guaranteed to produce a unique set when starting from a unique set
+       guaranteedUnique = {
+               children: true,
+               contents: true,
+               next: true,
+               prev: true
+       };
+
+jQuery.fn.extend({
+       find: function( selector ) {
+               var self = this,
+                       i, l;
+
+               if ( typeof selector !== "string" ) {
+                       return jQuery( selector ).filter(function() {
+                               for ( i = 0, l = self.length; i < l; i++ ) {
+                                       if ( jQuery.contains( self[ i ], this ) ) {
+                                               return true;
+                                       }
+                               }
+                       });
+               }
+
+               var ret = this.pushStack( "", "find", selector ),
+                       length, n, r;
+
+               for ( i = 0, l = this.length; i < l; i++ ) {
+                       length = ret.length;
+                       jQuery.find( selector, this[i], ret );
+
+                       if ( i > 0 ) {
+                               // Make sure that the results are unique
+                               for ( n = length; n < ret.length; n++ ) {
+                                       for ( r = 0; r < length; r++ ) {
+                                               if ( ret[r] === ret[n] ) {
+                                                       ret.splice(n--, 1);
+                                                       break;
+                                               }
+                                       }
+                               }
+                       }
+               }
+
+               return ret;
+       },
+
+       has: function( target ) {
+               var targets = jQuery( target );
+               return this.filter(function() {
+                       for ( var i = 0, l = targets.length; i < l; i++ ) {
+                               if ( jQuery.contains( this, targets[i] ) ) {
+                                       return true;
+                               }
+                       }
+               });
+       },
+
+       not: function( selector ) {
+               return this.pushStack( winnow(this, selector, false), "not", selector);
+       },
+
+       filter: function( selector ) {
+               return this.pushStack( winnow(this, selector, true), "filter", selector );
+       },
+
+       is: function( selector ) {
+               return !!selector && (
+                       typeof selector === "string" ?
+                               // If this is a positional selector, check membership in the returned set
+                               // so $("p:first").is("p:last") won't return true for a doc with two "p".
+                               POS.test( selector ) ?
+                                       jQuery( selector, this.context ).index( this[0] ) >= 0 :
+                                       jQuery.filter( selector, this ).length > 0 :
+                               this.filter( selector ).length > 0 );
+       },
+
+       closest: function( selectors, context ) {
+               var ret = [], i, l, cur = this[0];
+
+               // Array (deprecated as of jQuery 1.7)
+               if ( jQuery.isArray( selectors ) ) {
+                       var level = 1;
+
+                       while ( cur && cur.ownerDocument && cur !== context ) {
+                               for ( i = 0; i < selectors.length; i++ ) {
+
+                                       if ( jQuery( cur ).is( selectors[ i ] ) ) {
+                                               ret.push({ selector: selectors[ i ], elem: cur, level: level });
+                                       }
+                               }
+
+                               cur = cur.parentNode;
+                               level++;
+                       }
+
+                       return ret;
+               }
+
+               // String
+               var pos = POS.test( selectors ) || typeof selectors !== "string" ?
+                               jQuery( selectors, context || this.context ) :
+                               0;
+
+               for ( i = 0, l = this.length; i < l; i++ ) {
+                       cur = this[i];
+
+                       while ( cur ) {
+                               if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
+                                       ret.push( cur );
+                                       break;
+
+                               } else {
+                                       cur = cur.parentNode;
+                                       if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {
+                                               break;
+                                       }
+                               }
+                       }
+               }
+
+               ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
+
+               return this.pushStack( ret, "closest", selectors );
+       },
+
+       // Determine the position of an element within
+       // the matched set of elements
+       index: function( elem ) {
+
+               // No argument, return index in parent
+               if ( !elem ) {
+                       return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;
+               }
+
+               // index in selector
+               if ( typeof elem === "string" ) {
+                       return jQuery.inArray( this[0], jQuery( elem ) );
+               }
+
+               // Locate the position of the desired element
+               return jQuery.inArray(
+                       // If it receives a jQuery object, the first element is used
+                       elem.jquery ? elem[0] : elem, this );
+       },
+
+       add: function( selector, context ) {
+               var set = typeof selector === "string" ?
+                               jQuery( selector, context ) :
+                               jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
+                       all = jQuery.merge( this.get(), set );
+
+               return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
+                       all :
+                       jQuery.unique( all ) );
+       },
+
+       andSelf: function() {
+               return this.add( this.prevObject );
+       }
+});
+
+// A painfully simple check to see if an element is disconnected
+// from a document (should be improved, where feasible).
+function isDisconnected( node ) {
+       return !node || !node.parentNode || node.parentNode.nodeType === 11;
+}
+
+jQuery.each({
+       parent: function( elem ) {
+               var parent = elem.parentNode;
+               return parent && parent.nodeType !== 11 ? parent : null;
+       },
+       parents: function( elem ) {
+               return jQuery.dir( elem, "parentNode" );
+       },
+       parentsUntil: function( elem, i, until ) {
+               return jQuery.dir( elem, "parentNode", until );
+       },
+       next: function( elem ) {
+               return jQuery.nth( elem, 2, "nextSibling" );
+       },
+       prev: function( elem ) {
+               return jQuery.nth( elem, 2, "previousSibling" );
+       },
+       nextAll: function( elem ) {
+               return jQuery.dir( elem, "nextSibling" );
+       },
+       prevAll: function( elem ) {
+               return jQuery.dir( elem, "previousSibling" );
+       },
+       nextUntil: function( elem, i, until ) {
+               return jQuery.dir( elem, "nextSibling", until );
+       },
+       prevUntil: function( elem, i, until ) {
+               return jQuery.dir( elem, "previousSibling", until );
+       },
+       siblings: function( elem ) {
+               return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
+       },
+       children: function( elem ) {
+               return jQuery.sibling( elem.firstChild );
+       },
+       contents: function( elem ) {
+               return jQuery.nodeName( elem, "iframe" ) ?
+                       elem.contentDocument || elem.contentWindow.document :
+                       jQuery.makeArray( elem.childNodes );
+       }
+}, function( name, fn ) {
+       jQuery.fn[ name ] = function( until, selector ) {
+               var ret = jQuery.map( this, fn, until );
+
+               if ( !runtil.test( name ) ) {
+                       selector = until;
+               }
+
+               if ( selector && typeof selector === "string" ) {
+                       ret = jQuery.filter( selector, ret );
+               }
+
+               ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
+
+               if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
+                       ret = ret.reverse();
+               }
+
+               return this.pushStack( ret, name, slice.call( arguments ).join(",") );
+       };
+});
+
+jQuery.extend({
+       filter: function( expr, elems, not ) {
+               if ( not ) {
+                       expr = ":not(" + expr + ")";
+               }
+
+               return elems.length === 1 ?
+                       jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
+                       jQuery.find.matches(expr, elems);
+       },
+
+       dir: function( elem, dir, until ) {
+               var matched = [],
+                       cur = elem[ dir ];
+
+               while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
+                       if ( cur.nodeType === 1 ) {
+                               matched.push( cur );
+                       }
+                       cur = cur[dir];
+               }
+               return matched;
+       },
+
+       nth: function( cur, result, dir, elem ) {
+               result = result || 1;
+               var num = 0;
+
+               for ( ; cur; cur = cur[dir] ) {
+                       if ( cur.nodeType === 1 && ++num === result ) {
+                               break;
+                       }
+               }
+
+               return cur;
+       },
+
+       sibling: function( n, elem ) {
+               var r = [];
+
+               for ( ; n; n = n.nextSibling ) {
+                       if ( n.nodeType === 1 && n !== elem ) {
+                               r.push( n );
+                       }
+               }
+
+               return r;
+       }
+});
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, keep ) {
+
+       // Can't pass null or undefined to indexOf in Firefox 4
+       // Set to 0 to skip string check
+       qualifier = qualifier || 0;
+
+       if ( jQuery.isFunction( qualifier ) ) {
+               return jQuery.grep(elements, function( elem, i ) {
+                       var retVal = !!qualifier.call( elem, i, elem );
+                       return retVal === keep;
+               });
+
+       } else if ( qualifier.nodeType ) {
+               return jQuery.grep(elements, function( elem, i ) {
+                       return ( elem === qualifier ) === keep;
+               });
+
+       } else if ( typeof qualifier === "string" ) {
+               var filtered = jQuery.grep(elements, function( elem ) {
+                       return elem.nodeType === 1;
+               });
+
+               if ( isSimple.test( qualifier ) ) {
+                       return jQuery.filter(qualifier, filtered, !keep);
+               } else {
+                       qualifier = jQuery.filter( qualifier, filtered );
+               }
+       }
+
+       return jQuery.grep(elements, function( elem, i ) {
+               return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;
+       });
+}
+
+
+
+
+function createSafeFragment( document ) {
+       var list = nodeNames.split( "|" ),
+       safeFrag = document.createDocumentFragment();
+
+       if ( safeFrag.createElement ) {
+               while ( list.length ) {
+                       safeFrag.createElement(
+                               list.pop()
+                       );
+               }
+       }
+       return safeFrag;
+}
+
+var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
+               "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
+       rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
+       rleadingWhitespace = /^\s+/,
+       rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
+       rtagName = /<([\w:]+)/,
+       rtbody = /<tbody/i,
+       rhtml = /<|&#?\w+;/,
+       rnoInnerhtml = /<(?:script|style)/i,
+       rnocache = /<(?:script|object|embed|option|style)/i,
+       rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
+       // checked="checked" or checked
+       rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+       rscriptType = /\/(java|ecma)script/i,
+       rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)/,
+       wrapMap = {
+               option: [ 1, "<select multiple='multiple'>", "</select>" ],
+               legend: [ 1, "<fieldset>", "</fieldset>" ],
+               thead: [ 1, "<table>", "</table>" ],
+               tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+               td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+               col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
+               area: [ 1, "<map>", "</map>" ],
+               _default: [ 0, "", "" ]
+       },
+       safeFragment = createSafeFragment( document );
+
+wrapMap.optgroup = wrapMap.option;
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+// IE can't serialize <link> and <script> tags normally
+if ( !jQuery.support.htmlSerialize ) {
+       wrapMap._default = [ 1, "div<div>", "</div>" ];
+}
+
+jQuery.fn.extend({
+       text: function( value ) {
+               return jQuery.access( this, function( value ) {
+                       return value === undefined ?
+                               jQuery.text( this ) :
+                               this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
+               }, null, value, arguments.length );
+       },
+
+       wrapAll: function( html ) {
+               if ( jQuery.isFunction( html ) ) {
+                       return this.each(function(i) {
+                               jQuery(this).wrapAll( html.call(this, i) );
+                       });
+               }
+
+               if ( this[0] ) {
+                       // The elements to wrap the target around
+                       var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
+
+                       if ( this[0].parentNode ) {
+                               wrap.insertBefore( this[0] );
+                       }
+
+                       wrap.map(function() {
+                               var elem = this;
+
+                               while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
+                                       elem = elem.firstChild;
+                               }
+
+                               return elem;
+                       }).append( this );
+               }
+
+               return this;
+       },
+
+       wrapInner: function( html ) {
+               if ( jQuery.isFunction( html ) ) {
+                       return this.each(function(i) {
+                               jQuery(this).wrapInner( html.call(this, i) );
+                       });
+               }
+
+               return this.each(function() {
+                       var self = jQuery( this ),
+                               contents = self.contents();
+
+                       if ( contents.length ) {
+                               contents.wrapAll( html );
+
+                       } else {
+                               self.append( html );
+                       }
+               });
+       },
+
+       wrap: function( html ) {
+               var isFunction = jQuery.isFunction( html );
+
+               return this.each(function(i) {
+                       jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
+               });
+       },
+
+       unwrap: function() {
+               return this.parent().each(function() {
+                       if ( !jQuery.nodeName( this, "body" ) ) {
+                               jQuery( this ).replaceWith( this.childNodes );
+                       }
+               }).end();
+       },
+
+       append: function() {
+               return this.domManip(arguments, true, function( elem ) {
+                       if ( this.nodeType === 1 ) {
+                               this.appendChild( elem );
+                       }
+               });
+       },
+
+       prepend: function() {
+               return this.domManip(arguments, true, function( elem ) {
+                       if ( this.nodeType === 1 ) {
+                               this.insertBefore( elem, this.firstChild );
+                       }
+               });
+       },
+
+       before: function() {
+               if ( this[0] && this[0].parentNode ) {
+                       return this.domManip(arguments, false, function( elem ) {
+                               this.parentNode.insertBefore( elem, this );
+                       });
+               } else if ( arguments.length ) {
+                       var set = jQuery.clean( arguments );
+                       set.push.apply( set, this.toArray() );
+                       return this.pushStack( set, "before", arguments );
+               }
+       },
+
+       after: function() {
+               if ( this[0] && this[0].parentNode ) {
+                       return this.domManip(arguments, false, function( elem ) {
+                               this.parentNode.insertBefore( elem, this.nextSibling );
+                       });
+               } else if ( arguments.length ) {
+                       var set = this.pushStack( this, "after", arguments );
+                       set.push.apply( set, jQuery.clean(arguments) );
+                       return set;
+               }
+       },
+
+       // keepData is for internal use only--do not document
+       remove: function( selector, keepData ) {
+               for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
+                       if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
+                               if ( !keepData && elem.nodeType === 1 ) {
+                                       jQuery.cleanData( elem.getElementsByTagName("*") );
+                                       jQuery.cleanData( [ elem ] );
+                               }
+
+                               if ( elem.parentNode ) {
+                                       elem.parentNode.removeChild( elem );
+                               }
+                       }
+               }
+
+               return this;
+       },
+
+       empty: function() {
+               for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
+                       // Remove element nodes and prevent memory leaks
+                       if ( elem.nodeType === 1 ) {
+                               jQuery.cleanData( elem.getElementsByTagName("*") );
+                       }
+
+                       // Remove any remaining nodes
+                       while ( elem.firstChild ) {
+                               elem.removeChild( elem.firstChild );
+                       }
+               }
+
+               return this;
+       },
+
+       clone: function( dataAndEvents, deepDataAndEvents ) {
+               dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+               deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+               return this.map( function () {
+                       return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+               });
+       },
+
+       html: function( value ) {
+               return jQuery.access( this, function( value ) {
+                       var elem = this[0] || {},
+                               i = 0,
+                               l = this.length;
+
+                       if ( value === undefined ) {
+                               return elem.nodeType === 1 ?
+                                       elem.innerHTML.replace( rinlinejQuery, "" ) :
+                                       null;
+                       }
+
+
+                       if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+                               ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
+                               !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {
+
+                               value = value.replace( rxhtmlTag, "<$1></$2>" );
+
+                               try {
+                                       for (; i < l; i++ ) {
+                                               // Remove element nodes and prevent memory leaks
+                                               elem = this[i] || {};
+                                               if ( elem.nodeType === 1 ) {
+                                                       jQuery.cleanData( elem.getElementsByTagName( "*" ) );
+                                                       elem.innerHTML = value;
+                                               }
+                                       }
+
+                                       elem = 0;
+
+                               // If using innerHTML throws an exception, use the fallback method
+                               } catch(e) {}
+                       }
+
+                       if ( elem ) {
+                               this.empty().append( value );
+                       }
+               }, null, value, arguments.length );
+       },
+
+       replaceWith: function( value ) {
+               if ( this[0] && this[0].parentNode ) {
+                       // Make sure that the elements are removed from the DOM before they are inserted
+                       // this can help fix replacing a parent with child elements
+                       if ( jQuery.isFunction( value ) ) {
+                               return this.each(function(i) {
+                                       var self = jQuery(this), old = self.html();
+                                       self.replaceWith( value.call( this, i, old ) );
+                               });
+                       }
+
+                       if ( typeof value !== "string" ) {
+                               value = jQuery( value ).detach();
+                       }
+
+                       return this.each(function() {
+                               var next = this.nextSibling,
+                                       parent = this.parentNode;
+
+                               jQuery( this ).remove();
+
+                               if ( next ) {
+                                       jQuery(next).before( value );
+                               } else {
+                                       jQuery(parent).append( value );
+                               }
+                       });
+               } else {
+                       return this.length ?
+                               this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
+                               this;
+               }
+       },
+
+       detach: function( selector ) {
+               return this.remove( selector, true );
+       },
+
+       domManip: function( args, table, callback ) {
+               var results, first, fragment, parent,
+                       value = args[0],
+                       scripts = [];
+
+               // We can't cloneNode fragments that contain checked, in WebKit
+               if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
+                       return this.each(function() {
+                               jQuery(this).domManip( args, table, callback, true );
+                       });
+               }
+
+               if ( jQuery.isFunction(value) ) {
+                       return this.each(function(i) {
+                               var self = jQuery(this);
+                               args[0] = value.call(this, i, table ? self.html() : undefined);
+                               self.domManip( args, table, callback );
+                       });
+               }
+
+               if ( this[0] ) {
+                       parent = value && value.parentNode;
+
+                       // If we're in a fragment, just use that instead of building a new one
+                       if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
+                               results = { fragment: parent };
+
+                       } else {
+                               results = jQuery.buildFragment( args, this, scripts );
+                       }
+
+                       fragment = results.fragment;
+
+                       if ( fragment.childNodes.length === 1 ) {
+                               first = fragment = fragment.firstChild;
+                       } else {
+                               first = fragment.firstChild;
+                       }
+
+                       if ( first ) {
+                               table = table && jQuery.nodeName( first, "tr" );
+
+                               for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {
+                                       callback.call(
+                                               table ?
+                                                       root(this[i], first) :
+                                                       this[i],
+                                               // Make sure that we do not leak memory by inadvertently discarding
+                                               // the original fragment (which might have attached data) instead of
+                                               // using it; in addition, use the original fragment object for the last
+                                               // item instead of first because it can end up being emptied incorrectly
+                                               // in certain situations (Bug #8070).
+                                               // Fragments from the fragment cache must always be cloned and never used
+                                               // in place.
+                                               results.cacheable || ( l > 1 && i < lastIndex ) ?
+                                                       jQuery.clone( fragment, true, true ) :
+                                                       fragment
+                                       );
+                               }
+                       }
+
+                       if ( scripts.length ) {
+                               jQuery.each( scripts, function( i, elem ) {
+                                       if ( elem.src ) {
+                                               jQuery.ajax({
+                                                       type: "GET",
+                                                       global: false,
+                                                       url: elem.src,
+                                                       async: false,
+                                                       dataType: "script"
+                                               });
+                                       } else {
+                                               jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) );
+                                       }
+
+                                       if ( elem.parentNode ) {
+                                               elem.parentNode.removeChild( elem );
+                                       }
+                               });
+                       }
+               }
+
+               return this;
+       }
+});
+
+function root( elem, cur ) {
+       return jQuery.nodeName(elem, "table") ?
+               (elem.getElementsByTagName("tbody")[0] ||
+               elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
+               elem;
+}
+
+function cloneCopyEvent( src, dest ) {
+
+       if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
+               return;
+       }
+
+       var type, i, l,
+               oldData = jQuery._data( src ),
+               curData = jQuery._data( dest, oldData ),
+               events = oldData.events;
+
+       if ( events ) {
+               delete curData.handle;
+               curData.events = {};
+
+               for ( type in events ) {
+                       for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+                               jQuery.event.add( dest, type, events[ type ][ i ] );
+                       }
+               }
+       }
+
+       // make the cloned public data object a copy from the original
+       if ( curData.data ) {
+               curData.data = jQuery.extend( {}, curData.data );
+       }
+}
+
+function cloneFixAttributes( src, dest ) {
+       var nodeName;
+
+       // We do not need to do anything for non-Elements
+       if ( dest.nodeType !== 1 ) {
+               return;
+       }
+
+       // clearAttributes removes the attributes, which we don't want,
+       // but also removes the attachEvent events, which we *do* want
+       if ( dest.clearAttributes ) {
+               dest.clearAttributes();
+       }
+
+       // mergeAttributes, in contrast, only merges back on the
+       // original attributes, not the events
+       if ( dest.mergeAttributes ) {
+               dest.mergeAttributes( src );
+       }
+
+       nodeName = dest.nodeName.toLowerCase();
+
+       // IE6-8 fail to clone children inside object elements that use
+       // the proprietary classid attribute value (rather than the type
+       // attribute) to identify the type of content to display
+       if ( nodeName === "object" ) {
+               dest.outerHTML = src.outerHTML;
+
+       } else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) {
+               // IE6-8 fails to persist the checked state of a cloned checkbox
+               // or radio button. Worse, IE6-7 fail to give the cloned element
+               // a checked appearance if the defaultChecked value isn't also set
+               if ( src.checked ) {
+                       dest.defaultChecked = dest.checked = src.checked;
+               }
+
+               // IE6-7 get confused and end up setting the value of a cloned
+               // checkbox/radio button to an empty string instead of "on"
+               if ( dest.value !== src.value ) {
+                       dest.value = src.value;
+               }
+
+       // IE6-8 fails to return the selected option to the default selected
+       // state when cloning options
+       } else if ( nodeName === "option" ) {
+               dest.selected = src.defaultSelected;
+
+       // IE6-8 fails to set the defaultValue to the correct value when
+       // cloning other types of input fields
+       } else if ( nodeName === "input" || nodeName === "textarea" ) {
+               dest.defaultValue = src.defaultValue;
+
+       // IE blanks contents when cloning scripts
+       } else if ( nodeName === "script" && dest.text !== src.text ) {
+               dest.text = src.text;
+       }
+
+       // Event data gets referenced instead of copied if the expando
+       // gets copied too
+       dest.removeAttribute( jQuery.expando );
+
+       // Clear flags for bubbling special change/submit events, they must
+       // be reattached when the newly cloned events are first activated
+       dest.removeAttribute( "_submit_attached" );
+       dest.removeAttribute( "_change_attached" );
+}
+
+jQuery.buildFragment = function( args, nodes, scripts ) {
+       var fragment, cacheable, cacheresults, doc,
+       first = args[ 0 ];
+
+       // nodes may contain either an explicit document object,
+       // a jQuery collection or context object.
+       // If nodes[0] contains a valid object to assign to doc
+       if ( nodes && nodes[0] ) {
+               doc = nodes[0].ownerDocument || nodes[0];
+       }
+
+       // Ensure that an attr object doesn't incorrectly stand in as a document object
+       // Chrome and Firefox seem to allow this to occur and will throw exception
+       // Fixes #8950
+       if ( !doc.createDocumentFragment ) {
+               doc = document;
+       }
+
+       // Only cache "small" (1/2 KB) HTML strings that are associated with the main document
+       // Cloning options loses the selected state, so don't cache them
+       // IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
+       // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
+       // Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501
+       if ( args.length === 1 && typeof first === "string" && first.length < 512 && doc === document &&
+               first.charAt(0) === "<" && !rnocache.test( first ) &&
+               (jQuery.support.checkClone || !rchecked.test( first )) &&
+               (jQuery.support.html5Clone || !rnoshimcache.test( first )) ) {
+
+               cacheable = true;
+
+               cacheresults = jQuery.fragments[ first ];
+               if ( cacheresults && cacheresults !== 1 ) {
+                       fragment = cacheresults;
+               }
+       }
+
+       if ( !fragment ) {
+               fragment = doc.createDocumentFragment();
+               jQuery.clean( args, doc, fragment, scripts );
+       }
+
+       if ( cacheable ) {
+               jQuery.fragments[ first ] = cacheresults ? fragment : 1;
+       }
+
+       return { fragment: fragment, cacheable: cacheable };
+};
+
+jQuery.fragments = {};
+
+jQuery.each({
+       appendTo: "append",
+       prependTo: "prepend",
+       insertBefore: "before",
+       insertAfter: "after",
+       replaceAll: "replaceWith"
+}, function( name, original ) {
+       jQuery.fn[ name ] = function( selector ) {
+               var ret = [],
+                       insert = jQuery( selector ),
+                       parent = this.length === 1 && this[0].parentNode;
+
+               if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
+                       insert[ original ]( this[0] );
+                       return this;
+
+               } else {
+                       for ( var i = 0, l = insert.length; i < l; i++ ) {
+                               var elems = ( i > 0 ? this.clone(true) : this ).get();
+                               jQuery( insert[i] )[ original ]( elems );
+                               ret = ret.concat( elems );
+                       }
+
+                       return this.pushStack( ret, name, insert.selector );
+               }
+       };
+});
+
+function getAll( elem ) {
+       if ( typeof elem.getElementsByTagName !== "undefined" ) {
+               return elem.getElementsByTagName( "*" );
+
+       } else if ( typeof elem.querySelectorAll !== "undefined" ) {
+               return elem.querySelectorAll( "*" );
+
+       } else {
+               return [];
+       }
+}
+
+// Used in clean, fixes the defaultChecked property
+function fixDefaultChecked( elem ) {
+       if ( elem.type === "checkbox" || elem.type === "radio" ) {
+               elem.defaultChecked = elem.checked;
+       }
+}
+// Finds all inputs and passes them to fixDefaultChecked
+function findInputs( elem ) {
+       var nodeName = ( elem.nodeName || "" ).toLowerCase();
+       if ( nodeName === "input" ) {
+               fixDefaultChecked( elem );
+       // Skip scripts, get other children
+       } else if ( nodeName !== "script" && typeof elem.getElementsByTagName !== "undefined" ) {
+               jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
+       }
+}
+
+// Derived From: http://www.iecss.com/shimprove/javascript/shimprove.1-0-1.js
+function shimCloneNode( elem ) {
+       var div = document.createElement( "div" );
+       safeFragment.appendChild( div );
+
+       div.innerHTML = elem.outerHTML;
+       return div.firstChild;
+}
+
+jQuery.extend({
+       clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+               var srcElements,
+                       destElements,
+                       i,
+                       // IE<=8 does not properly clone detached, unknown element nodes
+                       clone = jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ?
+                               elem.cloneNode( true ) :
+                               shimCloneNode( elem );
+
+               if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
+                               (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
+                       // IE copies events bound via attachEvent when using cloneNode.
+                       // Calling detachEvent on the clone will also remove the events
+                       // from the original. In order to get around this, we use some
+                       // proprietary methods to clear the events. Thanks to MooTools
+                       // guys for this hotness.
+
+                       cloneFixAttributes( elem, clone );
+
+                       // Using Sizzle here is crazy slow, so we use getElementsByTagName instead
+                       srcElements = getAll( elem );
+                       destElements = getAll( clone );
+
+                       // Weird iteration because IE will replace the length property
+                       // with an element if you are cloning the body and one of the
+                       // elements on the page has a name or id of "length"
+                       for ( i = 0; srcElements[i]; ++i ) {
+                               // Ensure that the destination node is not null; Fixes #9587
+                               if ( destElements[i] ) {
+                                       cloneFixAttributes( srcElements[i], destElements[i] );
+                               }
+                       }
+               }
+
+               // Copy the events from the original to the clone
+               if ( dataAndEvents ) {
+                       cloneCopyEvent( elem, clone );
+
+                       if ( deepDataAndEvents ) {
+                               srcElements = getAll( elem );
+                               destElements = getAll( clone );
+
+                               for ( i = 0; srcElements[i]; ++i ) {
+                                       cloneCopyEvent( srcElements[i], destElements[i] );
+                               }
+                       }
+               }
+
+               srcElements = destElements = null;
+
+               // Return the cloned set
+               return clone;
+       },
+
+       clean: function( elems, context, fragment, scripts ) {
+               var checkScriptType, script, j,
+                               ret = [];
+
+               context = context || document;
+
+               // !context.createElement fails in IE with an error but returns typeof 'object'
+               if ( typeof context.createElement === "undefined" ) {
+                       context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
+               }
+
+               for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+                       if ( typeof elem === "number" ) {
+                               elem += "";
+                       }
+
+                       if ( !elem ) {
+                               continue;
+                       }
+
+                       // Convert html string into DOM nodes
+                       if ( typeof elem === "string" ) {
+                               if ( !rhtml.test( elem ) ) {
+                                       elem = context.createTextNode( elem );
+                               } else {
+                                       // Fix "XHTML"-style tags in all browsers
+                                       elem = elem.replace(rxhtmlTag, "<$1></$2>");
+
+                                       // Trim whitespace, otherwise indexOf won't work as expected
+                                       var tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(),
+                                               wrap = wrapMap[ tag ] || wrapMap._default,
+                                               depth = wrap[0],
+                                               div = context.createElement("div"),
+                                               safeChildNodes = safeFragment.childNodes,
+                                               remove;
+
+                                       // Append wrapper element to unknown element safe doc fragment
+                                       if ( context === document ) {
+                                               // Use the fragment we've already created for this document
+                                               safeFragment.appendChild( div );
+                                       } else {
+                                               // Use a fragment created with the owner document
+                                               createSafeFragment( context ).appendChild( div );
+                                       }
+
+                                       // Go to html and back, then peel off extra wrappers
+                                       div.innerHTML = wrap[1] + elem + wrap[2];
+
+                                       // Move to the right depth
+                                       while ( depth-- ) {
+                                               div = div.lastChild;
+                                       }
+
+                                       // Remove IE's autoinserted <tbody> from table fragments
+                                       if ( !jQuery.support.tbody ) {
+
+                                               // String was a <table>, *may* have spurious <tbody>
+                                               var hasBody = rtbody.test(elem),
+                                                       tbody = tag === "table" && !hasBody ?
+                                                               div.firstChild && div.firstChild.childNodes :
+
+                                                               // String was a bare <thead> or <tfoot>
+                                                               wrap[1] === "<table>" && !hasBody ?
+                                                                       div.childNodes :
+                                                                       [];
+
+                                               for ( j = tbody.length - 1; j >= 0 ; --j ) {
+                                                       if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
+                                                               tbody[ j ].parentNode.removeChild( tbody[ j ] );
+                                                       }
+                                               }
+                                       }
+
+                                       // IE completely kills leading whitespace when innerHTML is used
+                                       if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
+                                               div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
+                                       }
+
+                                       elem = div.childNodes;
+
+                                       // Clear elements from DocumentFragment (safeFragment or otherwise)
+                                       // to avoid hoarding elements. Fixes #11356
+                                       if ( div ) {
+                                               div.parentNode.removeChild( div );
+
+                                               // Guard against -1 index exceptions in FF3.6
+                                               if ( safeChildNodes.length > 0 ) {
+                                                       remove = safeChildNodes[ safeChildNodes.length - 1 ];
+
+                                                       if ( remove && remove.parentNode ) {
+                                                               remove.parentNode.removeChild( remove );
+                                                       }
+                                               }
+                                       }
+                               }
+                       }
+
+                       // Resets defaultChecked for any radios and checkboxes
+                       // about to be appended to the DOM in IE 6/7 (#8060)
+                       var len;
+                       if ( !jQuery.support.appendChecked ) {
+                               if ( elem[0] && typeof (len = elem.length) === "number" ) {
+                                       for ( j = 0; j < len; j++ ) {
+                                               findInputs( elem[j] );
+                                       }
+                               } else {
+                                       findInputs( elem );
+                               }
+                       }
+
+                       if ( elem.nodeType ) {
+                               ret.push( elem );
+                       } else {
+                               ret = jQuery.merge( ret, elem );
+                       }
+               }
+
+               if ( fragment ) {
+                       checkScriptType = function( elem ) {
+                               return !elem.type || rscriptType.test( elem.type );
+                       };
+                       for ( i = 0; ret[i]; i++ ) {
+                               script = ret[i];
+                               if ( scripts && jQuery.nodeName( script, "script" ) && (!script.type || rscriptType.test( script.type )) ) {
+                                       scripts.push( script.parentNode ? script.parentNode.removeChild( script ) : script );
+
+                               } else {
+                                       if ( script.nodeType === 1 ) {
+                                               var jsTags = jQuery.grep( script.getElementsByTagName( "script" ), checkScriptType );
+
+                                               ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
+                                       }
+                                       fragment.appendChild( script );
+                               }
+                       }
+               }
+
+               return ret;
+       },
+
+       cleanData: function( elems ) {
+               var data, id,
+                       cache = jQuery.cache,
+                       special = jQuery.event.special,
+                       deleteExpando = jQuery.support.deleteExpando;
+
+               for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+                       if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
+                               continue;
+                       }
+
+                       id = elem[ jQuery.expando ];
+
+                       if ( id ) {
+                               data = cache[ id ];
+
+                               if ( data && data.events ) {
+                                       for ( var type in data.events ) {
+                                               if ( special[ type ] ) {
+                                                       jQuery.event.remove( elem, type );
+
+                                               // This is a shortcut to avoid jQuery.event.remove's overhead
+                                               } else {
+                                                       jQuery.removeEvent( elem, type, data.handle );
+                                               }
+                                       }
+
+                                       // Null the DOM reference to avoid IE6/7/8 leak (#7054)
+                                       if ( data.handle ) {
+                                               data.handle.elem = null;
+                                       }
+                               }
+
+                               if ( deleteExpando ) {
+                                       delete elem[ jQuery.expando ];
+
+                               } else if ( elem.removeAttribute ) {
+                                       elem.removeAttribute( jQuery.expando );
+                               }
+
+                               delete cache[ id ];
+                       }
+               }
+       }
+});
+
+
+
+
+var ralpha = /alpha\([^)]*\)/i,
+       ropacity = /opacity=([^)]*)/,
+       // fixed for IE9, see #8346
+       rupper = /([A-Z]|^ms)/g,
+       rnum = /^[\-+]?(?:\d*\.)?\d+$/i,
+       rnumnonpx = /^-?(?:\d*\.)?\d+(?!px)[^\d\s]+$/i,
+       rrelNum = /^([\-+])=([\-+.\de]+)/,
+       rmargin = /^margin/,
+
+       cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+
+       // order is important!
+       cssExpand = [ "Top", "Right", "Bottom", "Left" ],
+
+       curCSS,
+
+       getComputedStyle,
+       currentStyle;
+
+jQuery.fn.css = function( name, value ) {
+       return jQuery.access( this, function( elem, name, value ) {
+               return value !== undefined ?
+                       jQuery.style( elem, name, value ) :
+                       jQuery.css( elem, name );
+       }, name, value, arguments.length > 1 );
+};
+
+jQuery.extend({
+       // Add in style property hooks for overriding the default
+       // behavior of getting and setting a style property
+       cssHooks: {
+               opacity: {
+                       get: function( elem, computed ) {
+                               if ( computed ) {
+                                       // We should always get a number back from opacity
+                                       var ret = curCSS( elem, "opacity" );
+                                       return ret === "" ? "1" : ret;
+
+                               } else {
+                                       return elem.style.opacity;
+                               }
+                       }
+               }
+       },
+
+       // Exclude the following css properties to add px
+       cssNumber: {
+               "fillOpacity": true,
+               "fontWeight": true,
+               "lineHeight": true,
+               "opacity": true,
+               "orphans": true,
+               "widows": true,
+               "zIndex": true,
+               "zoom": true
+       },
+
+       // Add in properties whose names you wish to fix before
+       // setting or getting the value
+       cssProps: {
+               // normalize float css property
+               "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
+       },
+
+       // Get and set the style property on a DOM Node
+       style: function( elem, name, value, extra ) {
+               // Don't set styles on text and comment nodes
+               if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+                       return;
+               }
+
+               // Make sure that we're working with the right name
+               var ret, type, origName = jQuery.camelCase( name ),
+                       style = elem.style, hooks = jQuery.cssHooks[ origName ];
+
+               name = jQuery.cssProps[ origName ] || origName;
+
+               // Check if we're setting a value
+               if ( value !== undefined ) {
+                       type = typeof value;
+
+                       // convert relative number strings (+= or -=) to relative numbers. #7345
+                       if ( type === "string" && (ret = rrelNum.exec( value )) ) {
+                               value = ( +( ret[1] + 1) * +ret[2] ) + parseFloat( jQuery.css( elem, name ) );
+                               // Fixes bug #9237
+                               type = "number";
+                       }
+
+                       // Make sure that NaN and null values aren't set. See: #7116
+                       if ( value == null || type === "number" && isNaN( value ) ) {
+                               return;
+                       }
+
+                       // If a number was passed in, add 'px' to the (except for certain CSS properties)
+                       if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
+                               value += "px";
+                       }
+
+                       // If a hook was provided, use that value, otherwise just set the specified value
+                       if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
+                               // Wrapped to prevent IE from throwing errors when 'invalid' values are provided
+                               // Fixes bug #5509
+                               try {
+                                       style[ name ] = value;
+                               } catch(e) {}
+                       }
+
+               } else {
+                       // If a hook was provided get the non-computed value from there
+                       if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
+                               return ret;
+                       }
+
+                       // Otherwise just get the value from the style object
+                       return style[ name ];
+               }
+       },
+
+       css: function( elem, name, extra ) {
+               var ret, hooks;
+
+               // Make sure that we're working with the right name
+               name = jQuery.camelCase( name );
+               hooks = jQuery.cssHooks[ name ];
+               name = jQuery.cssProps[ name ] || name;
+
+               // cssFloat needs a special treatment
+               if ( name === "cssFloat" ) {
+                       name = "float";
+               }
+
+               // If a hook was provided get the computed value from there
+               if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {
+                       return ret;
+
+               // Otherwise, if a way to get the computed value exists, use that
+               } else if ( curCSS ) {
+                       return curCSS( elem, name );
+               }
+       },
+
+       // A method for quickly swapping in/out CSS properties to get correct calculations
+       swap: function( elem, options, callback ) {
+               var old = {},
+                       ret, name;
+
+               // Remember the old values, and insert the new ones
+               for ( name in options ) {
+                       old[ name ] = elem.style[ name ];
+                       elem.style[ name ] = options[ name ];
+               }
+
+               ret = callback.call( elem );
+
+               // Revert the old values
+               for ( name in options ) {
+                       elem.style[ name ] = old[ name ];
+               }
+
+               return ret;
+       }
+});
+
+// DEPRECATED in 1.3, Use jQuery.css() instead
+jQuery.curCSS = jQuery.css;
+
+if ( document.defaultView && document.defaultView.getComputedStyle ) {
+       getComputedStyle = function( elem, name ) {
+               var ret, defaultView, computedStyle, width,
+                       style = elem.style;
+
+               name = name.replace( rupper, "-$1" ).toLowerCase();
+
+               if ( (defaultView = elem.ownerDocument.defaultView) &&
+                               (computedStyle = defaultView.getComputedStyle( elem, null )) ) {
+
+                       ret = computedStyle.getPropertyValue( name );
+                       if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
+                               ret = jQuery.style( elem, name );
+                       }
+               }
+
+               // A tribute to the "awesome hack by Dean Edwards"
+               // WebKit uses "computed value (percentage if specified)" instead of "used value" for margins
+               // which is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
+               if ( !jQuery.support.pixelMargin && computedStyle && rmargin.test( name ) && rnumnonpx.test( ret ) ) {
+                       width = style.width;
+                       style.width = ret;
+                       ret = computedStyle.width;
+                       style.width = width;
+               }
+
+               return ret;
+       };
+}
+
+if ( document.documentElement.currentStyle ) {
+       currentStyle = function( elem, name ) {
+               var left, rsLeft, uncomputed,
+                       ret = elem.currentStyle && elem.currentStyle[ name ],
+                       style = elem.style;
+
+               // Avoid setting ret to empty string here
+               // so we don't default to auto
+               if ( ret == null && style && (uncomputed = style[ name ]) ) {
+                       ret = uncomputed;
+               }
+
+               // From the awesome hack by Dean Edwards
+               // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
+
+               // If we're not dealing with a regular pixel number
+               // but a number that has a weird ending, we need to convert it to pixels
+               if ( rnumnonpx.test( ret ) ) {
+
+                       // Remember the original values
+                       left = style.left;
+                       rsLeft = elem.runtimeStyle && elem.runtimeStyle.left;
+
+                       // Put in the new values to get a computed value out
+                       if ( rsLeft ) {
+                               elem.runtimeStyle.left = elem.currentStyle.left;
+                       }
+                       style.left = name === "fontSize" ? "1em" : ret;
+                       ret = style.pixelLeft + "px";
+
+                       // Revert the changed values
+                       style.left = left;
+                       if ( rsLeft ) {
+                               elem.runtimeStyle.left = rsLeft;
+                       }
+               }
+
+               return ret === "" ? "auto" : ret;
+       };
+}
+
+curCSS = getComputedStyle || currentStyle;
+
+function getWidthOrHeight( elem, name, extra ) {
+
+       // Start with offset property
+       var val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
+               i = name === "width" ? 1 : 0,
+               len = 4;
+
+       if ( val > 0 ) {
+               if ( extra !== "border" ) {
+                       for ( ; i < len; i += 2 ) {
+                               if ( !extra ) {
+                                       val -= parseFloat( jQuery.css( elem, "padding" + cssExpand[ i ] ) ) || 0;
+                               }
+                               if ( extra === "margin" ) {
+                                       val += parseFloat( jQuery.css( elem, extra + cssExpand[ i ] ) ) || 0;
+                               } else {
+                                       val -= parseFloat( jQuery.css( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0;
+                               }
+                       }
+               }
+
+               return val + "px";
+       }
+
+       // Fall back to computed then uncomputed css if necessary
+       val = curCSS( elem, name );
+       if ( val < 0 || val == null ) {
+               val = elem.style[ name ];
+       }
+
+       // Computed unit is not pixels. Stop here and return.
+       if ( rnumnonpx.test(val) ) {
+               return val;
+       }
+
+       // Normalize "", auto, and prepare for extra
+       val = parseFloat( val ) || 0;
+
+       // Add padding, border, margin
+       if ( extra ) {
+               for ( ; i < len; i += 2 ) {
+                       val += parseFloat( jQuery.css( elem, "padding" + cssExpand[ i ] ) ) || 0;
+                       if ( extra !== "padding" ) {
+                               val += parseFloat( jQuery.css( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0;
+                       }
+                       if ( extra === "margin" ) {
+                               val += parseFloat( jQuery.css( elem, extra + cssExpand[ i ]) ) || 0;
+                       }
+               }
+       }
+
+       return val + "px";
+}
+
+jQuery.each([ "height", "width" ], function( i, name ) {
+       jQuery.cssHooks[ name ] = {
+               get: function( elem, computed, extra ) {
+                       if ( computed ) {
+                               if ( elem.offsetWidth !== 0 ) {
+                                       return getWidthOrHeight( elem, name, extra );
+                               } else {
+                                       return jQuery.swap( elem, cssShow, function() {
+                                               return getWidthOrHeight( elem, name, extra );
+                                       });
+                               }
+                       }
+               },
+
+               set: function( elem, value ) {
+                       return rnum.test( value ) ?
+                               value + "px" :
+                               value;
+               }
+       };
+});
+
+if ( !jQuery.support.opacity ) {
+       jQuery.cssHooks.opacity = {
+               get: function( elem, computed ) {
+                       // IE uses filters for opacity
+                       return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
+                               ( parseFloat( RegExp.$1 ) / 100 ) + "" :
+                               computed ? "1" : "";
+               },
+
+               set: function( elem, value ) {
+                       var style = elem.style,
+                               currentStyle = elem.currentStyle,
+                               opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
+                               filter = currentStyle && currentStyle.filter || style.filter || "";
+
+                       // IE has trouble with opacity if it does not have layout
+                       // Force it by setting the zoom level
+                       style.zoom = 1;
+
+                       // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
+                       if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" ) {
+
+                               // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
+                               // if "filter:" is present at all, clearType is disabled, we want to avoid this
+                               // style.removeAttribute is IE Only, but so apparently is this code path...
+                               style.removeAttribute( "filter" );
+
+                               // if there there is no filter style applied in a css rule, we are done
+                               if ( currentStyle && !currentStyle.filter ) {
+                                       return;
+                               }
+                       }
+
+                       // otherwise, set new filter values
+                       style.filter = ralpha.test( filter ) ?
+                               filter.replace( ralpha, opacity ) :
+                               filter + " " + opacity;
+               }
+       };
+}
+
+jQuery(function() {
+       // This hook cannot be added until DOM ready because the support test
+       // for it is not run until after DOM ready
+       if ( !jQuery.support.reliableMarginRight ) {
+               jQuery.cssHooks.marginRight = {
+                       get: function( elem, computed ) {
+                               // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+                               // Work around by temporarily setting element display to inline-block
+                               return jQuery.swap( elem, { "display": "inline-block" }, function() {
+                                       if ( computed ) {
+                                               return curCSS( elem, "margin-right" );
+                                       } else {
+                                               return elem.style.marginRight;
+                                       }
+                               });
+                       }
+               };
+       }
+});
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+       jQuery.expr.filters.hidden = function( elem ) {
+               var width = elem.offsetWidth,
+                       height = elem.offsetHeight;
+
+               return ( width === 0 && height === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
+       };
+
+       jQuery.expr.filters.visible = function( elem ) {
+               return !jQuery.expr.filters.hidden( elem );
+       };
+}
+
+// These hooks are used by animate to expand properties
+jQuery.each({
+       margin: "",
+       padding: "",
+       border: "Width"
+}, function( prefix, suffix ) {
+
+       jQuery.cssHooks[ prefix + suffix ] = {
+               expand: function( value ) {
+                       var i,
+
+                               // assumes a single number if not a string
+                               parts = typeof value === "string" ? value.split(" ") : [ value ],
+                               expanded = {};
+
+                       for ( i = 0; i < 4; i++ ) {
+                               expanded[ prefix + cssExpand[ i ] + suffix ] =
+                                       parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
+                       }
+
+                       return expanded;
+               }
+       };
+});
+
+
+
+
+var r20 = /%20/g,
+       rbracket = /\[\]$/,
+       rCRLF = /\r?\n/g,
+       rhash = /#.*$/,
+       rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
+       rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
+       // #7653, #8125, #8152: local protocol detection
+       rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,
+       rnoContent = /^(?:GET|HEAD)$/,
+       rprotocol = /^\/\//,
+       rquery = /\?/,
+       rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
+       rselectTextarea = /^(?:select|textarea)/i,
+       rspacesAjax = /\s+/,
+       rts = /([?&])_=[^&]*/,
+       rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
+
+       // Keep a copy of the old load method
+       _load = jQuery.fn.load,
+
+       /* Prefilters
+        * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+        * 2) These are called:
+        *    - BEFORE asking for a transport
+        *    - AFTER param serialization (s.data is a string if s.processData is true)
+        * 3) key is the dataType
+        * 4) the catchall symbol "*" can be used
+        * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+        */
+       prefilters = {},
+
+       /* Transports bindings
+        * 1) key is the dataType
+        * 2) the catchall symbol "*" can be used
+        * 3) selection will start with transport dataType and THEN go to "*" if needed
+        */
+       transports = {},
+
+       // Document location
+       ajaxLocation,
+
+       // Document location segments
+       ajaxLocParts,
+
+       // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+       allTypes = ["*/"] + ["*"];
+
+// #8138, IE may throw an exception when accessing
+// a field from window.location if document.domain has been set
+try {
+       ajaxLocation = location.href;
+} catch( e ) {
+       // Use the href attribute of an A element
+       // since IE will modify it given document.location
+       ajaxLocation = document.createElement( "a" );
+       ajaxLocation.href = "";
+       ajaxLocation = ajaxLocation.href;
+}
+
+// Segment location into parts
+ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+       // dataTypeExpression is optional and defaults to "*"
+       return function( dataTypeExpression, func ) {
+
+               if ( typeof dataTypeExpression !== "string" ) {
+                       func = dataTypeExpression;
+                       dataTypeExpression = "*";
+               }
+
+               if ( jQuery.isFunction( func ) ) {
+                       var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),
+                               i = 0,
+                               length = dataTypes.length,
+                               dataType,
+                               list,
+                               placeBefore;
+
+                       // For each dataType in the dataTypeExpression
+                       for ( ; i < length; i++ ) {
+                               dataType = dataTypes[ i ];
+                               // We control if we're asked to add before
+                               // any existing element
+                               placeBefore = /^\+/.test( dataType );
+                               if ( placeBefore ) {
+                                       dataType = dataType.substr( 1 ) || "*";
+                               }
+                               list = structure[ dataType ] = structure[ dataType ] || [];
+                               // then we add to the structure accordingly
+                               list[ placeBefore ? "unshift" : "push" ]( func );
+                       }
+               }
+       };
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
+               dataType /* internal */, inspected /* internal */ ) {
+
+       dataType = dataType || options.dataTypes[ 0 ];
+       inspected = inspected || {};
+
+       inspected[ dataType ] = true;
+
+       var list = structure[ dataType ],
+               i = 0,
+               length = list ? list.length : 0,
+               executeOnly = ( structure === prefilters ),
+               selection;
+
+       for ( ; i < length && ( executeOnly || !selection ); i++ ) {
+               selection = list[ i ]( options, originalOptions, jqXHR );
+               // If we got redirected to another dataType
+               // we try there if executing only and not done already
+               if ( typeof selection === "string" ) {
+                       if ( !executeOnly || inspected[ selection ] ) {
+                               selection = undefined;
+                       } else {
+                               options.dataTypes.unshift( selection );
+                               selection = inspectPrefiltersOrTransports(
+                                               structure, options, originalOptions, jqXHR, selection, inspected );
+                       }
+               }
+       }
+       // If we're only executing or nothing was selected
+       // we try the catchall dataType if not done already
+       if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
+               selection = inspectPrefiltersOrTransports(
+                               structure, options, originalOptions, jqXHR, "*", inspected );
+       }
+       // unnecessary when only executing (prefilters)
+       // but it'll be ignored by the caller in that case
+       return selection;
+}
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+       var key, deep,
+               flatOptions = jQuery.ajaxSettings.flatOptions || {};
+       for ( key in src ) {
+               if ( src[ key ] !== undefined ) {
+                       ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
+               }
+       }
+       if ( deep ) {
+               jQuery.extend( true, target, deep );
+       }
+}
+
+jQuery.fn.extend({
+       load: function( url, params, callback ) {
+               if ( typeof url !== "string" && _load ) {
+                       return _load.apply( this, arguments );
+
+               // Don't do a request if no elements are being requested
+               } else if ( !this.length ) {
+                       return this;
+               }
+
+               var off = url.indexOf( " " );
+               if ( off >= 0 ) {
+                       var selector = url.slice( off, url.length );
+                       url = url.slice( 0, off );
+               }
+
+               // Default to a GET request
+               var type = "GET";
+
+               // If the second parameter was provided
+               if ( params ) {
+                       // If it's a function
+                       if ( jQuery.isFunction( params ) ) {
+                               // We assume that it's the callback
+                               callback = params;
+                               params = undefined;
+
+                       // Otherwise, build a param string
+                       } else if ( typeof params === "object" ) {
+                               params = jQuery.param( params, jQuery.ajaxSettings.traditional );
+                               type = "POST";
+                       }
+               }
+
+               var self = this;
+
+               // Request the remote document
+               jQuery.ajax({
+                       url: url,
+                       type: type,
+                       dataType: "html",
+                       data: params,
+                       // Complete callback (responseText is used internally)
+                       complete: function( jqXHR, status, responseText ) {
+                               // Store the response as specified by the jqXHR object
+                               responseText = jqXHR.responseText;
+                               // If successful, inject the HTML into all the matched elements
+                               if ( jqXHR.isResolved() ) {
+                                       // #4825: Get the actual response in case
+                                       // a dataFilter is present in ajaxSettings
+                                       jqXHR.done(function( r ) {
+                                               responseText = r;
+                                       });
+                                       // See if a selector was specified
+                                       self.html( selector ?
+                                               // Create a dummy div to hold the results
+                                               jQuery("<div>")
+                                                       // inject the contents of the document in, removing the scripts
+                                                       // to avoid any 'Permission Denied' errors in IE
+                                                       .append(responseText.replace(rscript, ""))
+
+                                                       // Locate the specified elements
+                                                       .find(selector) :
+
+                                               // If not, just inject the full result
+                                               responseText );
+                               }
+
+                               if ( callback ) {
+                                       self.each( callback, [ responseText, status, jqXHR ] );
+                               }
+                       }
+               });
+
+               return this;
+       },
+
+       serialize: function() {
+               return jQuery.param( this.serializeArray() );
+       },
+
+       serializeArray: function() {
+               return this.map(function(){
+                       return this.elements ? jQuery.makeArray( this.elements ) : this;
+               })
+               .filter(function(){
+                       return this.name && !this.disabled &&
+                               ( this.checked || rselectTextarea.test( this.nodeName ) ||
+                                       rinput.test( this.type ) );
+               })
+               .map(function( i, elem ){
+                       var val = jQuery( this ).val();
+
+                       return val == null ?
+                               null :
+                               jQuery.isArray( val ) ?
+                                       jQuery.map( val, function( val, i ){
+                                               return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+                                       }) :
+                                       { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+               }).get();
+       }
+});
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
+       jQuery.fn[ o ] = function( f ){
+               return this.on( o, f );
+       };
+});
+
+jQuery.each( [ "get", "post" ], function( i, method ) {
+       jQuery[ method ] = function( url, data, callback, type ) {
+               // shift arguments if data argument was omitted
+               if ( jQuery.isFunction( data ) ) {
+                       type = type || callback;
+                       callback = data;
+                       data = undefined;
+               }
+
+               return jQuery.ajax({
+                       type: method,
+                       url: url,
+                       data: data,
+                       success: callback,
+                       dataType: type
+               });
+       };
+});
+
+jQuery.extend({
+
+       getScript: function( url, callback ) {
+               return jQuery.get( url, undefined, callback, "script" );
+       },
+
+       getJSON: function( url, data, callback ) {
+               return jQuery.get( url, data, callback, "json" );
+       },
+
+       // Creates a full fledged settings object into target
+       // with both ajaxSettings and settings fields.
+       // If target is omitted, writes into ajaxSettings.
+       ajaxSetup: function( target, settings ) {
+               if ( settings ) {
+                       // Building a settings object
+                       ajaxExtend( target, jQuery.ajaxSettings );
+               } else {
+                       // Extending ajaxSettings
+                       settings = target;
+                       target = jQuery.ajaxSettings;
+               }
+               ajaxExtend( target, settings );
+               return target;
+       },
+
+       ajaxSettings: {
+               url: ajaxLocation,
+               isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
+               global: true,
+               type: "GET",
+               contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+               processData: true,
+               async: true,
+               /*
+               timeout: 0,
+               data: null,
+               dataType: null,
+               username: null,
+               password: null,
+               cache: null,
+               traditional: false,
+               headers: {},
+               */
+
+               accepts: {
+                       xml: "application/xml, text/xml",
+                       html: "text/html",
+                       text: "text/plain",
+                       json: "application/json, text/javascript",
+                       "*": allTypes
+               },
+
+               contents: {
+                       xml: /xml/,
+                       html: /html/,
+                       json: /json/
+               },
+
+               responseFields: {
+                       xml: "responseXML",
+                       text: "responseText"
+               },
+
+               // List of data converters
+               // 1) key format is "source_type destination_type" (a single space in-between)
+               // 2) the catchall symbol "*" can be used for source_type
+               converters: {
+
+                       // Convert anything to text
+                       "* text": window.String,
+
+                       // Text to html (true = no transformation)
+                       "text html": true,
+
+                       // Evaluate text as a json expression
+                       "text json": jQuery.parseJSON,
+
+                       // Parse text as xml
+                       "text xml": jQuery.parseXML
+               },
+
+               // For options that shouldn't be deep extended:
+               // you can add your own custom options here if
+               // and when you create one that shouldn't be
+               // deep extended (see ajaxExtend)
+               flatOptions: {
+                       context: true,
+                       url: true
+               }
+       },
+
+       ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+       ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+       // Main method
+       ajax: function( url, options ) {
+
+               // If url is an object, simulate pre-1.5 signature
+               if ( typeof url === "object" ) {
+                       options = url;
+                       url = undefined;
+               }
+
+               // Force options to be an object
+               options = options || {};
+
+               var // Create the final options object
+                       s = jQuery.ajaxSetup( {}, options ),
+                       // Callbacks context
+                       callbackContext = s.context || s,
+                       // Context for global events
+                       // It's the callbackContext if one was provided in the options
+                       // and if it's a DOM node or a jQuery collection
+                       globalEventContext = callbackContext !== s &&
+                               ( callbackContext.nodeType || callbackContext instanceof jQuery ) ?
+                                               jQuery( callbackContext ) : jQuery.event,
+                       // Deferreds
+                       deferred = jQuery.Deferred(),
+                       completeDeferred = jQuery.Callbacks( "once memory" ),
+                       // Status-dependent callbacks
+                       statusCode = s.statusCode || {},
+                       // ifModified key
+                       ifModifiedKey,
+                       // Headers (they are sent all at once)
+                       requestHeaders = {},
+                       requestHeadersNames = {},
+                       // Response headers
+                       responseHeadersString,
+                       responseHeaders,
+                       // transport
+                       transport,
+                       // timeout handle
+                       timeoutTimer,
+                       // Cross-domain detection vars
+                       parts,
+                       // The jqXHR state
+                       state = 0,
+                       // To know if global events are to be dispatched
+                       fireGlobals,
+                       // Loop variable
+                       i,
+                       // Fake xhr
+                       jqXHR = {
+
+                               readyState: 0,
+
+                               // Caches the header
+                               setRequestHeader: function( name, value ) {
+                                       if ( !state ) {
+                                               var lname = name.toLowerCase();
+                                               name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
+                                               requestHeaders[ name ] = value;
+                                       }
+                                       return this;
+                               },
+
+                               // Raw string
+                               getAllResponseHeaders: function() {
+                                       return state === 2 ? responseHeadersString : null;
+                               },
+
+                               // Builds headers hashtable if needed
+                               getResponseHeader: function( key ) {
+                                       var match;
+                                       if ( state === 2 ) {
+                                               if ( !responseHeaders ) {
+                                                       responseHeaders = {};
+                                                       while( ( match = rheaders.exec( responseHeadersString ) ) ) {
+                                                               responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
+                                                       }
+                                               }
+                                               match = responseHeaders[ key.toLowerCase() ];
+                                       }
+                                       return match === undefined ? null : match;
+                               },
+
+                               // Overrides response content-type header
+                               overrideMimeType: function( type ) {
+                                       if ( !state ) {
+                                               s.mimeType = type;
+                                       }
+                                       return this;
+                               },
+
+                               // Cancel the request
+                               abort: function( statusText ) {
+                                       statusText = statusText || "abort";
+                                       if ( transport ) {
+                                               transport.abort( statusText );
+                                       }
+                                       done( 0, statusText );
+                                       return this;
+                               }
+                       };
+
+               // Callback for when everything is done
+               // It is defined here because jslint complains if it is declared
+               // at the end of the function (which would be more logical and readable)
+               function done( status, nativeStatusText, responses, headers ) {
+
+                       // Called once
+                       if ( state === 2 ) {
+                               return;
+                       }
+
+                       // State is "done" now
+                       state = 2;
+
+                       // Clear timeout if it exists
+                       if ( timeoutTimer ) {
+                               clearTimeout( timeoutTimer );
+                       }
+
+                       // Dereference transport for early garbage collection
+                       // (no matter how long the jqXHR object will be used)
+                       transport = undefined;
+
+                       // Cache response headers
+                       responseHeadersString = headers || "";
+
+                       // Set readyState
+                       jqXHR.readyState = status > 0 ? 4 : 0;
+
+                       var isSuccess,
+                               success,
+                               error,
+                               statusText = nativeStatusText,
+                               response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
+                               lastModified,
+                               etag;
+
+                       // If successful, handle type chaining
+                       if ( status >= 200 && status < 300 || status === 304 ) {
+
+                               // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+                               if ( s.ifModified ) {
+
+                                       if ( ( lastModified = jqXHR.getResponseHeader( "Last-Modified" ) ) ) {
+                                               jQuery.lastModified[ ifModifiedKey ] = lastModified;
+                                       }
+                                       if ( ( etag = jqXHR.getResponseHeader( "Etag" ) ) ) {
+                                               jQuery.etag[ ifModifiedKey ] = etag;
+                                       }
+                               }
+
+                               // If not modified
+                               if ( status === 304 ) {
+
+                                       statusText = "notmodified";
+                                       isSuccess = true;
+
+                               // If we have data
+                               } else {
+
+                                       try {
+                                               success = ajaxConvert( s, response );
+                                               statusText = "success";
+                                               isSuccess = true;
+                                       } catch(e) {
+                                               // We have a parsererror
+                                               statusText = "parsererror";
+                                               error = e;
+                                       }
+                               }
+                       } else {
+                               // We extract error from statusText
+                               // then normalize statusText and status for non-aborts
+                               error = statusText;
+                               if ( !statusText || status ) {
+                                       statusText = "error";
+                                       if ( status < 0 ) {
+                                               status = 0;
+                                       }
+                               }
+                       }
+
+                       // Set data for the fake xhr object
+                       jqXHR.status = status;
+                       jqXHR.statusText = "" + ( nativeStatusText || statusText );
+
+                       // Success/Error
+                       if ( isSuccess ) {
+                               deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+                       } else {
+                               deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+                       }
+
+                       // Status-dependent callbacks
+                       jqXHR.statusCode( statusCode );
+                       statusCode = undefined;
+
+                       if ( fireGlobals ) {
+                               globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
+                                               [ jqXHR, s, isSuccess ? success : error ] );
+                       }
+
+                       // Complete
+                       completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+
+                       if ( fireGlobals ) {
+                               globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+                               // Handle the global AJAX counter
+                               if ( !( --jQuery.active ) ) {
+                                       jQuery.event.trigger( "ajaxStop" );
+                               }
+                       }
+               }
+
+               // Attach deferreds
+               deferred.promise( jqXHR );
+               jqXHR.success = jqXHR.done;
+               jqXHR.error = jqXHR.fail;
+               jqXHR.complete = completeDeferred.add;
+
+               // Status-dependent callbacks
+               jqXHR.statusCode = function( map ) {
+                       if ( map ) {
+                               var tmp;
+                               if ( state < 2 ) {
+                                       for ( tmp in map ) {
+                                               statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
+                                       }
+                               } else {
+                                       tmp = map[ jqXHR.status ];
+                                       jqXHR.then( tmp, tmp );
+                               }
+                       }
+                       return this;
+               };
+
+               // Remove hash character (#7531: and string promotion)
+               // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
+               // We also use the url parameter if available
+               s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
+
+               // Extract dataTypes list
+               s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( rspacesAjax );
+
+               // Determine if a cross-domain request is in order
+               if ( s.crossDomain == null ) {
+                       parts = rurl.exec( s.url.toLowerCase() );
+                       s.crossDomain = !!( parts &&
+                               ( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||
+                                       ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
+                                               ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
+                       );
+               }
+
+               // Convert data if not already a string
+               if ( s.data && s.processData && typeof s.data !== "string" ) {
+                       s.data = jQuery.param( s.data, s.traditional );
+               }
+
+               // Apply prefilters
+               inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+               // If request was aborted inside a prefilter, stop there
+               if ( state === 2 ) {
+                       return false;
+               }
+
+               // We can fire global events as of now if asked to
+               fireGlobals = s.global;
+
+               // Uppercase the type
+               s.type = s.type.toUpperCase();
+
+               // Determine if request has content
+               s.hasContent = !rnoContent.test( s.type );
+
+               // Watch for a new set of requests
+               if ( fireGlobals && jQuery.active++ === 0 ) {
+                       jQuery.event.trigger( "ajaxStart" );
+               }
+
+               // More options handling for requests with no content
+               if ( !s.hasContent ) {
+
+                       // If data is available, append data to url
+                       if ( s.data ) {
+                               s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
+                               // #9682: remove data so that it's not used in an eventual retry
+                               delete s.data;
+                       }
+
+                       // Get ifModifiedKey before adding the anti-cache parameter
+                       ifModifiedKey = s.url;
+
+                       // Add anti-cache in url if needed
+                       if ( s.cache === false ) {
+
+                               var ts = jQuery.now(),
+                                       // try replacing _= if it is there
+                                       ret = s.url.replace( rts, "$1_=" + ts );
+
+                               // if nothing was replaced, add timestamp to the end
+                               s.url = ret + ( ( ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
+                       }
+               }
+
+               // Set the correct header, if data is being sent
+               if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+                       jqXHR.setRequestHeader( "Content-Type", s.contentType );
+               }
+
+               // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+               if ( s.ifModified ) {
+                       ifModifiedKey = ifModifiedKey || s.url;
+                       if ( jQuery.lastModified[ ifModifiedKey ] ) {
+                               jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] );
+                       }
+                       if ( jQuery.etag[ ifModifiedKey ] ) {
+                               jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] );
+                       }
+               }
+
+               // Set the Accepts header for the server, depending on the dataType
+               jqXHR.setRequestHeader(
+                       "Accept",
+                       s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
+                               s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+                               s.accepts[ "*" ]
+               );
+
+               // Check for headers option
+               for ( i in s.headers ) {
+                       jqXHR.setRequestHeader( i, s.headers[ i ] );
+               }
+
+               // Allow custom headers/mimetypes and early abort
+               if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
+                               // Abort if not done already
+                               jqXHR.abort();
+                               return false;
+
+               }
+
+               // Install callbacks on deferreds
+               for ( i in { success: 1, error: 1, complete: 1 } ) {
+                       jqXHR[ i ]( s[ i ] );
+               }
+
+               // Get transport
+               transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+               // If no transport, we auto-abort
+               if ( !transport ) {
+                       done( -1, "No Transport" );
+               } else {
+                       jqXHR.readyState = 1;
+                       // Send global event
+                       if ( fireGlobals ) {
+                               globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+                       }
+                       // Timeout
+                       if ( s.async && s.timeout > 0 ) {
+                               timeoutTimer = setTimeout( function(){
+                                       jqXHR.abort( "timeout" );
+                               }, s.timeout );
+                       }
+
+                       try {
+                               state = 1;
+                               transport.send( requestHeaders, done );
+                       } catch (e) {
+                               // Propagate exception as error if not done
+                               if ( state < 2 ) {
+                                       done( -1, e );
+                               // Simply rethrow otherwise
+                               } else {
+                                       throw e;
+                               }
+                       }
+               }
+
+               return jqXHR;
+       },
+
+       // Serialize an array of form elements or a set of
+       // key/values into a query string
+       param: function( a, traditional ) {
+               var s = [],
+                       add = function( key, value ) {
+                               // If value is a function, invoke it and return its value
+                               value = jQuery.isFunction( value ) ? value() : value;
+                               s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
+                       };
+
+               // Set traditional to true for jQuery <= 1.3.2 behavior.
+               if ( traditional === undefined ) {
+                       traditional = jQuery.ajaxSettings.traditional;
+               }
+
+               // If an array was passed in, assume that it is an array of form elements.
+               if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+                       // Serialize the form elements
+                       jQuery.each( a, function() {
+                               add( this.name, this.value );
+                       });
+
+               } else {
+                       // If traditional, encode the "old" way (the way 1.3.2 or older
+                       // did it), otherwise encode params recursively.
+                       for ( var prefix in a ) {
+                               buildParams( prefix, a[ prefix ], traditional, add );
+                       }
+               }
+
+               // Return the resulting serialization
+               return s.join( "&" ).replace( r20, "+" );
+       }
+});
+
+function buildParams( prefix, obj, traditional, add ) {
+       if ( jQuery.isArray( obj ) ) {
+               // Serialize array item.
+               jQuery.each( obj, function( i, v ) {
+                       if ( traditional || rbracket.test( prefix ) ) {
+                               // Treat each array item as a scalar.
+                               add( prefix, v );
+
+                       } else {
+                               // If array item is non-scalar (array or object), encode its
+                               // numeric index to resolve deserialization ambiguity issues.
+                               // Note that rack (as of 1.0.0) can't currently deserialize
+                               // nested arrays properly, and attempting to do so may cause
+                               // a server error. Possible fixes are to modify rack's
+                               // deserialization algorithm or to provide an option or flag
+                               // to force array serialization to be shallow.
+                               buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
+                       }
+               });
+
+       } else if ( !traditional && jQuery.type( obj ) === "object" ) {
+               // Serialize object item.
+               for ( var name in obj ) {
+                       buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+               }
+
+       } else {
+               // Serialize scalar item.
+               add( prefix, obj );
+       }
+}
+
+// This is still on the jQuery object... for now
+// Want to move this to jQuery.ajax some day
+jQuery.extend({
+
+       // Counter for holding the number of active queries
+       active: 0,
+
+       // Last-Modified header cache for next request
+       lastModified: {},
+       etag: {}
+
+});
+
+/* Handles responses to an ajax request:
+ * - sets all responseXXX fields accordingly
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+
+       var contents = s.contents,
+               dataTypes = s.dataTypes,
+               responseFields = s.responseFields,
+               ct,
+               type,
+               finalDataType,
+               firstDataType;
+
+       // Fill responseXXX fields
+       for ( type in responseFields ) {
+               if ( type in responses ) {
+                       jqXHR[ responseFields[type] ] = responses[ type ];
+               }
+       }
+
+       // Remove auto dataType and get content-type in the process
+       while( dataTypes[ 0 ] === "*" ) {
+               dataTypes.shift();
+               if ( ct === undefined ) {
+                       ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
+               }
+       }
+
+       // Check if we're dealing with a known content-type
+       if ( ct ) {
+               for ( type in contents ) {
+                       if ( contents[ type ] && contents[ type ].test( ct ) ) {
+                               dataTypes.unshift( type );
+                               break;
+                       }
+               }
+       }
+
+       // Check to see if we have a response for the expected dataType
+       if ( dataTypes[ 0 ] in responses ) {
+               finalDataType = dataTypes[ 0 ];
+       } else {
+               // Try convertible dataTypes
+               for ( type in responses ) {
+                       if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
+                               finalDataType = type;
+                               break;
+                       }
+                       if ( !firstDataType ) {
+                               firstDataType = type;
+                       }
+               }
+               // Or just use first one
+               finalDataType = finalDataType || firstDataType;
+       }
+
+       // If we found a dataType
+       // We add the dataType to the list if needed
+       // and return the corresponding response
+       if ( finalDataType ) {
+               if ( finalDataType !== dataTypes[ 0 ] ) {
+                       dataTypes.unshift( finalDataType );
+               }
+               return responses[ finalDataType ];
+       }
+}
+
+// Chain conversions given the request and the original response
+function ajaxConvert( s, response ) {
+
+       // Apply the dataFilter if provided
+       if ( s.dataFilter ) {
+               response = s.dataFilter( response, s.dataType );
+       }
+
+       var dataTypes = s.dataTypes,
+               converters = {},
+               i,
+               key,
+               length = dataTypes.length,
+               tmp,
+               // Current and previous dataTypes
+               current = dataTypes[ 0 ],
+               prev,
+               // Conversion expression
+               conversion,
+               // Conversion function
+               conv,
+               // Conversion functions (transitive conversion)
+               conv1,
+               conv2;
+
+       // For each dataType in the chain
+       for ( i = 1; i < length; i++ ) {
+
+               // Create converters map
+               // with lowercased keys
+               if ( i === 1 ) {
+                       for ( key in s.converters ) {
+                               if ( typeof key === "string" ) {
+                                       converters[ key.toLowerCase() ] = s.converters[ key ];
+                               }
+                       }
+               }
+
+               // Get the dataTypes
+               prev = current;
+               current = dataTypes[ i ];
+
+               // If current is auto dataType, update it to prev
+               if ( current === "*" ) {
+                       current = prev;
+               // If no auto and dataTypes are actually different
+               } else if ( prev !== "*" && prev !== current ) {
+
+                       // Get the converter
+                       conversion = prev + " " + current;
+                       conv = converters[ conversion ] || converters[ "* " + current ];
+
+                       // If there is no direct converter, search transitively
+                       if ( !conv ) {
+                               conv2 = undefined;
+                               for ( conv1 in converters ) {
+                                       tmp = conv1.split( " " );
+                                       if ( tmp[ 0 ] === prev || tmp[ 0 ] === "*" ) {
+                                               conv2 = converters[ tmp[1] + " " + current ];
+                                               if ( conv2 ) {
+                                                       conv1 = converters[ conv1 ];
+                                                       if ( conv1 === true ) {
+                                                               conv = conv2;
+                                                       } else if ( conv2 === true ) {
+                                                               conv = conv1;
+                                                       }
+                                                       break;
+                                               }
+                                       }
+                               }
+                       }
+                       // If we found no converter, dispatch an error
+                       if ( !( conv || conv2 ) ) {
+                               jQuery.error( "No conversion from " + conversion.replace(" "," to ") );
+                       }
+                       // If found converter is not an equivalence
+                       if ( conv !== true ) {
+                               // Convert with 1 or 2 converters accordingly
+                               response = conv ? conv( response ) : conv2( conv1(response) );
+                       }
+               }
+       }
+       return response;
+}
+
+
+
+
+var jsc = jQuery.now(),
+       jsre = /(\=)\?(&|$)|\?\?/i;
+
+// Default jsonp settings
+jQuery.ajaxSetup({
+       jsonp: "callback",
+       jsonpCallback: function() {
+               return jQuery.expando + "_" + ( jsc++ );
+       }
+});
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+       var inspectData = ( typeof s.data === "string" ) && /^application\/x\-www\-form\-urlencoded/.test( s.contentType );
+
+       if ( s.dataTypes[ 0 ] === "jsonp" ||
+               s.jsonp !== false && ( jsre.test( s.url ) ||
+                               inspectData && jsre.test( s.data ) ) ) {
+
+               var responseContainer,
+                       jsonpCallback = s.jsonpCallback =
+                               jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,
+                       previous = window[ jsonpCallback ],
+                       url = s.url,
+                       data = s.data,
+                       replace = "$1" + jsonpCallback + "$2";
+
+               if ( s.jsonp !== false ) {
+                       url = url.replace( jsre, replace );
+                       if ( s.url === url ) {
+                               if ( inspectData ) {
+                                       data = data.replace( jsre, replace );
+                               }
+                               if ( s.data === data ) {
+                                       // Add callback manually
+                                       url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback;
+                               }
+                       }
+               }
+
+               s.url = url;
+               s.data = data;
+
+               // Install callback
+               window[ jsonpCallback ] = function( response ) {
+                       responseContainer = [ response ];
+               };
+
+               // Clean-up function
+               jqXHR.always(function() {
+                       // Set callback back to previous value
+                       window[ jsonpCallback ] = previous;
+                       // Call if it was a function and we have a response
+                       if ( responseContainer && jQuery.isFunction( previous ) ) {
+                               window[ jsonpCallback ]( responseContainer[ 0 ] );
+                       }
+               });
+
+               // Use data converter to retrieve json after script execution
+               s.converters["script json"] = function() {
+                       if ( !responseContainer ) {
+                               jQuery.error( jsonpCallback + " was not called" );
+                       }
+                       return responseContainer[ 0 ];
+               };
+
+               // force json dataType
+               s.dataTypes[ 0 ] = "json";
+
+               // Delegate to script
+               return "script";
+       }
+});
+
+
+
+
+// Install script dataType
+jQuery.ajaxSetup({
+       accepts: {
+               script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+       },
+       contents: {
+               script: /javascript|ecmascript/
+       },
+       converters: {
+               "text script": function( text ) {
+                       jQuery.globalEval( text );
+                       return text;
+               }
+       }
+});
+
+// Handle cache's special case and global
+jQuery.ajaxPrefilter( "script", function( s ) {
+       if ( s.cache === undefined ) {
+               s.cache = false;
+       }
+       if ( s.crossDomain ) {
+               s.type = "GET";
+               s.global = false;
+       }
+});
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function(s) {
+
+       // This transport only deals with cross domain requests
+       if ( s.crossDomain ) {
+
+               var script,
+                       head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
+
+               return {
+
+                       send: function( _, callback ) {
+
+                               script = document.createElement( "script" );
+
+                               script.async = "async";
+
+                               if ( s.scriptCharset ) {
+                                       script.charset = s.scriptCharset;
+                               }
+
+                               script.src = s.url;
+
+                               // Attach handlers for all browsers
+                               script.onload = script.onreadystatechange = function( _, isAbort ) {
+
+                                       if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
+
+                                               // Handle memory leak in IE
+                                               script.onload = script.onreadystatechange = null;
+
+                                               // Remove the script
+                                               if ( head && script.parentNode ) {
+                                                       head.removeChild( script );
+                                               }
+
+                                               // Dereference the script
+                                               script = undefined;
+
+                                               // Callback if not abort
+                                               if ( !isAbort ) {
+                                                       callback( 200, "success" );
+                                               }
+                                       }
+                               };
+                               // Use insertBefore instead of appendChild  to circumvent an IE6 bug.
+                               // This arises when a base node is used (#2709 and #4378).
+                               head.insertBefore( script, head.firstChild );
+                       },
+
+                       abort: function() {
+                               if ( script ) {
+                                       script.onload( 0, 1 );
+                               }
+                       }
+               };
+       }
+});
+
+
+
+
+var // #5280: Internet Explorer will keep connections alive if we don't abort on unload
+       xhrOnUnloadAbort = window.ActiveXObject ? function() {
+               // Abort all pending requests
+               for ( var key in xhrCallbacks ) {
+                       xhrCallbacks[ key ]( 0, 1 );
+               }
+       } : false,
+       xhrId = 0,
+       xhrCallbacks;
+
+// Functions to create xhrs
+function createStandardXHR() {
+       try {
+               return new window.XMLHttpRequest();
+       } catch( e ) {}
+}
+
+function createActiveXHR() {
+       try {
+               return new window.ActiveXObject( "Microsoft.XMLHTTP" );
+       } catch( e ) {}
+}
+
+// Create the request object
+// (This is still attached to ajaxSettings for backward compatibility)
+jQuery.ajaxSettings.xhr = window.ActiveXObject ?
+       /* Microsoft failed to properly
+        * implement the XMLHttpRequest in IE7 (can't request local files),
+        * so we use the ActiveXObject when it is available
+        * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
+        * we need a fallback.
+        */
+       function() {
+               return !this.isLocal && createStandardXHR() || createActiveXHR();
+       } :
+       // For all other browsers, use the standard XMLHttpRequest object
+       createStandardXHR;
+
+// Determine support properties
+(function( xhr ) {
+       jQuery.extend( jQuery.support, {
+               ajax: !!xhr,
+               cors: !!xhr && ( "withCredentials" in xhr )
+       });
+})( jQuery.ajaxSettings.xhr() );
+
+// Create transport if the browser can provide an xhr
+if ( jQuery.support.ajax ) {
+
+       jQuery.ajaxTransport(function( s ) {
+               // Cross domain only allowed if supported through XMLHttpRequest
+               if ( !s.crossDomain || jQuery.support.cors ) {
+
+                       var callback;
+
+                       return {
+                               send: function( headers, complete ) {
+
+                                       // Get a new xhr
+                                       var xhr = s.xhr(),
+                                               handle,
+                                               i;
+
+                                       // Open the socket
+                                       // Passing null username, generates a login popup on Opera (#2865)
+                                       if ( s.username ) {
+                                               xhr.open( s.type, s.url, s.async, s.username, s.password );
+                                       } else {
+                                               xhr.open( s.type, s.url, s.async );
+                                       }
+
+                                       // Apply custom fields if provided
+                                       if ( s.xhrFields ) {
+                                               for ( i in s.xhrFields ) {
+                                                       xhr[ i ] = s.xhrFields[ i ];
+                                               }
+                                       }
+
+                                       // Override mime type if needed
+                                       if ( s.mimeType && xhr.overrideMimeType ) {
+                                               xhr.overrideMimeType( s.mimeType );
+                                       }
+
+                                       // X-Requested-With header
+                                       // For cross-domain requests, seeing as conditions for a preflight are
+                                       // akin to a jigsaw puzzle, we simply never set it to be sure.
+                                       // (it can always be set on a per-request basis or even using ajaxSetup)
+                                       // For same-domain requests, won't change header if already provided.
+                                       if ( !s.crossDomain && !headers["X-Requested-With"] ) {
+                                               headers[ "X-Requested-With" ] = "XMLHttpRequest";
+                                       }
+
+                                       // Need an extra try/catch for cross domain requests in Firefox 3
+                                       try {
+                                               for ( i in headers ) {
+                                                       xhr.setRequestHeader( i, headers[ i ] );
+                                               }
+                                       } catch( _ ) {}
+
+                                       // Do send the request
+                                       // This may raise an exception which is actually
+                                       // handled in jQuery.ajax (so no try/catch here)
+                                       xhr.send( ( s.hasContent && s.data ) || null );
+
+                                       // Listener
+                                       callback = function( _, isAbort ) {
+
+                                               var status,
+                                                       statusText,
+                                                       responseHeaders,
+                                                       responses,
+                                                       xml;
+
+                                               // Firefox throws exceptions when accessing properties
+                                               // of an xhr when a network error occured
+                                               // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
+                                               try {
+
+                                                       // Was never called and is aborted or complete
+                                                       if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
+
+                                                               // Only called once
+                                                               callback = undefined;
+
+                                                               // Do not keep as active anymore
+                                                               if ( handle ) {
+                                                                       xhr.onreadystatechange = jQuery.noop;
+                                                                       if ( xhrOnUnloadAbort ) {
+                                                                               delete xhrCallbacks[ handle ];
+                                                                       }
+                                                               }
+
+                                                               // If it's an abort
+                                                               if ( isAbort ) {
+                                                                       // Abort it manually if needed
+                                                                       if ( xhr.readyState !== 4 ) {
+                                                                               xhr.abort();
+                                                                       }
+                                                               } else {
+                                                                       status = xhr.status;
+                                                                       responseHeaders = xhr.getAllResponseHeaders();
+                                                                       responses = {};
+                                                                       xml = xhr.responseXML;
+
+                                                                       // Construct response list
+                                                                       if ( xml && xml.documentElement /* #4958 */ ) {
+                                                                               responses.xml = xml;
+                                                                       }
+
+                                                                       // When requesting binary data, IE6-9 will throw an exception
+                                                                       // on any attempt to access responseText (#11426)
+                                                                       try {
+                                                                               responses.text = xhr.responseText;
+                                                                       } catch( _ ) {
+                                                                       }
+
+                                                                       // Firefox throws an exception when accessing
+                                                                       // statusText for faulty cross-domain requests
+                                                                       try {
+                                                                               statusText = xhr.statusText;
+                                                                       } catch( e ) {
+                                                                               // We normalize with Webkit giving an empty statusText
+                                                                               statusText = "";
+                                                                       }
+
+                                                                       // Filter status for non standard behaviors
+
+                                                                       // If the request is local and we have data: assume a success
+                                                                       // (success with no data won't get notified, that's the best we
+                                                                       // can do given current implementations)
+                                                                       if ( !status && s.isLocal && !s.crossDomain ) {
+                                                                               status = responses.text ? 200 : 404;
+                                                                       // IE - #1450: sometimes returns 1223 when it should be 204
+                                                                       } else if ( status === 1223 ) {
+                                                                               status = 204;
+                                                                       }
+                                                               }
+                                                       }
+                                               } catch( firefoxAccessException ) {
+                                                       if ( !isAbort ) {
+                                                               complete( -1, firefoxAccessException );
+                                                       }
+                                               }
+
+                                               // Call complete if needed
+                                               if ( responses ) {
+                                                       complete( status, statusText, responses, responseHeaders );
+                                               }
+                                       };
+
+                                       // if we're in sync mode or it's in cache
+                                       // and has been retrieved directly (IE6 & IE7)
+                                       // we need to manually fire the callback
+                                       if ( !s.async || xhr.readyState === 4 ) {
+                                               callback();
+                                       } else {
+                                               handle = ++xhrId;
+                                               if ( xhrOnUnloadAbort ) {
+                                                       // Create the active xhrs callbacks list if needed
+                                                       // and attach the unload handler
+                                                       if ( !xhrCallbacks ) {
+                                                               xhrCallbacks = {};
+                                                               jQuery( window ).unload( xhrOnUnloadAbort );
+                                                       }
+                                                       // Add to list of active xhrs callbacks
+                                                       xhrCallbacks[ handle ] = callback;
+                                               }
+                                               xhr.onreadystatechange = callback;
+                                       }
+                               },
+
+                               abort: function() {
+                                       if ( callback ) {
+                                               callback(0,1);
+                                       }
+                               }
+                       };
+               }
+       });
+}
+
+
+
+
+var elemdisplay = {},
+       iframe, iframeDoc,
+       rfxtypes = /^(?:toggle|show|hide)$/,
+       rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
+       timerId,
+       fxAttrs = [
+               // height animations
+               [ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
+               // width animations
+               [ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
+               // opacity animations
+               [ "opacity" ]
+       ],
+       fxNow;
+
+jQuery.fn.extend({
+       show: function( speed, easing, callback ) {
+               var elem, display;
+
+               if ( speed || speed === 0 ) {
+                       return this.animate( genFx("show", 3), speed, easing, callback );
+
+               } else {
+                       for ( var i = 0, j = this.length; i < j; i++ ) {
+                               elem = this[ i ];
+
+                               if ( elem.style ) {
+                                       display = elem.style.display;
+
+                                       // Reset the inline display of this element to learn if it is
+                                       // being hidden by cascaded rules or not
+                                       if ( !jQuery._data(elem, "olddisplay") && display === "none" ) {
+                                               display = elem.style.display = "";
+                                       }
+
+                                       // Set elements which have been overridden with display: none
+                                       // in a stylesheet to whatever the default browser style is
+                                       // for such an element
+                                       if ( (display === "" && jQuery.css(elem, "display") === "none") ||
+                                               !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
+                                               jQuery._data( elem, "olddisplay", defaultDisplay(elem.nodeName) );
+                                       }
+                               }
+                       }
+
+                       // Set the display of most of the elements in a second loop
+                       // to avoid the constant reflow
+                       for ( i = 0; i < j; i++ ) {
+                               elem = this[ i ];
+
+                               if ( elem.style ) {
+                                       display = elem.style.display;
+
+                                       if ( display === "" || display === "none" ) {
+                                               elem.style.display = jQuery._data( elem, "olddisplay" ) || "";
+                                       }
+                               }
+                       }
+
+                       return this;
+               }
+       },
+
+       hide: function( speed, easing, callback ) {
+               if ( speed || speed === 0 ) {
+                       return this.animate( genFx("hide", 3), speed, easing, callback);
+
+               } else {
+                       var elem, display,
+                               i = 0,
+                               j = this.length;
+
+                       for ( ; i < j; i++ ) {
+                               elem = this[i];
+                               if ( elem.style ) {
+                                       display = jQuery.css( elem, "display" );
+
+                                       if ( display !== "none" && !jQuery._data( elem, "olddisplay" ) ) {
+                                               jQuery._data( elem, "olddisplay", display );
+                                       }
+                               }
+                       }
+
+                       // Set the display of the elements in a second loop
+                       // to avoid the constant reflow
+                       for ( i = 0; i < j; i++ ) {
+                               if ( this[i].style ) {
+                                       this[i].style.display = "none";
+                               }
+                       }
+
+                       return this;
+               }
+       },
+
+       // Save the old toggle function
+       _toggle: jQuery.fn.toggle,
+
+       toggle: function( fn, fn2, callback ) {
+               var bool = typeof fn === "boolean";
+
+               if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
+                       this._toggle.apply( this, arguments );
+
+               } else if ( fn == null || bool ) {
+                       this.each(function() {
+                               var state = bool ? fn : jQuery(this).is(":hidden");
+                               jQuery(this)[ state ? "show" : "hide" ]();
+                       });
+
+               } else {
+                       this.animate(genFx("toggle", 3), fn, fn2, callback);
+               }
+
+               return this;
+       },
+
+       fadeTo: function( speed, to, easing, callback ) {
+               return this.filter(":hidden").css("opacity", 0).show().end()
+                                       .animate({opacity: to}, speed, easing, callback);
+       },
+
+       animate: function( prop, speed, easing, callback ) {
+               var optall = jQuery.speed( speed, easing, callback );
+
+               if ( jQuery.isEmptyObject( prop ) ) {
+                       return this.each( optall.complete, [ false ] );
+               }
+
+               // Do not change referenced properties as per-property easing will be lost
+               prop = jQuery.extend( {}, prop );
+
+               function doAnimation() {
+                       // XXX 'this' does not always have a nodeName when running the
+                       // test suite
+
+                       if ( optall.queue === false ) {
+                               jQuery._mark( this );
+                       }
+
+                       var opt = jQuery.extend( {}, optall ),
+                               isElement = this.nodeType === 1,
+                               hidden = isElement && jQuery(this).is(":hidden"),
+                               name, val, p, e, hooks, replace,
+                               parts, start, end, unit,
+                               method;
+
+                       // will store per property easing and be used to determine when an animation is complete
+                       opt.animatedProperties = {};
+
+                       // first pass over propertys to expand / normalize
+                       for ( p in prop ) {
+                               name = jQuery.camelCase( p );
+                               if ( p !== name ) {
+                                       prop[ name ] = prop[ p ];
+                                       delete prop[ p ];
+                               }
+
+                               if ( ( hooks = jQuery.cssHooks[ name ] ) && "expand" in hooks ) {
+                                       replace = hooks.expand( prop[ name ] );
+                                       delete prop[ name ];
+
+                                       // not quite $.extend, this wont overwrite keys already present.
+                                       // also - reusing 'p' from above because we have the correct "name"
+                                       for ( p in replace ) {
+                                               if ( ! ( p in prop ) ) {
+                                                       prop[ p ] = replace[ p ];
+                                               }
+                                       }
+                               }
+                       }
+
+                       for ( name in prop ) {
+                               val = prop[ name ];
+                               // easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default)
+                               if ( jQuery.isArray( val ) ) {
+                                       opt.animatedProperties[ name ] = val[ 1 ];
+                                       val = prop[ name ] = val[ 0 ];
+                               } else {
+                                       opt.animatedProperties[ name ] = opt.specialEasing && opt.specialEasing[ name ] || opt.easing || 'swing';
+                               }
+
+                               if ( val === "hide" && hidden || val === "show" && !hidden ) {
+                                       return opt.complete.call( this );
+                               }
+
+                               if ( isElement && ( name === "height" || name === "width" ) ) {
+                                       // Make sure that nothing sneaks out
+                                       // Record all 3 overflow attributes because IE does not
+                                       // change the overflow attribute when overflowX and
+                                       // overflowY are set to the same value
+                                       opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];
+
+                                       // Set display property to inline-block for height/width
+                                       // animations on inline elements that are having width/height animated
+                                       if ( jQuery.css( this, "display" ) === "inline" &&
+                                                       jQuery.css( this, "float" ) === "none" ) {
+
+                                               // inline-level elements accept inline-block;
+                                               // block-level elements need to be inline with layout
+                                               if ( !jQuery.support.inlineBlockNeedsLayout || defaultDisplay( this.nodeName ) === "inline" ) {
+                                                       this.style.display = "inline-block";
+
+                                               } else {
+                                                       this.style.zoom = 1;
+                                               }
+                                       }
+                               }
+                       }
+
+                       if ( opt.overflow != null ) {
+                               this.style.overflow = "hidden";
+                       }
+
+                       for ( p in prop ) {
+                               e = new jQuery.fx( this, opt, p );
+                               val = prop[ p ];
+
+                               if ( rfxtypes.test( val ) ) {
+
+                                       // Tracks whether to show or hide based on private
+                                       // data attached to the element
+                                       method = jQuery._data( this, "toggle" + p ) || ( val === "toggle" ? hidden ? "show" : "hide" : 0 );
+                                       if ( method ) {
+                                               jQuery._data( this, "toggle" + p, method === "show" ? "hide" : "show" );
+                                               e[ method ]();
+                                       } else {
+                                               e[ val ]();
+                                       }
+
+                               } else {
+                                       parts = rfxnum.exec( val );
+                                       start = e.cur();
+
+                                       if ( parts ) {
+                                               end = parseFloat( parts[2] );
+                                               unit = parts[3] || ( jQuery.cssNumber[ p ] ? "" : "px" );
+
+                                               // We need to compute starting value
+                                               if ( unit !== "px" ) {
+                                                       jQuery.style( this, p, (end || 1) + unit);
+                                                       start = ( (end || 1) / e.cur() ) * start;
+                                                       jQuery.style( this, p, start + unit);
+                                               }
+
+                                               // If a +=/-= token was provided, we're doing a relative animation
+                                               if ( parts[1] ) {
+                                                       end = ( (parts[ 1 ] === "-=" ? -1 : 1) * end ) + start;
+                                               }
+
+                                               e.custom( start, end, unit );
+
+                                       } else {
+                                               e.custom( start, val, "" );
+                                       }
+                               }
+                       }
+
+                       // For JS strict compliance
+                       return true;
+               }
+
+               return optall.queue === false ?
+                       this.each( doAnimation ) :
+                       this.queue( optall.queue, doAnimation );
+       },
+
+       stop: function( type, clearQueue, gotoEnd ) {
+               if ( typeof type !== "string" ) {
+                       gotoEnd = clearQueue;
+                       clearQueue = type;
+                       type = undefined;
+               }
+               if ( clearQueue && type !== false ) {
+                       this.queue( type || "fx", [] );
+               }
+
+               return this.each(function() {
+                       var index,
+                               hadTimers = false,
+                               timers = jQuery.timers,
+                               data = jQuery._data( this );
+
+                       // clear marker counters if we know they won't be
+                       if ( !gotoEnd ) {
+                               jQuery._unmark( true, this );
+                       }
+
+                       function stopQueue( elem, data, index ) {
+                               var hooks = data[ index ];
+                               jQuery.removeData( elem, index, true );
+                               hooks.stop( gotoEnd );
+                       }
+
+                       if ( type == null ) {
+                               for ( index in data ) {
+                                       if ( data[ index ] && data[ index ].stop && index.indexOf(".run") === index.length - 4 ) {
+                                               stopQueue( this, data, index );
+                                       }
+                               }
+                       } else if ( data[ index = type + ".run" ] && data[ index ].stop ){
+                               stopQueue( this, data, index );
+                       }
+
+                       for ( index = timers.length; index--; ) {
+                               if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
+                                       if ( gotoEnd ) {
+
+                                               // force the next step to be the last
+                                               timers[ index ]( true );
+                                       } else {
+                                               timers[ index ].saveState();
+                                       }
+                                       hadTimers = true;
+                                       timers.splice( index, 1 );
+                               }
+                       }
+
+                       // start the next in the queue if the last step wasn't forced
+                       // timers currently will call their complete callbacks, which will dequeue
+                       // but only if they were gotoEnd
+                       if ( !( gotoEnd && hadTimers ) ) {
+                               jQuery.dequeue( this, type );
+                       }
+               });
+       }
+
+});
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+       setTimeout( clearFxNow, 0 );
+       return ( fxNow = jQuery.now() );
+}
+
+function clearFxNow() {
+       fxNow = undefined;
+}
+
+// Generate parameters to create a standard animation
+function genFx( type, num ) {
+       var obj = {};
+
+       jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice( 0, num )), function() {
+               obj[ this ] = type;
+       });
+
+       return obj;
+}
+
+// Generate shortcuts for custom animations
+jQuery.each({
+       slideDown: genFx( "show", 1 ),
+       slideUp: genFx( "hide", 1 ),
+       slideToggle: genFx( "toggle", 1 ),
+       fadeIn: { opacity: "show" },
+       fadeOut: { opacity: "hide" },
+       fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+       jQuery.fn[ name ] = function( speed, easing, callback ) {
+               return this.animate( props, speed, easing, callback );
+       };
+});
+
+jQuery.extend({
+       speed: function( speed, easing, fn ) {
+               var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+                       complete: fn || !fn && easing ||
+                               jQuery.isFunction( speed ) && speed,
+                       duration: speed,
+                       easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
+               };
+
+               opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+                       opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
+
+               // normalize opt.queue - true/undefined/null -> "fx"
+               if ( opt.queue == null || opt.queue === true ) {
+                       opt.queue = "fx";
+               }
+
+               // Queueing
+               opt.old = opt.complete;
+
+               opt.complete = function( noUnmark ) {
+                       if ( jQuery.isFunction( opt.old ) ) {
+                               opt.old.call( this );
+                       }
+
+                       if ( opt.queue ) {
+                               jQuery.dequeue( this, opt.queue );
+                       } else if ( noUnmark !== false ) {
+                               jQuery._unmark( this );
+                       }
+               };
+
+               return opt;
+       },
+
+       easing: {
+               linear: function( p ) {
+                       return p;
+               },
+               swing: function( p ) {
+                       return ( -Math.cos( p*Math.PI ) / 2 ) + 0.5;
+               }
+       },
+
+       timers: [],
+
+       fx: function( elem, options, prop ) {
+               this.options = options;
+               this.elem = elem;
+               this.prop = prop;
+
+               options.orig = options.orig || {};
+       }
+
+});
+
+jQuery.fx.prototype = {
+       // Simple function for setting a style value
+       update: function() {
+               if ( this.options.step ) {
+                       this.options.step.call( this.elem, this.now, this );
+               }
+
+               ( jQuery.fx.step[ this.prop ] || jQuery.fx.step._default )( this );
+       },
+
+       // Get the current size
+       cur: function() {
+               if ( this.elem[ this.prop ] != null && (!this.elem.style || this.elem.style[ this.prop ] == null) ) {
+                       return this.elem[ this.prop ];
+               }
+
+               var parsed,
+                       r = jQuery.css( this.elem, this.prop );
+               // Empty strings, null, undefined and "auto" are converted to 0,
+               // complex values such as "rotate(1rad)" are returned as is,
+               // simple values such as "10px" are parsed to Float.
+               return isNaN( parsed = parseFloat( r ) ) ? !r || r === "auto" ? 0 : r : parsed;
+       },
+
+       // Start an animation from one number to another
+       custom: function( from, to, unit ) {
+               var self = this,
+                       fx = jQuery.fx;
+
+               this.startTime = fxNow || createFxNow();
+               this.end = to;
+               this.now = this.start = from;
+               this.pos = this.state = 0;
+               this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" );
+
+               function t( gotoEnd ) {
+                       return self.step( gotoEnd );
+               }
+
+               t.queue = this.options.queue;
+               t.elem = this.elem;
+               t.saveState = function() {
+                       if ( jQuery._data( self.elem, "fxshow" + self.prop ) === undefined ) {
+                               if ( self.options.hide ) {
+                                       jQuery._data( self.elem, "fxshow" + self.prop, self.start );
+                               } else if ( self.options.show ) {
+                                       jQuery._data( self.elem, "fxshow" + self.prop, self.end );
+                               }
+                       }
+               };
+
+               if ( t() && jQuery.timers.push(t) && !timerId ) {
+                       timerId = setInterval( fx.tick, fx.interval );
+               }
+       },
+
+       // Simple 'show' function
+       show: function() {
+               var dataShow = jQuery._data( this.elem, "fxshow" + this.prop );
+
+               // Remember where we started, so that we can go back to it later
+               this.options.orig[ this.prop ] = dataShow || jQuery.style( this.elem, this.prop );
+               this.options.show = true;
+
+               // Begin the animation
+               // Make sure that we start at a small width/height to avoid any flash of content
+               if ( dataShow !== undefined ) {
+                       // This show is picking up where a previous hide or show left off
+                       this.custom( this.cur(), dataShow );
+               } else {
+                       this.custom( this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur() );
+               }
+
+               // Start by showing the element
+               jQuery( this.elem ).show();
+       },
+
+       // Simple 'hide' function
+       hide: function() {
+               // Remember where we started, so that we can go back to it later
+               this.options.orig[ this.prop ] = jQuery._data( this.elem, "fxshow" + this.prop ) || jQuery.style( this.elem, this.prop );
+               this.options.hide = true;
+
+               // Begin the animation
+               this.custom( this.cur(), 0 );
+       },
+
+       // Each step of an animation
+       step: function( gotoEnd ) {
+               var p, n, complete,
+                       t = fxNow || createFxNow(),
+                       done = true,
+                       elem = this.elem,
+                       options = this.options;
+
+               if ( gotoEnd || t >= options.duration + this.startTime ) {
+                       this.now = this.end;
+                       this.pos = this.state = 1;
+                       this.update();
+
+                       options.animatedProperties[ this.prop ] = true;
+
+                       for ( p in options.animatedProperties ) {
+                               if ( options.animatedProperties[ p ] !== true ) {
+                                       done = false;
+                               }
+                       }
+
+                       if ( done ) {
+                               // Reset the overflow
+                               if ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
+
+                                       jQuery.each( [ "", "X", "Y" ], function( index, value ) {
+                                               elem.style[ "overflow" + value ] = options.overflow[ index ];
+                                       });
+                               }
+
+                               // Hide the element if the "hide" operation was done
+                               if ( options.hide ) {
+                                       jQuery( elem ).hide();
+                               }
+
+                               // Reset the properties, if the item has been hidden or shown
+                               if ( options.hide || options.show ) {
+                                       for ( p in options.animatedProperties ) {
+                                               jQuery.style( elem, p, options.orig[ p ] );
+                                               jQuery.removeData( elem, "fxshow" + p, true );
+                                               // Toggle data is no longer needed
+                                               jQuery.removeData( elem, "toggle" + p, true );
+                                       }
+                               }
+
+                               // Execute the complete function
+                               // in the event that the complete function throws an exception
+                               // we must ensure it won't be called twice. #5684
+
+                               complete = options.complete;
+                               if ( complete ) {
+
+                                       options.complete = false;
+                                       complete.call( elem );
+                               }
+                       }
+
+                       return false;
+
+               } else {
+                       // classical easing cannot be used with an Infinity duration
+                       if ( options.duration == Infinity ) {
+                               this.now = t;
+                       } else {
+                               n = t - this.startTime;
+                               this.state = n / options.duration;
+
+                               // Perform the easing function, defaults to swing
+                               this.pos = jQuery.easing[ options.animatedProperties[this.prop] ]( this.state, n, 0, 1, options.duration );
+                               this.now = this.start + ( (this.end - this.start) * this.pos );
+                       }
+                       // Perform the next step of the animation
+                       this.update();
+               }
+
+               return true;
+       }
+};
+
+jQuery.extend( jQuery.fx, {
+       tick: function() {
+               var timer,
+                       timers = jQuery.timers,
+                       i = 0;
+
+               for ( ; i < timers.length; i++ ) {
+                       timer = timers[ i ];
+                       // Checks the timer has not already been removed
+                       if ( !timer() && timers[ i ] === timer ) {
+                               timers.splice( i--, 1 );
+                       }
+               }
+
+               if ( !timers.length ) {
+                       jQuery.fx.stop();
+               }
+       },
+
+       interval: 13,
+
+       stop: function() {
+               clearInterval( timerId );
+               timerId = null;
+       },
+
+       speeds: {
+               slow: 600,
+               fast: 200,
+               // Default speed
+               _default: 400
+       },
+
+       step: {
+               opacity: function( fx ) {
+                       jQuery.style( fx.elem, "opacity", fx.now );
+               },
+
+               _default: function( fx ) {
+                       if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
+                               fx.elem.style[ fx.prop ] = fx.now + fx.unit;
+                       } else {
+                               fx.elem[ fx.prop ] = fx.now;
+                       }
+               }
+       }
+});
+
+// Ensure props that can't be negative don't go there on undershoot easing
+jQuery.each( fxAttrs.concat.apply( [], fxAttrs ), function( i, prop ) {
+       // exclude marginTop, marginLeft, marginBottom and marginRight from this list
+       if ( prop.indexOf( "margin" ) ) {
+               jQuery.fx.step[ prop ] = function( fx ) {
+                       jQuery.style( fx.elem, prop, Math.max(0, fx.now) + fx.unit );
+               };
+       }
+});
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+       jQuery.expr.filters.animated = function( elem ) {
+               return jQuery.grep(jQuery.timers, function( fn ) {
+                       return elem === fn.elem;
+               }).length;
+       };
+}
+
+// Try to restore the default display value of an element
+function defaultDisplay( nodeName ) {
+
+       if ( !elemdisplay[ nodeName ] ) {
+
+               var body = document.body,
+                       elem = jQuery( "<" + nodeName + ">" ).appendTo( body ),
+                       display = elem.css( "display" );
+               elem.remove();
+
+               // If the simple way fails,
+               // get element's real default display by attaching it to a temp iframe
+               if ( display === "none" || display === "" ) {
+                       // No iframe to use yet, so create it
+                       if ( !iframe ) {
+                               iframe = document.createElement( "iframe" );
+                               iframe.frameBorder = iframe.width = iframe.height = 0;
+                       }
+
+                       body.appendChild( iframe );
+
+                       // Create a cacheable copy of the iframe document on first call.
+                       // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML
+                       // document to it; WebKit & Firefox won't allow reusing the iframe document.
+                       if ( !iframeDoc || !iframe.createElement ) {
+                               iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
+                               iframeDoc.write( ( jQuery.support.boxModel ? "<!doctype html>" : "" ) + "<html><body>" );
+                               iframeDoc.close();
+                       }
+
+                       elem = iframeDoc.createElement( nodeName );
+
+                       iframeDoc.body.appendChild( elem );
+
+                       display = jQuery.css( elem, "display" );
+                       body.removeChild( iframe );
+               }
+
+               // Store the correct default display
+               elemdisplay[ nodeName ] = display;
+       }
+
+       return elemdisplay[ nodeName ];
+}
+
+
+
+
+var getOffset,
+       rtable = /^t(?:able|d|h)$/i,
+       rroot = /^(?:body|html)$/i;
+
+if ( "getBoundingClientRect" in document.documentElement ) {
+       getOffset = function( elem, doc, docElem, box ) {
+               try {
+                       box = elem.getBoundingClientRect();
+               } catch(e) {}
+
+               // Make sure we're not dealing with a disconnected DOM node
+               if ( !box || !jQuery.contains( docElem, elem ) ) {
+                       return box ? { top: box.top, left: box.left } : { top: 0, left: 0 };
+               }
+
+               var body = doc.body,
+                       win = getWindow( doc ),
+                       clientTop  = docElem.clientTop  || body.clientTop  || 0,
+                       clientLeft = docElem.clientLeft || body.clientLeft || 0,
+                       scrollTop  = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop  || body.scrollTop,
+                       scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,
+                       top  = box.top  + scrollTop  - clientTop,
+                       left = box.left + scrollLeft - clientLeft;
+
+               return { top: top, left: left };
+       };
+
+} else {
+       getOffset = function( elem, doc, docElem ) {
+               var computedStyle,
+                       offsetParent = elem.offsetParent,
+                       prevOffsetParent = elem,
+                       body = doc.body,
+                       defaultView = doc.defaultView,
+                       prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
+                       top = elem.offsetTop,
+                       left = elem.offsetLeft;
+
+               while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
+                       if ( jQuery.support.fixedPosition && prevComputedStyle.position === "fixed" ) {
+                               break;
+                       }
+
+                       computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
+                       top  -= elem.scrollTop;
+                       left -= elem.scrollLeft;
+
+                       if ( elem === offsetParent ) {
+                               top  += elem.offsetTop;
+                               left += elem.offsetLeft;
+
+                               if ( jQuery.support.doesNotAddBorder && !(jQuery.support.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {
+                                       top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
+                                       left += parseFloat( computedStyle.borderLeftWidth ) || 0;
+                               }
+
+                               prevOffsetParent = offsetParent;
+                               offsetParent = elem.offsetParent;
+                       }
+
+                       if ( jQuery.support.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
+                               top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
+                               left += parseFloat( computedStyle.borderLeftWidth ) || 0;
+                       }
+
+                       prevComputedStyle = computedStyle;
+               }
+
+               if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
+                       top  += body.offsetTop;
+                       left += body.offsetLeft;
+               }
+
+               if ( jQuery.support.fixedPosition && prevComputedStyle.position === "fixed" ) {
+                       top  += Math.max( docElem.scrollTop, body.scrollTop );
+                       left += Math.max( docElem.scrollLeft, body.scrollLeft );
+               }
+
+               return { top: top, left: left };
+       };
+}
+
+jQuery.fn.offset = function( options ) {
+       if ( arguments.length ) {
+               return options === undefined ?
+                       this :
+                       this.each(function( i ) {
+                               jQuery.offset.setOffset( this, options, i );
+                       });
+       }
+
+       var elem = this[0],
+               doc = elem && elem.ownerDocument;
+
+       if ( !doc ) {
+               return null;
+       }
+
+       if ( elem === doc.body ) {
+               return jQuery.offset.bodyOffset( elem );
+       }
+
+       return getOffset( elem, doc, doc.documentElement );
+};
+
+jQuery.offset = {
+
+       bodyOffset: function( body ) {
+               var top = body.offsetTop,
+                       left = body.offsetLeft;
+
+               if ( jQuery.support.doesNotIncludeMarginInBodyOffset ) {
+                       top  += parseFloat( jQuery.css(body, "marginTop") ) || 0;
+                       left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
+               }
+
+               return { top: top, left: left };
+       },
+
+       setOffset: function( elem, options, i ) {
+               var position = jQuery.css( elem, "position" );
+
+               // set position first, in-case top/left are set even on static elem
+               if ( position === "static" ) {
+                       elem.style.position = "relative";
+               }
+
+               var curElem = jQuery( elem ),
+                       curOffset = curElem.offset(),
+                       curCSSTop = jQuery.css( elem, "top" ),
+                       curCSSLeft = jQuery.css( elem, "left" ),
+                       calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
+                       props = {}, curPosition = {}, curTop, curLeft;
+
+               // need to be able to calculate position if either top or left is auto and position is either absolute or fixed
+               if ( calculatePosition ) {
+                       curPosition = curElem.position();
+                       curTop = curPosition.top;
+                       curLeft = curPosition.left;
+               } else {
+                       curTop = parseFloat( curCSSTop ) || 0;
+                       curLeft = parseFloat( curCSSLeft ) || 0;
+               }
+
+               if ( jQuery.isFunction( options ) ) {
+                       options = options.call( elem, i, curOffset );
+               }
+
+               if ( options.top != null ) {
+                       props.top = ( options.top - curOffset.top ) + curTop;
+               }
+               if ( options.left != null ) {
+                       props.left = ( options.left - curOffset.left ) + curLeft;
+               }
+
+               if ( "using" in options ) {
+                       options.using.call( elem, props );
+               } else {
+                       curElem.css( props );
+               }
+       }
+};
+
+
+jQuery.fn.extend({
+
+       position: function() {
+               if ( !this[0] ) {
+                       return null;
+               }
+
+               var elem = this[0],
+
+               // Get *real* offsetParent
+               offsetParent = this.offsetParent(),
+
+               // Get correct offsets
+               offset       = this.offset(),
+               parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
+
+               // Subtract element margins
+               // note: when an element has margin: auto the offsetLeft and marginLeft
+               // are the same in Safari causing offset.left to incorrectly be 0
+               offset.top  -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
+               offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
+
+               // Add offsetParent borders
+               parentOffset.top  += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
+               parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
+
+               // Subtract the two offsets
+               return {
+                       top:  offset.top  - parentOffset.top,
+                       left: offset.left - parentOffset.left
+               };
+       },
+
+       offsetParent: function() {
+               return this.map(function() {
+                       var offsetParent = this.offsetParent || document.body;
+                       while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
+                               offsetParent = offsetParent.offsetParent;
+                       }
+                       return offsetParent;
+               });
+       }
+});
+
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) {
+       var top = /Y/.test( prop );
+
+       jQuery.fn[ method ] = function( val ) {
+               return jQuery.access( this, function( elem, method, val ) {
+                       var win = getWindow( elem );
+
+                       if ( val === undefined ) {
+                               return win ? (prop in win) ? win[ prop ] :
+                                       jQuery.support.boxModel && win.document.documentElement[ method ] ||
+                                               win.document.body[ method ] :
+                                       elem[ method ];
+                       }
+
+                       if ( win ) {
+                               win.scrollTo(
+                                       !top ? val : jQuery( win ).scrollLeft(),
+                                        top ? val : jQuery( win ).scrollTop()
+                               );
+
+                       } else {
+                               elem[ method ] = val;
+                       }
+               }, method, val, arguments.length, null );
+       };
+});
+
+function getWindow( elem ) {
+       return jQuery.isWindow( elem ) ?
+               elem :
+               elem.nodeType === 9 ?
+                       elem.defaultView || elem.parentWindow :
+                       false;
+}
+
+
+
+
+// Create width, height, innerHeight, innerWidth, outerHeight and outerWidth methods
+jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
+       var clientProp = "client" + name,
+               scrollProp = "scroll" + name,
+               offsetProp = "offset" + name;
+
+       // innerHeight and innerWidth
+       jQuery.fn[ "inner" + name ] = function() {
+               var elem = this[0];
+               return elem ?
+                       elem.style ?
+                       parseFloat( jQuery.css( elem, type, "padding" ) ) :
+                       this[ type ]() :
+                       null;
+       };
+
+       // outerHeight and outerWidth
+       jQuery.fn[ "outer" + name ] = function( margin ) {
+               var elem = this[0];
+               return elem ?
+                       elem.style ?
+                       parseFloat( jQuery.css( elem, type, margin ? "margin" : "border" ) ) :
+                       this[ type ]() :
+                       null;
+       };
+
+       jQuery.fn[ type ] = function( value ) {
+               return jQuery.access( this, function( elem, type, value ) {
+                       var doc, docElemProp, orig, ret;
+
+                       if ( jQuery.isWindow( elem ) ) {
+                               // 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
+                               doc = elem.document;
+                               docElemProp = doc.documentElement[ clientProp ];
+                               return jQuery.support.boxModel && docElemProp ||
+                                       doc.body && doc.body[ clientProp ] || docElemProp;
+                       }
+
+                       // Get document width or height
+                       if ( elem.nodeType === 9 ) {
+                               // Either scroll[Width/Height] or offset[Width/Height], whichever is greater
+                               doc = elem.documentElement;
+
+                               // when a window > document, IE6 reports a offset[Width/Height] > client[Width/Height]
+                               // so we can't use max, as it'll choose the incorrect offset[Width/Height]
+                               // instead we use the correct client[Width/Height]
+                               // support:IE6
+                               if ( doc[ clientProp ] >= doc[ scrollProp ] ) {
+                                       return doc[ clientProp ];
+                               }
+
+                               return Math.max(
+                                       elem.body[ scrollProp ], doc[ scrollProp ],
+                                       elem.body[ offsetProp ], doc[ offsetProp ]
+                               );
+                       }
+
+                       // Get width or height on the element
+                       if ( value === undefined ) {
+                               orig = jQuery.css( elem, type );
+                               ret = parseFloat( orig );
+                               return jQuery.isNumeric( ret ) ? ret : orig;
+                       }
+
+                       // Set the width or height on the element
+                       jQuery( elem ).css( type, value );
+               }, type, value, arguments.length, null );
+       };
+});
+
+
+
+
+// Expose jQuery to the global object
+window.jQuery = window.$ = jQuery;
+
+// Expose jQuery as an AMD module, but only for AMD loaders that
+// understand the issues with loading multiple versions of jQuery
+// in a page that all might call define(). The loader will indicate
+// they have special allowances for multiple jQuery versions by
+// specifying define.amd.jQuery = true. Register as a named module,
+// since jQuery can be concatenated with other files that may use define,
+// but not use a proper concatenation script that understands anonymous
+// AMD modules. A named AMD is safest and most robust way to register.
+// Lowercase jquery is used because AMD module names are derived from
+// file names, and jQuery is normally delivered in a lowercase file name.
+// Do this after creating the global so that if an AMD module wants to call
+// noConflict to hide this version of jQuery, it will work.
+if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
+       define( "jquery", [], function () { return jQuery; } );
+}
+
+
+
+})( window );
diff --git a/doc/sphinx/_build/html/_static/minus.png b/doc/sphinx/_build/html/_static/minus.png
new file mode 100644 (file)
index 0000000..da1c562
Binary files /dev/null and b/doc/sphinx/_build/html/_static/minus.png differ
diff --git a/doc/sphinx/_build/html/_static/navigation.png b/doc/sphinx/_build/html/_static/navigation.png
new file mode 100644 (file)
index 0000000..1081dc1
Binary files /dev/null and b/doc/sphinx/_build/html/_static/navigation.png differ
diff --git a/doc/sphinx/_build/html/_static/plus.png b/doc/sphinx/_build/html/_static/plus.png
new file mode 100644 (file)
index 0000000..b3cb374
Binary files /dev/null and b/doc/sphinx/_build/html/_static/plus.png differ
diff --git a/doc/sphinx/_build/html/_static/pygments.css b/doc/sphinx/_build/html/_static/pygments.css
new file mode 100644 (file)
index 0000000..d79caa1
--- /dev/null
@@ -0,0 +1,62 @@
+.highlight .hll { background-color: #ffffcc }
+.highlight  { background: #eeffcc; }
+.highlight .c { color: #408090; font-style: italic } /* Comment */
+.highlight .err { border: 1px solid #FF0000 } /* Error */
+.highlight .k { color: #007020; font-weight: bold } /* Keyword */
+.highlight .o { color: #666666 } /* Operator */
+.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */
+.highlight .cp { color: #007020 } /* Comment.Preproc */
+.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */
+.highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */
+.highlight .gd { color: #A00000 } /* Generic.Deleted */
+.highlight .ge { font-style: italic } /* Generic.Emph */
+.highlight .gr { color: #FF0000 } /* Generic.Error */
+.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
+.highlight .gi { color: #00A000 } /* Generic.Inserted */
+.highlight .go { color: #333333 } /* Generic.Output */
+.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
+.highlight .gs { font-weight: bold } /* Generic.Strong */
+.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
+.highlight .gt { color: #0044DD } /* Generic.Traceback */
+.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */
+.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
+.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
+.highlight .kp { color: #007020 } /* Keyword.Pseudo */
+.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
+.highlight .kt { color: #902000 } /* Keyword.Type */
+.highlight .m { color: #208050 } /* Literal.Number */
+.highlight .s { color: #4070a0 } /* Literal.String */
+.highlight .na { color: #4070a0 } /* Name.Attribute */
+.highlight .nb { color: #007020 } /* Name.Builtin */
+.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */
+.highlight .no { color: #60add5 } /* Name.Constant */
+.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */
+.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */
+.highlight .ne { color: #007020 } /* Name.Exception */
+.highlight .nf { color: #06287e } /* Name.Function */
+.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */
+.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
+.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */
+.highlight .nv { color: #bb60d5 } /* Name.Variable */
+.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */
+.highlight .w { color: #bbbbbb } /* Text.Whitespace */
+.highlight .mf { color: #208050 } /* Literal.Number.Float */
+.highlight .mh { color: #208050 } /* Literal.Number.Hex */
+.highlight .mi { color: #208050 } /* Literal.Number.Integer */
+.highlight .mo { color: #208050 } /* Literal.Number.Oct */
+.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */
+.highlight .sc { color: #4070a0 } /* Literal.String.Char */
+.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */
+.highlight .s2 { color: #4070a0 } /* Literal.String.Double */
+.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */
+.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */
+.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */
+.highlight .sx { color: #c65d09 } /* Literal.String.Other */
+.highlight .sr { color: #235388 } /* Literal.String.Regex */
+.highlight .s1 { color: #4070a0 } /* Literal.String.Single */
+.highlight .ss { color: #517918 } /* Literal.String.Symbol */
+.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */
+.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */
+.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */
+.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */
+.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_static/searchtools.js b/doc/sphinx/_build/html/_static/searchtools.js
new file mode 100644 (file)
index 0000000..6e1f06b
--- /dev/null
@@ -0,0 +1,622 @@
+/*
+ * searchtools.js_t
+ * ~~~~~~~~~~~~~~~~
+ *
+ * Sphinx JavaScript utilties for the full-text search.
+ *
+ * :copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+
+/**
+ * Porter Stemmer
+ */
+var Stemmer = function() {
+
+  var step2list = {
+    ational: 'ate',
+    tional: 'tion',
+    enci: 'ence',
+    anci: 'ance',
+    izer: 'ize',
+    bli: 'ble',
+    alli: 'al',
+    entli: 'ent',
+    eli: 'e',
+    ousli: 'ous',
+    ization: 'ize',
+    ation: 'ate',
+    ator: 'ate',
+    alism: 'al',
+    iveness: 'ive',
+    fulness: 'ful',
+    ousness: 'ous',
+    aliti: 'al',
+    iviti: 'ive',
+    biliti: 'ble',
+    logi: 'log'
+  };
+
+  var step3list = {
+    icate: 'ic',
+    ative: '',
+    alize: 'al',
+    iciti: 'ic',
+    ical: 'ic',
+    ful: '',
+    ness: ''
+  };
+
+  var c = "[^aeiou]";          // consonant
+  var v = "[aeiouy]";          // vowel
+  var C = c + "[^aeiouy]*";    // consonant sequence
+  var V = v + "[aeiou]*";      // vowel sequence
+
+  var mgr0 = "^(" + C + ")?" + V + C;                      // [C]VC... is m>0
+  var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$";    // [C]VC[V] is m=1
+  var mgr1 = "^(" + C + ")?" + V + C + V + C;              // [C]VCVC... is m>1
+  var s_v   = "^(" + C + ")?" + v;                         // vowel in stem
+
+  this.stemWord = function (w) {
+    var stem;
+    var suffix;
+    var firstch;
+    var origword = w;
+
+    if (w.length < 3)
+      return w;
+
+    var re;
+    var re2;
+    var re3;
+    var re4;
+
+    firstch = w.substr(0,1);
+    if (firstch == "y")
+      w = firstch.toUpperCase() + w.substr(1);
+
+    // Step 1a
+    re = /^(.+?)(ss|i)es$/;
+    re2 = /^(.+?)([^s])s$/;
+
+    if (re.test(w))
+      w = w.replace(re,"$1$2");
+    else if (re2.test(w))
+      w = w.replace(re2,"$1$2");
+
+    // Step 1b
+    re = /^(.+?)eed$/;
+    re2 = /^(.+?)(ed|ing)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      re = new RegExp(mgr0);
+      if (re.test(fp[1])) {
+        re = /.$/;
+        w = w.replace(re,"");
+      }
+    }
+    else if (re2.test(w)) {
+      var fp = re2.exec(w);
+      stem = fp[1];
+      re2 = new RegExp(s_v);
+      if (re2.test(stem)) {
+        w = stem;
+        re2 = /(at|bl|iz)$/;
+        re3 = new RegExp("([^aeiouylsz])\\1$");
+        re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
+        if (re2.test(w))
+          w = w + "e";
+        else if (re3.test(w)) {
+          re = /.$/;
+          w = w.replace(re,"");
+        }
+        else if (re4.test(w))
+          w = w + "e";
+      }
+    }
+
+    // Step 1c
+    re = /^(.+?)y$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      re = new RegExp(s_v);
+      if (re.test(stem))
+        w = stem + "i";
+    }
+
+    // Step 2
+    re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      suffix = fp[2];
+      re = new RegExp(mgr0);
+      if (re.test(stem))
+        w = stem + step2list[suffix];
+    }
+
+    // Step 3
+    re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      suffix = fp[2];
+      re = new RegExp(mgr0);
+      if (re.test(stem))
+        w = stem + step3list[suffix];
+    }
+
+    // Step 4
+    re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
+    re2 = /^(.+?)(s|t)(ion)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      re = new RegExp(mgr1);
+      if (re.test(stem))
+        w = stem;
+    }
+    else if (re2.test(w)) {
+      var fp = re2.exec(w);
+      stem = fp[1] + fp[2];
+      re2 = new RegExp(mgr1);
+      if (re2.test(stem))
+        w = stem;
+    }
+
+    // Step 5
+    re = /^(.+?)e$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      re = new RegExp(mgr1);
+      re2 = new RegExp(meq1);
+      re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
+      if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
+        w = stem;
+    }
+    re = /ll$/;
+    re2 = new RegExp(mgr1);
+    if (re.test(w) && re2.test(w)) {
+      re = /.$/;
+      w = w.replace(re,"");
+    }
+
+    // and turn initial Y back to y
+    if (firstch == "y")
+      w = firstch.toLowerCase() + w.substr(1);
+    return w;
+  }
+}
+
+
+
+/**
+ * Simple result scoring code.
+ */
+var Scorer = {
+  // Implement the following function to further tweak the score for each result
+  // The function takes a result array [filename, title, anchor, descr, score]
+  // and returns the new score.
+  /*
+  score: function(result) {
+    return result[4];
+  },
+  */
+
+  // query matches the full name of an object
+  objNameMatch: 11,
+  // or matches in the last dotted part of the object name
+  objPartialMatch: 6,
+  // Additive scores depending on the priority of the object
+  objPrio: {0:  15,   // used to be importantResults
+            1:  5,   // used to be objectResults
+            2: -5},  // used to be unimportantResults
+  //  Used when the priority is not in the mapping.
+  objPrioDefault: 0,
+
+  // query found in title
+  title: 15,
+  // query found in terms
+  term: 5
+};
+
+
+/**
+ * Search Module
+ */
+var Search = {
+
+  _index : null,
+  _queued_query : null,
+  _pulse_status : -1,
+
+  init : function() {
+      var params = $.getQueryParameters();
+      if (params.q) {
+          var query = params.q[0];
+          $('input[name="q"]')[0].value = query;
+          this.performSearch(query);
+      }
+  },
+
+  loadIndex : function(url) {
+    $.ajax({type: "GET", url: url, data: null,
+            dataType: "script", cache: true,
+            complete: function(jqxhr, textstatus) {
+              if (textstatus != "success") {
+                document.getElementById("searchindexloader").src = url;
+              }
+            }});
+  },
+
+  setIndex : function(index) {
+    var q;
+    this._index = index;
+    if ((q = this._queued_query) !== null) {
+      this._queued_query = null;
+      Search.query(q);
+    }
+  },
+
+  hasIndex : function() {
+      return this._index !== null;
+  },
+
+  deferQuery : function(query) {
+      this._queued_query = query;
+  },
+
+  stopPulse : function() {
+      this._pulse_status = 0;
+  },
+
+  startPulse : function() {
+    if (this._pulse_status >= 0)
+        return;
+    function pulse() {
+      var i;
+      Search._pulse_status = (Search._pulse_status + 1) % 4;
+      var dotString = '';
+      for (i = 0; i < Search._pulse_status; i++)
+        dotString += '.';
+      Search.dots.text(dotString);
+      if (Search._pulse_status > -1)
+        window.setTimeout(pulse, 500);
+    }
+    pulse();
+  },
+
+  /**
+   * perform a search for something (or wait until index is loaded)
+   */
+  performSearch : function(query) {
+    // create the required interface elements
+    this.out = $('#search-results');
+    this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out);
+    this.dots = $('<span></span>').appendTo(this.title);
+    this.status = $('<p style="display: none"></p>').appendTo(this.out);
+    this.output = $('<ul class="search"/>').appendTo(this.out);
+
+    $('#search-progress').text(_('Preparing search...'));
+    this.startPulse();
+
+    // index already loaded, the browser was quick!
+    if (this.hasIndex())
+      this.query(query);
+    else
+      this.deferQuery(query);
+  },
+
+  /**
+   * execute search (requires search index to be loaded)
+   */
+  query : function(query) {
+    var i;
+    var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"];
+
+    // stem the searchterms and add them to the correct list
+    var stemmer = new Stemmer();
+    var searchterms = [];
+    var excluded = [];
+    var hlterms = [];
+    var tmp = query.split(/\s+/);
+    var objectterms = [];
+    for (i = 0; i < tmp.length; i++) {
+      if (tmp[i] !== "") {
+          objectterms.push(tmp[i].toLowerCase());
+      }
+
+      if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i].match(/^\d+$/) ||
+          tmp[i] === "") {
+        // skip this "word"
+        continue;
+      }
+      // stem the word
+      var word = stemmer.stemWord(tmp[i].toLowerCase());
+      var toAppend;
+      // select the correct list
+      if (word[0] == '-') {
+        toAppend = excluded;
+        word = word.substr(1);
+      }
+      else {
+        toAppend = searchterms;
+        hlterms.push(tmp[i].toLowerCase());
+      }
+      // only add if not already in the list
+      if (!$u.contains(toAppend, word))
+        toAppend.push(word);
+    }
+    var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" "));
+
+    // console.debug('SEARCH: searching for:');
+    // console.info('required: ', searchterms);
+    // console.info('excluded: ', excluded);
+
+    // prepare search
+    var terms = this._index.terms;
+    var titleterms = this._index.titleterms;
+
+    // array of [filename, title, anchor, descr, score]
+    var results = [];
+    $('#search-progress').empty();
+
+    // lookup as object
+    for (i = 0; i < objectterms.length; i++) {
+      var others = [].concat(objectterms.slice(0, i),
+                             objectterms.slice(i+1, objectterms.length));
+      results = results.concat(this.performObjectSearch(objectterms[i], others));
+    }
+
+    // lookup as search terms in fulltext
+    results = results.concat(this.performTermsSearch(searchterms, excluded, terms, Scorer.term))
+                     .concat(this.performTermsSearch(searchterms, excluded, titleterms, Scorer.title));
+
+    // let the scorer override scores with a custom scoring function
+    if (Scorer.score) {
+      for (i = 0; i < results.length; i++)
+        results[i][4] = Scorer.score(results[i]);
+    }
+
+    // now sort the results by score (in opposite order of appearance, since the
+    // display function below uses pop() to retrieve items) and then
+    // alphabetically
+    results.sort(function(a, b) {
+      var left = a[4];
+      var right = b[4];
+      if (left > right) {
+        return 1;
+      } else if (left < right) {
+        return -1;
+      } else {
+        // same score: sort alphabetically
+        left = a[1].toLowerCase();
+        right = b[1].toLowerCase();
+        return (left > right) ? -1 : ((left < right) ? 1 : 0);
+      }
+    });
+
+    // for debugging
+    //Search.lastresults = results.slice();  // a copy
+    //console.info('search results:', Search.lastresults);
+
+    // print the results
+    var resultCount = results.length;
+    function displayNextItem() {
+      // results left, load the summary and display it
+      if (results.length) {
+        var item = results.pop();
+        var listItem = $('<li style="display:none"></li>');
+        if (DOCUMENTATION_OPTIONS.FILE_SUFFIX === '') {
+          // dirhtml builder
+          var dirname = item[0] + '/';
+          if (dirname.match(/\/index\/$/)) {
+            dirname = dirname.substring(0, dirname.length-6);
+          } else if (dirname == 'index/') {
+            dirname = '';
+          }
+          listItem.append($('<a/>').attr('href',
+            DOCUMENTATION_OPTIONS.URL_ROOT + dirname +
+            highlightstring + item[2]).html(item[1]));
+        } else {
+          // normal html builders
+          listItem.append($('<a/>').attr('href',
+            item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX +
+            highlightstring + item[2]).html(item[1]));
+        }
+        if (item[3]) {
+          listItem.append($('<span> (' + item[3] + ')</span>'));
+          Search.output.append(listItem);
+          listItem.slideDown(5, function() {
+            displayNextItem();
+          });
+        } else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) {
+          $.ajax({url: DOCUMENTATION_OPTIONS.URL_ROOT + '_sources/' + item[0] + '.txt',
+                  dataType: "text",
+                  complete: function(jqxhr, textstatus) {
+                    var data = jqxhr.responseText;
+                    if (data !== '') {
+                      listItem.append(Search.makeSearchSummary(data, searchterms, hlterms));
+                    }
+                    Search.output.append(listItem);
+                    listItem.slideDown(5, function() {
+                      displayNextItem();
+                    });
+                  }});
+        } else {
+          // no source available, just display title
+          Search.output.append(listItem);
+          listItem.slideDown(5, function() {
+            displayNextItem();
+          });
+        }
+      }
+      // search finished, update title and status message
+      else {
+        Search.stopPulse();
+        Search.title.text(_('Search Results'));
+        if (!resultCount)
+          Search.status.text(_('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.'));
+        else
+            Search.status.text(_('Search finished, found %s page(s) matching the search query.').replace('%s', resultCount));
+        Search.status.fadeIn(500);
+      }
+    }
+    displayNextItem();
+  },
+
+  /**
+   * search for object names
+   */
+  performObjectSearch : function(object, otherterms) {
+    var filenames = this._index.filenames;
+    var objects = this._index.objects;
+    var objnames = this._index.objnames;
+    var titles = this._index.titles;
+
+    var i;
+    var results = [];
+
+    for (var prefix in objects) {
+      for (var name in objects[prefix]) {
+        var fullname = (prefix ? prefix + '.' : '') + name;
+        if (fullname.toLowerCase().indexOf(object) > -1) {
+          var score = 0;
+          var parts = fullname.split('.');
+          // check for different match types: exact matches of full name or
+          // "last name" (i.e. last dotted part)
+          if (fullname == object || parts[parts.length - 1] == object) {
+            score += Scorer.objNameMatch;
+          // matches in last name
+          } else if (parts[parts.length - 1].indexOf(object) > -1) {
+            score += Scorer.objPartialMatch;
+          }
+          var match = objects[prefix][name];
+          var objname = objnames[match[1]][2];
+          var title = titles[match[0]];
+          // If more than one term searched for, we require other words to be
+          // found in the name/title/description
+          if (otherterms.length > 0) {
+            var haystack = (prefix + ' ' + name + ' ' +
+                            objname + ' ' + title).toLowerCase();
+            var allfound = true;
+            for (i = 0; i < otherterms.length; i++) {
+              if (haystack.indexOf(otherterms[i]) == -1) {
+                allfound = false;
+                break;
+              }
+            }
+            if (!allfound) {
+              continue;
+            }
+          }
+          var descr = objname + _(', in ') + title;
+
+          var anchor = match[3];
+          if (anchor === '')
+            anchor = fullname;
+          else if (anchor == '-')
+            anchor = objnames[match[1]][1] + '-' + fullname;
+          // add custom score for some objects according to scorer
+          if (Scorer.objPrio.hasOwnProperty(match[2])) {
+            score += Scorer.objPrio[match[2]];
+          } else {
+            score += Scorer.objPrioDefault;
+          }
+          results.push([filenames[match[0]], fullname, '#'+anchor, descr, score]);
+        }
+      }
+    }
+
+    return results;
+  },
+
+  /**
+   * search for full-text terms in the index
+   */
+  performTermsSearch : function(searchterms, excluded, terms, score) {
+    var filenames = this._index.filenames;
+    var titles = this._index.titles;
+
+    var i, j, file, files;
+    var fileMap = {};
+    var results = [];
+
+    // perform the search on the required terms
+    for (i = 0; i < searchterms.length; i++) {
+      var word = searchterms[i];
+      // no match but word was a required one
+      if ((files = terms[word]) === undefined)
+        break;
+      if (files.length === undefined) {
+        files = [files];
+      }
+      // create the mapping
+      for (j = 0; j < files.length; j++) {
+        file = files[j];
+        if (file in fileMap)
+          fileMap[file].push(word);
+        else
+          fileMap[file] = [word];
+      }
+    }
+
+    // now check if the files don't contain excluded terms
+    for (file in fileMap) {
+      var valid = true;
+
+      // check if all requirements are matched
+      if (fileMap[file].length != searchterms.length)
+          continue;
+
+      // ensure that none of the excluded terms is in the search result
+      for (i = 0; i < excluded.length; i++) {
+        if (terms[excluded[i]] == file ||
+          $u.contains(terms[excluded[i]] || [], file)) {
+          valid = false;
+          break;
+        }
+      }
+
+      // if we have still a valid result we can add it to the result list
+      if (valid) {
+        results.push([filenames[file], titles[file], '', null, score]);
+      }
+    }
+    return results;
+  },
+
+  /**
+   * helper function to return a node containing the
+   * search summary for a given text. keywords is a list
+   * of stemmed words, hlwords is the list of normal, unstemmed
+   * words. the first one is used to find the occurance, the
+   * latter for highlighting it.
+   */
+  makeSearchSummary : function(text, keywords, hlwords) {
+    var textLower = text.toLowerCase();
+    var start = 0;
+    $.each(keywords, function() {
+      var i = textLower.indexOf(this.toLowerCase());
+      if (i > -1)
+        start = i;
+    });
+    start = Math.max(start - 120, 0);
+    var excerpt = ((start > 0) ? '...' : '') +
+      $.trim(text.substr(start, 240)) +
+      ((start + 240 - text.length) ? '...' : '');
+    var rv = $('<div class="context"></div>').text(excerpt);
+    $.each(hlwords, function() {
+      rv = rv.highlightText(this, 'highlighted');
+    });
+    return rv;
+  }
+};
+
+$(document).ready(function() {
+  Search.init();
+});
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_static/sphinxdoc.css b/doc/sphinx/_build/html/_static/sphinxdoc.css
new file mode 100644 (file)
index 0000000..894701c
--- /dev/null
@@ -0,0 +1,339 @@
+/*
+ * sphinxdoc.css_t
+ * ~~~~~~~~~~~~~~~
+ *
+ * Sphinx stylesheet -- sphinxdoc theme.  Originally created by
+ * Armin Ronacher for Werkzeug.
+ *
+ * :copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+@import url("basic.css");
+
+/* -- page layout ----------------------------------------------------------- */
+
+body {
+    font-family: 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva',
+                 'Verdana', sans-serif;
+    font-size: 14px;
+    letter-spacing: -0.01em;
+    line-height: 150%;
+    text-align: center;
+    background-color: #BFD1D4;
+    color: black;
+    padding: 0;
+    border: 1px solid #aaa;
+
+    margin: 0px 80px 0px 80px;
+    min-width: 740px;
+}
+
+div.document {
+    background-color: white;
+    text-align: left;
+    background-image: url(contents.png);
+    background-repeat: repeat-x;
+}
+
+div.bodywrapper {
+    margin: 0 240px 0 0;
+    border-right: 1px solid #ccc;
+}
+
+div.body {
+    margin: 0;
+    padding: 0.5em 20px 20px 20px;
+}
+
+div.related {
+    font-size: 1em;
+}
+
+div.related ul {
+    background-image: url(navigation.png);
+    height: 2em;
+    border-top: 1px solid #ddd;
+    border-bottom: 1px solid #ddd;
+}
+
+div.related ul li {
+    margin: 0;
+    padding: 0;
+    height: 2em;
+    float: left;
+}
+
+div.related ul li.right {
+    float: right;
+    margin-right: 5px;
+}
+
+div.related ul li a {
+    margin: 0;
+    padding: 0 5px 0 5px;
+    line-height: 1.75em;
+    color: #EE9816;
+}
+
+div.related ul li a:hover {
+    color: #3CA8E7;
+}
+
+div.sphinxsidebarwrapper {
+    padding: 0;
+}
+
+div.sphinxsidebar {
+    margin: 0;
+    padding: 0.5em 15px 15px 0;
+    width: 210px;
+    float: right;
+    font-size: 1em;
+    text-align: left;
+}
+
+div.sphinxsidebar h3, div.sphinxsidebar h4 {
+    margin: 1em 0 0.5em 0;
+    font-size: 1em;
+    padding: 0.1em 0 0.1em 0.5em;
+    color: white;
+    border: 1px solid #86989B;
+    background-color: #AFC1C4;
+}
+
+div.sphinxsidebar h3 a {
+    color: white;
+}
+
+div.sphinxsidebar ul {
+    padding-left: 1.5em;
+    margin-top: 7px;
+    padding: 0;
+    line-height: 130%;
+}
+
+div.sphinxsidebar ul ul {
+    margin-left: 20px;
+}
+
+div.footer {
+    background-color: #E3EFF1;
+    color: #86989B;
+    padding: 3px 8px 3px 0;
+    clear: both;
+    font-size: 0.8em;
+    text-align: right;
+}
+
+div.footer a {
+    color: #86989B;
+    text-decoration: underline;
+}
+
+/* -- body styles ----------------------------------------------------------- */
+
+p {    
+    margin: 0.8em 0 0.5em 0;
+}
+
+a {
+    color: #CA7900;
+    text-decoration: none;
+}
+
+a:hover {
+    color: #2491CF;
+}
+
+div.body a {
+    text-decoration: underline;
+}
+
+h1 {
+    margin: 0;
+    padding: 0.7em 0 0.3em 0;
+    font-size: 1.5em;
+    color: #11557C;
+}
+
+h2 {
+    margin: 1.3em 0 0.2em 0;
+    font-size: 1.35em;
+    padding: 0;
+}
+
+h3 {
+    margin: 1em 0 -0.3em 0;
+    font-size: 1.2em;
+}
+
+div.body h1 a, div.body h2 a, div.body h3 a, div.body h4 a, div.body h5 a, div.body h6 a {
+    color: black!important;
+}
+
+h1 a.anchor, h2 a.anchor, h3 a.anchor, h4 a.anchor, h5 a.anchor, h6 a.anchor {
+    display: none;
+    margin: 0 0 0 0.3em;
+    padding: 0 0.2em 0 0.2em;
+    color: #aaa!important;
+}
+
+h1:hover a.anchor, h2:hover a.anchor, h3:hover a.anchor, h4:hover a.anchor,
+h5:hover a.anchor, h6:hover a.anchor {
+    display: inline;
+}
+
+h1 a.anchor:hover, h2 a.anchor:hover, h3 a.anchor:hover, h4 a.anchor:hover,
+h5 a.anchor:hover, h6 a.anchor:hover {
+    color: #777;
+    background-color: #eee;
+}
+
+a.headerlink {
+    color: #c60f0f!important;
+    font-size: 1em;
+    margin-left: 6px;
+    padding: 0 4px 0 4px;
+    text-decoration: none!important;
+}
+
+a.headerlink:hover {
+    background-color: #ccc;
+    color: white!important;
+}
+
+cite, code, tt {
+    font-family: 'Consolas', 'Deja Vu Sans Mono',
+                 'Bitstream Vera Sans Mono', monospace;
+    font-size: 0.95em;
+    letter-spacing: 0.01em;
+}
+
+tt {
+    background-color: #f2f2f2;
+    border-bottom: 1px solid #ddd;
+    color: #333;
+}
+
+tt.descname, tt.descclassname, tt.xref {
+    border: 0;
+}
+
+hr {
+    border: 1px solid #abc;
+    margin: 2em;
+}
+
+a tt {
+    border: 0;
+    color: #CA7900;
+}
+
+a tt:hover {
+    color: #2491CF;
+}
+
+pre {
+    font-family: 'Consolas', 'Deja Vu Sans Mono',
+                 'Bitstream Vera Sans Mono', monospace;
+    font-size: 0.95em;
+    letter-spacing: 0.015em;
+    line-height: 120%;
+    padding: 0.5em;
+    border: 1px solid #ccc;
+    background-color: #f8f8f8;
+}
+
+pre a {
+    color: inherit;
+    text-decoration: underline;
+}
+
+td.linenos pre {
+    padding: 0.5em 0;
+}
+
+div.quotebar {
+    background-color: #f8f8f8;
+    max-width: 250px;
+    float: right;
+    padding: 2px 7px;
+    border: 1px solid #ccc;
+}
+
+div.topic {
+    background-color: #f8f8f8;
+}
+
+table {
+    border-collapse: collapse;
+    margin: 0 -0.5em 0 -0.5em;
+}
+
+table td, table th {
+    padding: 0.2em 0.5em 0.2em 0.5em;
+}
+
+div.admonition, div.warning {
+    font-size: 0.9em;
+    margin: 1em 0 1em 0;
+    border: 1px solid #86989B;
+    background-color: #f7f7f7;
+    padding: 0;
+}
+
+div.admonition p, div.warning p {
+    margin: 0.5em 1em 0.5em 1em;
+    padding: 0;
+}
+
+div.admonition pre, div.warning pre {
+    margin: 0.4em 1em 0.4em 1em;
+}
+
+div.admonition p.admonition-title,
+div.warning p.admonition-title {
+    margin: 0;
+    padding: 0.1em 0 0.1em 0.5em;
+    color: white;
+    border-bottom: 1px solid #86989B;
+    font-weight: bold;
+    background-color: #AFC1C4;
+}
+
+div.warning {
+    border: 1px solid #940000;
+}
+
+div.warning p.admonition-title {
+    background-color: #CF0000;
+    border-bottom-color: #940000;
+}
+
+div.admonition ul, div.admonition ol,
+div.warning ul, div.warning ol {
+    margin: 0.1em 0.5em 0.5em 3em;
+    padding: 0;
+}
+
+div.versioninfo {
+    margin: 1em 0 0 0;
+    border: 1px solid #ccc;
+    background-color: #DDEAF0;
+    padding: 8px;
+    line-height: 1.3em;
+    font-size: 0.9em;
+}
+
+.viewcode-back {
+    font-family: 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva',
+                 'Verdana', sans-serif;
+}
+
+div.viewcode-block:target {
+    background-color: #f4debf;
+    border-top: 1px solid #ac9;
+    border-bottom: 1px solid #ac9;
+}
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/_static/underscore.js b/doc/sphinx/_build/html/_static/underscore.js
new file mode 100644 (file)
index 0000000..a12f0d9
--- /dev/null
@@ -0,0 +1,1226 @@
+//     Underscore.js 1.4.4
+//     http://underscorejs.org
+//     (c) 2009-2013 Jeremy Ashkenas, DocumentCloud Inc.
+//     Underscore may be freely distributed under the MIT license.
+
+(function() {
+
+  // Baseline setup
+  // --------------
+
+  // Establish the root object, `window` in the browser, or `global` on the server.
+  var root = this;
+
+  // Save the previous value of the `_` variable.
+  var previousUnderscore = root._;
+
+  // Establish the object that gets returned to break out of a loop iteration.
+  var breaker = {};
+
+  // Save bytes in the minified (but not gzipped) version:
+  var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;
+
+  // Create quick reference variables for speed access to core prototypes.
+  var push             = ArrayProto.push,
+      slice            = ArrayProto.slice,
+      concat           = ArrayProto.concat,
+      toString         = ObjProto.toString,
+      hasOwnProperty   = ObjProto.hasOwnProperty;
+
+  // All **ECMAScript 5** native function implementations that we hope to use
+  // are declared here.
+  var
+    nativeForEach      = ArrayProto.forEach,
+    nativeMap          = ArrayProto.map,
+    nativeReduce       = ArrayProto.reduce,
+    nativeReduceRight  = ArrayProto.reduceRight,
+    nativeFilter       = ArrayProto.filter,
+    nativeEvery        = ArrayProto.every,
+    nativeSome         = ArrayProto.some,
+    nativeIndexOf      = ArrayProto.indexOf,
+    nativeLastIndexOf  = ArrayProto.lastIndexOf,
+    nativeIsArray      = Array.isArray,
+    nativeKeys         = Object.keys,
+    nativeBind         = FuncProto.bind;
+
+  // Create a safe reference to the Underscore object for use below.
+  var _ = function(obj) {
+    if (obj instanceof _) return obj;
+    if (!(this instanceof _)) return new _(obj);
+    this._wrapped = obj;
+  };
+
+  // Export the Underscore object for **Node.js**, with
+  // backwards-compatibility for the old `require()` API. If we're in
+  // the browser, add `_` as a global object via a string identifier,
+  // for Closure Compiler "advanced" mode.
+  if (typeof exports !== 'undefined') {
+    if (typeof module !== 'undefined' && module.exports) {
+      exports = module.exports = _;
+    }
+    exports._ = _;
+  } else {
+    root._ = _;
+  }
+
+  // Current version.
+  _.VERSION = '1.4.4';
+
+  // Collection Functions
+  // --------------------
+
+  // The cornerstone, an `each` implementation, aka `forEach`.
+  // Handles objects with the built-in `forEach`, arrays, and raw objects.
+  // Delegates to **ECMAScript 5**'s native `forEach` if available.
+  var each = _.each = _.forEach = function(obj, iterator, context) {
+    if (obj == null) return;
+    if (nativeForEach && obj.forEach === nativeForEach) {
+      obj.forEach(iterator, context);
+    } else if (obj.length === +obj.length) {
+      for (var i = 0, l = obj.length; i < l; i++) {
+        if (iterator.call(context, obj[i], i, obj) === breaker) return;
+      }
+    } else {
+      for (var key in obj) {
+        if (_.has(obj, key)) {
+          if (iterator.call(context, obj[key], key, obj) === breaker) return;
+        }
+      }
+    }
+  };
+
+  // Return the results of applying the iterator to each element.
+  // Delegates to **ECMAScript 5**'s native `map` if available.
+  _.map = _.collect = function(obj, iterator, context) {
+    var results = [];
+    if (obj == null) return results;
+    if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);
+    each(obj, function(value, index, list) {
+      results[results.length] = iterator.call(context, value, index, list);
+    });
+    return results;
+  };
+
+  var reduceError = 'Reduce of empty array with no initial value';
+
+  // **Reduce** builds up a single result from a list of values, aka `inject`,
+  // or `foldl`. Delegates to **ECMAScript 5**'s native `reduce` if available.
+  _.reduce = _.foldl = _.inject = function(obj, iterator, memo, context) {
+    var initial = arguments.length > 2;
+    if (obj == null) obj = [];
+    if (nativeReduce && obj.reduce === nativeReduce) {
+      if (context) iterator = _.bind(iterator, context);
+      return initial ? obj.reduce(iterator, memo) : obj.reduce(iterator);
+    }
+    each(obj, function(value, index, list) {
+      if (!initial) {
+        memo = value;
+        initial = true;
+      } else {
+        memo = iterator.call(context, memo, value, index, list);
+      }
+    });
+    if (!initial) throw new TypeError(reduceError);
+    return memo;
+  };
+
+  // The right-associative version of reduce, also known as `foldr`.
+  // Delegates to **ECMAScript 5**'s native `reduceRight` if available.
+  _.reduceRight = _.foldr = function(obj, iterator, memo, context) {
+    var initial = arguments.length > 2;
+    if (obj == null) obj = [];
+    if (nativeReduceRight && obj.reduceRight === nativeReduceRight) {
+      if (context) iterator = _.bind(iterator, context);
+      return initial ? obj.reduceRight(iterator, memo) : obj.reduceRight(iterator);
+    }
+    var length = obj.length;
+    if (length !== +length) {
+      var keys = _.keys(obj);
+      length = keys.length;
+    }
+    each(obj, function(value, index, list) {
+      index = keys ? keys[--length] : --length;
+      if (!initial) {
+        memo = obj[index];
+        initial = true;
+      } else {
+        memo = iterator.call(context, memo, obj[index], index, list);
+      }
+    });
+    if (!initial) throw new TypeError(reduceError);
+    return memo;
+  };
+
+  // Return the first value which passes a truth test. Aliased as `detect`.
+  _.find = _.detect = function(obj, iterator, context) {
+    var result;
+    any(obj, function(value, index, list) {
+      if (iterator.call(context, value, index, list)) {
+        result = value;
+        return true;
+      }
+    });
+    return result;
+  };
+
+  // Return all the elements that pass a truth test.
+  // Delegates to **ECMAScript 5**'s native `filter` if available.
+  // Aliased as `select`.
+  _.filter = _.select = function(obj, iterator, context) {
+    var results = [];
+    if (obj == null) return results;
+    if (nativeFilter && obj.filter === nativeFilter) return obj.filter(iterator, context);
+    each(obj, function(value, index, list) {
+      if (iterator.call(context, value, index, list)) results[results.length] = value;
+    });
+    return results;
+  };
+
+  // Return all the elements for which a truth test fails.
+  _.reject = function(obj, iterator, context) {
+    return _.filter(obj, function(value, index, list) {
+      return !iterator.call(context, value, index, list);
+    }, context);
+  };
+
+  // Determine whether all of the elements match a truth test.
+  // Delegates to **ECMAScript 5**'s native `every` if available.
+  // Aliased as `all`.
+  _.every = _.all = function(obj, iterator, context) {
+    iterator || (iterator = _.identity);
+    var result = true;
+    if (obj == null) return result;
+    if (nativeEvery && obj.every === nativeEvery) return obj.every(iterator, context);
+    each(obj, function(value, index, list) {
+      if (!(result = result && iterator.call(context, value, index, list))) return breaker;
+    });
+    return !!result;
+  };
+
+  // Determine if at least one element in the object matches a truth test.
+  // Delegates to **ECMAScript 5**'s native `some` if available.
+  // Aliased as `any`.
+  var any = _.some = _.any = function(obj, iterator, context) {
+    iterator || (iterator = _.identity);
+    var result = false;
+    if (obj == null) return result;
+    if (nativeSome && obj.some === nativeSome) return obj.some(iterator, context);
+    each(obj, function(value, index, list) {
+      if (result || (result = iterator.call(context, value, index, list))) return breaker;
+    });
+    return !!result;
+  };
+
+  // Determine if the array or object contains a given value (using `===`).
+  // Aliased as `include`.
+  _.contains = _.include = function(obj, target) {
+    if (obj == null) return false;
+    if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1;
+    return any(obj, function(value) {
+      return value === target;
+    });
+  };
+
+  // Invoke a method (with arguments) on every item in a collection.
+  _.invoke = function(obj, method) {
+    var args = slice.call(arguments, 2);
+    var isFunc = _.isFunction(method);
+    return _.map(obj, function(value) {
+      return (isFunc ? method : value[method]).apply(value, args);
+    });
+  };
+
+  // Convenience version of a common use case of `map`: fetching a property.
+  _.pluck = function(obj, key) {
+    return _.map(obj, function(value){ return value[key]; });
+  };
+
+  // Convenience version of a common use case of `filter`: selecting only objects
+  // containing specific `key:value` pairs.
+  _.where = function(obj, attrs, first) {
+    if (_.isEmpty(attrs)) return first ? null : [];
+    return _[first ? 'find' : 'filter'](obj, function(value) {
+      for (var key in attrs) {
+        if (attrs[key] !== value[key]) return false;
+      }
+      return true;
+    });
+  };
+
+  // Convenience version of a common use case of `find`: getting the first object
+  // containing specific `key:value` pairs.
+  _.findWhere = function(obj, attrs) {
+    return _.where(obj, attrs, true);
+  };
+
+  // Return the maximum element or (element-based computation).
+  // Can't optimize arrays of integers longer than 65,535 elements.
+  // See: https://bugs.webkit.org/show_bug.cgi?id=80797
+  _.max = function(obj, iterator, context) {
+    if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) {
+      return Math.max.apply(Math, obj);
+    }
+    if (!iterator && _.isEmpty(obj)) return -Infinity;
+    var result = {computed : -Infinity, value: -Infinity};
+    each(obj, function(value, index, list) {
+      var computed = iterator ? iterator.call(context, value, index, list) : value;
+      computed >= result.computed && (result = {value : value, computed : computed});
+    });
+    return result.value;
+  };
+
+  // Return the minimum element (or element-based computation).
+  _.min = function(obj, iterator, context) {
+    if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) {
+      return Math.min.apply(Math, obj);
+    }
+    if (!iterator && _.isEmpty(obj)) return Infinity;
+    var result = {computed : Infinity, value: Infinity};
+    each(obj, function(value, index, list) {
+      var computed = iterator ? iterator.call(context, value, index, list) : value;
+      computed < result.computed && (result = {value : value, computed : computed});
+    });
+    return result.value;
+  };
+
+  // Shuffle an array.
+  _.shuffle = function(obj) {
+    var rand;
+    var index = 0;
+    var shuffled = [];
+    each(obj, function(value) {
+      rand = _.random(index++);
+      shuffled[index - 1] = shuffled[rand];
+      shuffled[rand] = value;
+    });
+    return shuffled;
+  };
+
+  // An internal function to generate lookup iterators.
+  var lookupIterator = function(value) {
+    return _.isFunction(value) ? value : function(obj){ return obj[value]; };
+  };
+
+  // Sort the object's values by a criterion produced by an iterator.
+  _.sortBy = function(obj, value, context) {
+    var iterator = lookupIterator(value);
+    return _.pluck(_.map(obj, function(value, index, list) {
+      return {
+        value : value,
+        index : index,
+        criteria : iterator.call(context, value, index, list)
+      };
+    }).sort(function(left, right) {
+      var a = left.criteria;
+      var b = right.criteria;
+      if (a !== b) {
+        if (a > b || a === void 0) return 1;
+        if (a < b || b === void 0) return -1;
+      }
+      return left.index < right.index ? -1 : 1;
+    }), 'value');
+  };
+
+  // An internal function used for aggregate "group by" operations.
+  var group = function(obj, value, context, behavior) {
+    var result = {};
+    var iterator = lookupIterator(value || _.identity);
+    each(obj, function(value, index) {
+      var key = iterator.call(context, value, index, obj);
+      behavior(result, key, value);
+    });
+    return result;
+  };
+
+  // Groups the object's values by a criterion. Pass either a string attribute
+  // to group by, or a function that returns the criterion.
+  _.groupBy = function(obj, value, context) {
+    return group(obj, value, context, function(result, key, value) {
+      (_.has(result, key) ? result[key] : (result[key] = [])).push(value);
+    });
+  };
+
+  // Counts instances of an object that group by a certain criterion. Pass
+  // either a string attribute to count by, or a function that returns the
+  // criterion.
+  _.countBy = function(obj, value, context) {
+    return group(obj, value, context, function(result, key) {
+      if (!_.has(result, key)) result[key] = 0;
+      result[key]++;
+    });
+  };
+
+  // Use a comparator function to figure out the smallest index at which
+  // an object should be inserted so as to maintain order. Uses binary search.
+  _.sortedIndex = function(array, obj, iterator, context) {
+    iterator = iterator == null ? _.identity : lookupIterator(iterator);
+    var value = iterator.call(context, obj);
+    var low = 0, high = array.length;
+    while (low < high) {
+      var mid = (low + high) >>> 1;
+      iterator.call(context, array[mid]) < value ? low = mid + 1 : high = mid;
+    }
+    return low;
+  };
+
+  // Safely convert anything iterable into a real, live array.
+  _.toArray = function(obj) {
+    if (!obj) return [];
+    if (_.isArray(obj)) return slice.call(obj);
+    if (obj.length === +obj.length) return _.map(obj, _.identity);
+    return _.values(obj);
+  };
+
+  // Return the number of elements in an object.
+  _.size = function(obj) {
+    if (obj == null) return 0;
+    return (obj.length === +obj.length) ? obj.length : _.keys(obj).length;
+  };
+
+  // Array Functions
+  // ---------------
+
+  // Get the first element of an array. Passing **n** will return the first N
+  // values in the array. Aliased as `head` and `take`. The **guard** check
+  // allows it to work with `_.map`.
+  _.first = _.head = _.take = function(array, n, guard) {
+    if (array == null) return void 0;
+    return (n != null) && !guard ? slice.call(array, 0, n) : array[0];
+  };
+
+  // Returns everything but the last entry of the array. Especially useful on
+  // the arguments object. Passing **n** will return all the values in
+  // the array, excluding the last N. The **guard** check allows it to work with
+  // `_.map`.
+  _.initial = function(array, n, guard) {
+    return slice.call(array, 0, array.length - ((n == null) || guard ? 1 : n));
+  };
+
+  // Get the last element of an array. Passing **n** will return the last N
+  // values in the array. The **guard** check allows it to work with `_.map`.
+  _.last = function(array, n, guard) {
+    if (array == null) return void 0;
+    if ((n != null) && !guard) {
+      return slice.call(array, Math.max(array.length - n, 0));
+    } else {
+      return array[array.length - 1];
+    }
+  };
+
+  // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.
+  // Especially useful on the arguments object. Passing an **n** will return
+  // the rest N values in the array. The **guard**
+  // check allows it to work with `_.map`.
+  _.rest = _.tail = _.drop = function(array, n, guard) {
+    return slice.call(array, (n == null) || guard ? 1 : n);
+  };
+
+  // Trim out all falsy values from an array.
+  _.compact = function(array) {
+    return _.filter(array, _.identity);
+  };
+
+  // Internal implementation of a recursive `flatten` function.
+  var flatten = function(input, shallow, output) {
+    each(input, function(value) {
+      if (_.isArray(value)) {
+        shallow ? push.apply(output, value) : flatten(value, shallow, output);
+      } else {
+        output.push(value);
+      }
+    });
+    return output;
+  };
+
+  // Return a completely flattened version of an array.
+  _.flatten = function(array, shallow) {
+    return flatten(array, shallow, []);
+  };
+
+  // Return a version of the array that does not contain the specified value(s).
+  _.without = function(array) {
+    return _.difference(array, slice.call(arguments, 1));
+  };
+
+  // Produce a duplicate-free version of the array. If the array has already
+  // been sorted, you have the option of using a faster algorithm.
+  // Aliased as `unique`.
+  _.uniq = _.unique = function(array, isSorted, iterator, context) {
+    if (_.isFunction(isSorted)) {
+      context = iterator;
+      iterator = isSorted;
+      isSorted = false;
+    }
+    var initial = iterator ? _.map(array, iterator, context) : array;
+    var results = [];
+    var seen = [];
+    each(initial, function(value, index) {
+      if (isSorted ? (!index || seen[seen.length - 1] !== value) : !_.contains(seen, value)) {
+        seen.push(value);
+        results.push(array[index]);
+      }
+    });
+    return results;
+  };
+
+  // Produce an array that contains the union: each distinct element from all of
+  // the passed-in arrays.
+  _.union = function() {
+    return _.uniq(concat.apply(ArrayProto, arguments));
+  };
+
+  // Produce an array that contains every item shared between all the
+  // passed-in arrays.
+  _.intersection = function(array) {
+    var rest = slice.call(arguments, 1);
+    return _.filter(_.uniq(array), function(item) {
+      return _.every(rest, function(other) {
+        return _.indexOf(other, item) >= 0;
+      });
+    });
+  };
+
+  // Take the difference between one array and a number of other arrays.
+  // Only the elements present in just the first array will remain.
+  _.difference = function(array) {
+    var rest = concat.apply(ArrayProto, slice.call(arguments, 1));
+    return _.filter(array, function(value){ return !_.contains(rest, value); });
+  };
+
+  // Zip together multiple lists into a single array -- elements that share
+  // an index go together.
+  _.zip = function() {
+    var args = slice.call(arguments);
+    var length = _.max(_.pluck(args, 'length'));
+    var results = new Array(length);
+    for (var i = 0; i < length; i++) {
+      results[i] = _.pluck(args, "" + i);
+    }
+    return results;
+  };
+
+  // Converts lists into objects. Pass either a single array of `[key, value]`
+  // pairs, or two parallel arrays of the same length -- one of keys, and one of
+  // the corresponding values.
+  _.object = function(list, values) {
+    if (list == null) return {};
+    var result = {};
+    for (var i = 0, l = list.length; i < l; i++) {
+      if (values) {
+        result[list[i]] = values[i];
+      } else {
+        result[list[i][0]] = list[i][1];
+      }
+    }
+    return result;
+  };
+
+  // If the browser doesn't supply us with indexOf (I'm looking at you, **MSIE**),
+  // we need this function. Return the position of the first occurrence of an
+  // item in an array, or -1 if the item is not included in the array.
+  // Delegates to **ECMAScript 5**'s native `indexOf` if available.
+  // If the array is large and already in sort order, pass `true`
+  // for **isSorted** to use binary search.
+  _.indexOf = function(array, item, isSorted) {
+    if (array == null) return -1;
+    var i = 0, l = array.length;
+    if (isSorted) {
+      if (typeof isSorted == 'number') {
+        i = (isSorted < 0 ? Math.max(0, l + isSorted) : isSorted);
+      } else {
+        i = _.sortedIndex(array, item);
+        return array[i] === item ? i : -1;
+      }
+    }
+    if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item, isSorted);
+    for (; i < l; i++) if (array[i] === item) return i;
+    return -1;
+  };
+
+  // Delegates to **ECMAScript 5**'s native `lastIndexOf` if available.
+  _.lastIndexOf = function(array, item, from) {
+    if (array == null) return -1;
+    var hasIndex = from != null;
+    if (nativeLastIndexOf && array.lastIndexOf === nativeLastIndexOf) {
+      return hasIndex ? array.lastIndexOf(item, from) : array.lastIndexOf(item);
+    }
+    var i = (hasIndex ? from : array.length);
+    while (i--) if (array[i] === item) return i;
+    return -1;
+  };
+
+  // Generate an integer Array containing an arithmetic progression. A port of
+  // the native Python `range()` function. See
+  // [the Python documentation](http://docs.python.org/library/functions.html#range).
+  _.range = function(start, stop, step) {
+    if (arguments.length <= 1) {
+      stop = start || 0;
+      start = 0;
+    }
+    step = arguments[2] || 1;
+
+    var len = Math.max(Math.ceil((stop - start) / step), 0);
+    var idx = 0;
+    var range = new Array(len);
+
+    while(idx < len) {
+      range[idx++] = start;
+      start += step;
+    }
+
+    return range;
+  };
+
+  // Function (ahem) Functions
+  // ------------------
+
+  // Create a function bound to a given object (assigning `this`, and arguments,
+  // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if
+  // available.
+  _.bind = function(func, context) {
+    if (func.bind === nativeBind && nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));
+    var args = slice.call(arguments, 2);
+    return function() {
+      return func.apply(context, args.concat(slice.call(arguments)));
+    };
+  };
+
+  // Partially apply a function by creating a version that has had some of its
+  // arguments pre-filled, without changing its dynamic `this` context.
+  _.partial = function(func) {
+    var args = slice.call(arguments, 1);
+    return function() {
+      return func.apply(this, args.concat(slice.call(arguments)));
+    };
+  };
+
+  // Bind all of an object's methods to that object. Useful for ensuring that
+  // all callbacks defined on an object belong to it.
+  _.bindAll = function(obj) {
+    var funcs = slice.call(arguments, 1);
+    if (funcs.length === 0) funcs = _.functions(obj);
+    each(funcs, function(f) { obj[f] = _.bind(obj[f], obj); });
+    return obj;
+  };
+
+  // Memoize an expensive function by storing its results.
+  _.memoize = function(func, hasher) {
+    var memo = {};
+    hasher || (hasher = _.identity);
+    return function() {
+      var key = hasher.apply(this, arguments);
+      return _.has(memo, key) ? memo[key] : (memo[key] = func.apply(this, arguments));
+    };
+  };
+
+  // Delays a function for the given number of milliseconds, and then calls
+  // it with the arguments supplied.
+  _.delay = function(func, wait) {
+    var args = slice.call(arguments, 2);
+    return setTimeout(function(){ return func.apply(null, args); }, wait);
+  };
+
+  // Defers a function, scheduling it to run after the current call stack has
+  // cleared.
+  _.defer = function(func) {
+    return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1)));
+  };
+
+  // Returns a function, that, when invoked, will only be triggered at most once
+  // during a given window of time.
+  _.throttle = function(func, wait) {
+    var context, args, timeout, result;
+    var previous = 0;
+    var later = function() {
+      previous = new Date;
+      timeout = null;
+      result = func.apply(context, args);
+    };
+    return function() {
+      var now = new Date;
+      var remaining = wait - (now - previous);
+      context = this;
+      args = arguments;
+      if (remaining <= 0) {
+        clearTimeout(timeout);
+        timeout = null;
+        previous = now;
+        result = func.apply(context, args);
+      } else if (!timeout) {
+        timeout = setTimeout(later, remaining);
+      }
+      return result;
+    };
+  };
+
+  // Returns a function, that, as long as it continues to be invoked, will not
+  // be triggered. The function will be called after it stops being called for
+  // N milliseconds. If `immediate` is passed, trigger the function on the
+  // leading edge, instead of the trailing.
+  _.debounce = function(func, wait, immediate) {
+    var timeout, result;
+    return function() {
+      var context = this, args = arguments;
+      var later = function() {
+        timeout = null;
+        if (!immediate) result = func.apply(context, args);
+      };
+      var callNow = immediate && !timeout;
+      clearTimeout(timeout);
+      timeout = setTimeout(later, wait);
+      if (callNow) result = func.apply(context, args);
+      return result;
+    };
+  };
+
+  // Returns a function that will be executed at most one time, no matter how
+  // often you call it. Useful for lazy initialization.
+  _.once = function(func) {
+    var ran = false, memo;
+    return function() {
+      if (ran) return memo;
+      ran = true;
+      memo = func.apply(this, arguments);
+      func = null;
+      return memo;
+    };
+  };
+
+  // Returns the first function passed as an argument to the second,
+  // allowing you to adjust arguments, run code before and after, and
+  // conditionally execute the original function.
+  _.wrap = function(func, wrapper) {
+    return function() {
+      var args = [func];
+      push.apply(args, arguments);
+      return wrapper.apply(this, args);
+    };
+  };
+
+  // Returns a function that is the composition of a list of functions, each
+  // consuming the return value of the function that follows.
+  _.compose = function() {
+    var funcs = arguments;
+    return function() {
+      var args = arguments;
+      for (var i = funcs.length - 1; i >= 0; i--) {
+        args = [funcs[i].apply(this, args)];
+      }
+      return args[0];
+    };
+  };
+
+  // Returns a function that will only be executed after being called N times.
+  _.after = function(times, func) {
+    if (times <= 0) return func();
+    return function() {
+      if (--times < 1) {
+        return func.apply(this, arguments);
+      }
+    };
+  };
+
+  // Object Functions
+  // ----------------
+
+  // Retrieve the names of an object's properties.
+  // Delegates to **ECMAScript 5**'s native `Object.keys`
+  _.keys = nativeKeys || function(obj) {
+    if (obj !== Object(obj)) throw new TypeError('Invalid object');
+    var keys = [];
+    for (var key in obj) if (_.has(obj, key)) keys[keys.length] = key;
+    return keys;
+  };
+
+  // Retrieve the values of an object's properties.
+  _.values = function(obj) {
+    var values = [];
+    for (var key in obj) if (_.has(obj, key)) values.push(obj[key]);
+    return values;
+  };
+
+  // Convert an object into a list of `[key, value]` pairs.
+  _.pairs = function(obj) {
+    var pairs = [];
+    for (var key in obj) if (_.has(obj, key)) pairs.push([key, obj[key]]);
+    return pairs;
+  };
+
+  // Invert the keys and values of an object. The values must be serializable.
+  _.invert = function(obj) {
+    var result = {};
+    for (var key in obj) if (_.has(obj, key)) result[obj[key]] = key;
+    return result;
+  };
+
+  // Return a sorted list of the function names available on the object.
+  // Aliased as `methods`
+  _.functions = _.methods = function(obj) {
+    var names = [];
+    for (var key in obj) {
+      if (_.isFunction(obj[key])) names.push(key);
+    }
+    return names.sort();
+  };
+
+  // Extend a given object with all the properties in passed-in object(s).
+  _.extend = function(obj) {
+    each(slice.call(arguments, 1), function(source) {
+      if (source) {
+        for (var prop in source) {
+          obj[prop] = source[prop];
+        }
+      }
+    });
+    return obj;
+  };
+
+  // Return a copy of the object only containing the whitelisted properties.
+  _.pick = function(obj) {
+    var copy = {};
+    var keys = concat.apply(ArrayProto, slice.call(arguments, 1));
+    each(keys, function(key) {
+      if (key in obj) copy[key] = obj[key];
+    });
+    return copy;
+  };
+
+   // Return a copy of the object without the blacklisted properties.
+  _.omit = function(obj) {
+    var copy = {};
+    var keys = concat.apply(ArrayProto, slice.call(arguments, 1));
+    for (var key in obj) {
+      if (!_.contains(keys, key)) copy[key] = obj[key];
+    }
+    return copy;
+  };
+
+  // Fill in a given object with default properties.
+  _.defaults = function(obj) {
+    each(slice.call(arguments, 1), function(source) {
+      if (source) {
+        for (var prop in source) {
+          if (obj[prop] == null) obj[prop] = source[prop];
+        }
+      }
+    });
+    return obj;
+  };
+
+  // Create a (shallow-cloned) duplicate of an object.
+  _.clone = function(obj) {
+    if (!_.isObject(obj)) return obj;
+    return _.isArray(obj) ? obj.slice() : _.extend({}, obj);
+  };
+
+  // Invokes interceptor with the obj, and then returns obj.
+  // The primary purpose of this method is to "tap into" a method chain, in
+  // order to perform operations on intermediate results within the chain.
+  _.tap = function(obj, interceptor) {
+    interceptor(obj);
+    return obj;
+  };
+
+  // Internal recursive comparison function for `isEqual`.
+  var eq = function(a, b, aStack, bStack) {
+    // Identical objects are equal. `0 === -0`, but they aren't identical.
+    // See the Harmony `egal` proposal: http://wiki.ecmascript.org/doku.php?id=harmony:egal.
+    if (a === b) return a !== 0 || 1 / a == 1 / b;
+    // A strict comparison is necessary because `null == undefined`.
+    if (a == null || b == null) return a === b;
+    // Unwrap any wrapped objects.
+    if (a instanceof _) a = a._wrapped;
+    if (b instanceof _) b = b._wrapped;
+    // Compare `[[Class]]` names.
+    var className = toString.call(a);
+    if (className != toString.call(b)) return false;
+    switch (className) {
+      // Strings, numbers, dates, and booleans are compared by value.
+      case '[object String]':
+        // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
+        // equivalent to `new String("5")`.
+        return a == String(b);
+      case '[object Number]':
+        // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for
+        // other numeric values.
+        return a != +a ? b != +b : (a == 0 ? 1 / a == 1 / b : a == +b);
+      case '[object Date]':
+      case '[object Boolean]':
+        // Coerce dates and booleans to numeric primitive values. Dates are compared by their
+        // millisecond representations. Note that invalid dates with millisecond representations
+        // of `NaN` are not equivalent.
+        return +a == +b;
+      // RegExps are compared by their source patterns and flags.
+      case '[object RegExp]':
+        return a.source == b.source &&
+               a.global == b.global &&
+               a.multiline == b.multiline &&
+               a.ignoreCase == b.ignoreCase;
+    }
+    if (typeof a != 'object' || typeof b != 'object') return false;
+    // Assume equality for cyclic structures. The algorithm for detecting cyclic
+    // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
+    var length = aStack.length;
+    while (length--) {
+      // Linear search. Performance is inversely proportional to the number of
+      // unique nested structures.
+      if (aStack[length] == a) return bStack[length] == b;
+    }
+    // Add the first object to the stack of traversed objects.
+    aStack.push(a);
+    bStack.push(b);
+    var size = 0, result = true;
+    // Recursively compare objects and arrays.
+    if (className == '[object Array]') {
+      // Compare array lengths to determine if a deep comparison is necessary.
+      size = a.length;
+      result = size == b.length;
+      if (result) {
+        // Deep compare the contents, ignoring non-numeric properties.
+        while (size--) {
+          if (!(result = eq(a[size], b[size], aStack, bStack))) break;
+        }
+      }
+    } else {
+      // Objects with different constructors are not equivalent, but `Object`s
+      // from different frames are.
+      var aCtor = a.constructor, bCtor = b.constructor;
+      if (aCtor !== bCtor && !(_.isFunction(aCtor) && (aCtor instanceof aCtor) &&
+                               _.isFunction(bCtor) && (bCtor instanceof bCtor))) {
+        return false;
+      }
+      // Deep compare objects.
+      for (var key in a) {
+        if (_.has(a, key)) {
+          // Count the expected number of properties.
+          size++;
+          // Deep compare each member.
+          if (!(result = _.has(b, key) && eq(a[key], b[key], aStack, bStack))) break;
+        }
+      }
+      // Ensure that both objects contain the same number of properties.
+      if (result) {
+        for (key in b) {
+          if (_.has(b, key) && !(size--)) break;
+        }
+        result = !size;
+      }
+    }
+    // Remove the first object from the stack of traversed objects.
+    aStack.pop();
+    bStack.pop();
+    return result;
+  };
+
+  // Perform a deep comparison to check if two objects are equal.
+  _.isEqual = function(a, b) {
+    return eq(a, b, [], []);
+  };
+
+  // Is a given array, string, or object empty?
+  // An "empty" object has no enumerable own-properties.
+  _.isEmpty = function(obj) {
+    if (obj == null) return true;
+    if (_.isArray(obj) || _.isString(obj)) return obj.length === 0;
+    for (var key in obj) if (_.has(obj, key)) return false;
+    return true;
+  };
+
+  // Is a given value a DOM element?
+  _.isElement = function(obj) {
+    return !!(obj && obj.nodeType === 1);
+  };
+
+  // Is a given value an array?
+  // Delegates to ECMA5's native Array.isArray
+  _.isArray = nativeIsArray || function(obj) {
+    return toString.call(obj) == '[object Array]';
+  };
+
+  // Is a given variable an object?
+  _.isObject = function(obj) {
+    return obj === Object(obj);
+  };
+
+  // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp.
+  each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp'], function(name) {
+    _['is' + name] = function(obj) {
+      return toString.call(obj) == '[object ' + name + ']';
+    };
+  });
+
+  // Define a fallback version of the method in browsers (ahem, IE), where
+  // there isn't any inspectable "Arguments" type.
+  if (!_.isArguments(arguments)) {
+    _.isArguments = function(obj) {
+      return !!(obj && _.has(obj, 'callee'));
+    };
+  }
+
+  // Optimize `isFunction` if appropriate.
+  if (typeof (/./) !== 'function') {
+    _.isFunction = function(obj) {
+      return typeof obj === 'function';
+    };
+  }
+
+  // Is a given object a finite number?
+  _.isFinite = function(obj) {
+    return isFinite(obj) && !isNaN(parseFloat(obj));
+  };
+
+  // Is the given value `NaN`? (NaN is the only number which does not equal itself).
+  _.isNaN = function(obj) {
+    return _.isNumber(obj) && obj != +obj;
+  };
+
+  // Is a given value a boolean?
+  _.isBoolean = function(obj) {
+    return obj === true || obj === false || toString.call(obj) == '[object Boolean]';
+  };
+
+  // Is a given value equal to null?
+  _.isNull = function(obj) {
+    return obj === null;
+  };
+
+  // Is a given variable undefined?
+  _.isUndefined = function(obj) {
+    return obj === void 0;
+  };
+
+  // Shortcut function for checking if an object has a given property directly
+  // on itself (in other words, not on a prototype).
+  _.has = function(obj, key) {
+    return hasOwnProperty.call(obj, key);
+  };
+
+  // Utility Functions
+  // -----------------
+
+  // Run Underscore.js in *noConflict* mode, returning the `_` variable to its
+  // previous owner. Returns a reference to the Underscore object.
+  _.noConflict = function() {
+    root._ = previousUnderscore;
+    return this;
+  };
+
+  // Keep the identity function around for default iterators.
+  _.identity = function(value) {
+    return value;
+  };
+
+  // Run a function **n** times.
+  _.times = function(n, iterator, context) {
+    var accum = Array(n);
+    for (var i = 0; i < n; i++) accum[i] = iterator.call(context, i);
+    return accum;
+  };
+
+  // Return a random integer between min and max (inclusive).
+  _.random = function(min, max) {
+    if (max == null) {
+      max = min;
+      min = 0;
+    }
+    return min + Math.floor(Math.random() * (max - min + 1));
+  };
+
+  // List of HTML entities for escaping.
+  var entityMap = {
+    escape: {
+      '&': '&amp;',
+      '<': '&lt;',
+      '>': '&gt;',
+      '"': '&quot;',
+      "'": '&#x27;',
+      '/': '&#x2F;'
+    }
+  };
+  entityMap.unescape = _.invert(entityMap.escape);
+
+  // Regexes containing the keys and values listed immediately above.
+  var entityRegexes = {
+    escape:   new RegExp('[' + _.keys(entityMap.escape).join('') + ']', 'g'),
+    unescape: new RegExp('(' + _.keys(entityMap.unescape).join('|') + ')', 'g')
+  };
+
+  // Functions for escaping and unescaping strings to/from HTML interpolation.
+  _.each(['escape', 'unescape'], function(method) {
+    _[method] = function(string) {
+      if (string == null) return '';
+      return ('' + string).replace(entityRegexes[method], function(match) {
+        return entityMap[method][match];
+      });
+    };
+  });
+
+  // If the value of the named property is a function then invoke it;
+  // otherwise, return it.
+  _.result = function(object, property) {
+    if (object == null) return null;
+    var value = object[property];
+    return _.isFunction(value) ? value.call(object) : value;
+  };
+
+  // Add your own custom functions to the Underscore object.
+  _.mixin = function(obj) {
+    each(_.functions(obj), function(name){
+      var func = _[name] = obj[name];
+      _.prototype[name] = function() {
+        var args = [this._wrapped];
+        push.apply(args, arguments);
+        return result.call(this, func.apply(_, args));
+      };
+    });
+  };
+
+  // Generate a unique integer id (unique within the entire client session).
+  // Useful for temporary DOM ids.
+  var idCounter = 0;
+  _.uniqueId = function(prefix) {
+    var id = ++idCounter + '';
+    return prefix ? prefix + id : id;
+  };
+
+  // By default, Underscore uses ERB-style template delimiters, change the
+  // following template settings to use alternative delimiters.
+  _.templateSettings = {
+    evaluate    : /<%([\s\S]+?)%>/g,
+    interpolate : /<%=([\s\S]+?)%>/g,
+    escape      : /<%-([\s\S]+?)%>/g
+  };
+
+  // When customizing `templateSettings`, if you don't want to define an
+  // interpolation, evaluation or escaping regex, we need one that is
+  // guaranteed not to match.
+  var noMatch = /(.)^/;
+
+  // Certain characters need to be escaped so that they can be put into a
+  // string literal.
+  var escapes = {
+    "'":      "'",
+    '\\':     '\\',
+    '\r':     'r',
+    '\n':     'n',
+    '\t':     't',
+    '\u2028': 'u2028',
+    '\u2029': 'u2029'
+  };
+
+  var escaper = /\\|'|\r|\n|\t|\u2028|\u2029/g;
+
+  // JavaScript micro-templating, similar to John Resig's implementation.
+  // Underscore templating handles arbitrary delimiters, preserves whitespace,
+  // and correctly escapes quotes within interpolated code.
+  _.template = function(text, data, settings) {
+    var render;
+    settings = _.defaults({}, settings, _.templateSettings);
+
+    // Combine delimiters into one regular expression via alternation.
+    var matcher = new RegExp([
+      (settings.escape || noMatch).source,
+      (settings.interpolate || noMatch).source,
+      (settings.evaluate || noMatch).source
+    ].join('|') + '|$', 'g');
+
+    // Compile the template source, escaping string literals appropriately.
+    var index = 0;
+    var source = "__p+='";
+    text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {
+      source += text.slice(index, offset)
+        .replace(escaper, function(match) { return '\\' + escapes[match]; });
+
+      if (escape) {
+        source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'";
+      }
+      if (interpolate) {
+        source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'";
+      }
+      if (evaluate) {
+        source += "';\n" + evaluate + "\n__p+='";
+      }
+      index = offset + match.length;
+      return match;
+    });
+    source += "';\n";
+
+    // If a variable is not specified, place data values in local scope.
+    if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n';
+
+    source = "var __t,__p='',__j=Array.prototype.join," +
+      "print=function(){__p+=__j.call(arguments,'');};\n" +
+      source + "return __p;\n";
+
+    try {
+      render = new Function(settings.variable || 'obj', '_', source);
+    } catch (e) {
+      e.source = source;
+      throw e;
+    }
+
+    if (data) return render(data, _);
+    var template = function(data) {
+      return render.call(this, data, _);
+    };
+
+    // Provide the compiled function source as a convenience for precompilation.
+    template.source = 'function(' + (settings.variable || 'obj') + '){\n' + source + '}';
+
+    return template;
+  };
+
+  // Add a "chain" function, which will delegate to the wrapper.
+  _.chain = function(obj) {
+    return _(obj).chain();
+  };
+
+  // OOP
+  // ---------------
+  // If Underscore is called as a function, it returns a wrapped object that
+  // can be used OO-style. This wrapper holds altered versions of all the
+  // underscore functions. Wrapped objects may be chained.
+
+  // Helper function to continue chaining intermediate results.
+  var result = function(obj) {
+    return this._chain ? _(obj).chain() : obj;
+  };
+
+  // Add all of the Underscore functions to the wrapper object.
+  _.mixin(_);
+
+  // Add all mutator Array functions to the wrapper.
+  each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
+    var method = ArrayProto[name];
+    _.prototype[name] = function() {
+      var obj = this._wrapped;
+      method.apply(obj, arguments);
+      if ((name == 'shift' || name == 'splice') && obj.length === 0) delete obj[0];
+      return result.call(this, obj);
+    };
+  });
+
+  // Add all accessor Array functions to the wrapper.
+  each(['concat', 'join', 'slice'], function(name) {
+    var method = ArrayProto[name];
+    _.prototype[name] = function() {
+      return result.call(this, method.apply(this._wrapped, arguments));
+    };
+  });
+
+  _.extend(_.prototype, {
+
+    // Start chaining a wrapped Underscore object.
+    chain: function() {
+      this._chain = true;
+      return this;
+    },
+
+    // Extracts the result from a wrapped and chained object.
+    value: function() {
+      return this._wrapped;
+    }
+
+  });
+
+}).call(this);
diff --git a/doc/sphinx/_build/html/_static/up-pressed.png b/doc/sphinx/_build/html/_static/up-pressed.png
new file mode 100644 (file)
index 0000000..8bd587a
Binary files /dev/null and b/doc/sphinx/_build/html/_static/up-pressed.png differ
diff --git a/doc/sphinx/_build/html/_static/up.png b/doc/sphinx/_build/html/_static/up.png
new file mode 100644 (file)
index 0000000..b946256
Binary files /dev/null and b/doc/sphinx/_build/html/_static/up.png differ
diff --git a/doc/sphinx/_build/html/_static/websupport.js b/doc/sphinx/_build/html/_static/websupport.js
new file mode 100644 (file)
index 0000000..71c0a13
--- /dev/null
@@ -0,0 +1,808 @@
+/*
+ * websupport.js
+ * ~~~~~~~~~~~~~
+ *
+ * sphinx.websupport utilties for all documentation.
+ *
+ * :copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+(function($) {
+  $.fn.autogrow = function() {
+    return this.each(function() {
+    var textarea = this;
+
+    $.fn.autogrow.resize(textarea);
+
+    $(textarea)
+      .focus(function() {
+        textarea.interval = setInterval(function() {
+          $.fn.autogrow.resize(textarea);
+        }, 500);
+      })
+      .blur(function() {
+        clearInterval(textarea.interval);
+      });
+    });
+  };
+
+  $.fn.autogrow.resize = function(textarea) {
+    var lineHeight = parseInt($(textarea).css('line-height'), 10);
+    var lines = textarea.value.split('\n');
+    var columns = textarea.cols;
+    var lineCount = 0;
+    $.each(lines, function() {
+      lineCount += Math.ceil(this.length / columns) || 1;
+    });
+    var height = lineHeight * (lineCount + 1);
+    $(textarea).css('height', height);
+  };
+})(jQuery);
+
+(function($) {
+  var comp, by;
+
+  function init() {
+    initEvents();
+    initComparator();
+  }
+
+  function initEvents() {
+    $('a.comment-close').live("click", function(event) {
+      event.preventDefault();
+      hide($(this).attr('id').substring(2));
+    });
+    $('a.vote').live("click", function(event) {
+      event.preventDefault();
+      handleVote($(this));
+    });
+    $('a.reply').live("click", function(event) {
+      event.preventDefault();
+      openReply($(this).attr('id').substring(2));
+    });
+    $('a.close-reply').live("click", function(event) {
+      event.preventDefault();
+      closeReply($(this).attr('id').substring(2));
+    });
+    $('a.sort-option').live("click", function(event) {
+      event.preventDefault();
+      handleReSort($(this));
+    });
+    $('a.show-proposal').live("click", function(event) {
+      event.preventDefault();
+      showProposal($(this).attr('id').substring(2));
+    });
+    $('a.hide-proposal').live("click", function(event) {
+      event.preventDefault();
+      hideProposal($(this).attr('id').substring(2));
+    });
+    $('a.show-propose-change').live("click", function(event) {
+      event.preventDefault();
+      showProposeChange($(this).attr('id').substring(2));
+    });
+    $('a.hide-propose-change').live("click", function(event) {
+      event.preventDefault();
+      hideProposeChange($(this).attr('id').substring(2));
+    });
+    $('a.accept-comment').live("click", function(event) {
+      event.preventDefault();
+      acceptComment($(this).attr('id').substring(2));
+    });
+    $('a.delete-comment').live("click", function(event) {
+      event.preventDefault();
+      deleteComment($(this).attr('id').substring(2));
+    });
+    $('a.comment-markup').live("click", function(event) {
+      event.preventDefault();
+      toggleCommentMarkupBox($(this).attr('id').substring(2));
+    });
+  }
+
+  /**
+   * Set comp, which is a comparator function used for sorting and
+   * inserting comments into the list.
+   */
+  function setComparator() {
+    // If the first three letters are "asc", sort in ascending order
+    // and remove the prefix.
+    if (by.substring(0,3) == 'asc') {
+      var i = by.substring(3);
+      comp = function(a, b) { return a[i] - b[i]; };
+    } else {
+      // Otherwise sort in descending order.
+      comp = function(a, b) { return b[by] - a[by]; };
+    }
+
+    // Reset link styles and format the selected sort option.
+    $('a.sel').attr('href', '#').removeClass('sel');
+    $('a.by' + by).removeAttr('href').addClass('sel');
+  }
+
+  /**
+   * Create a comp function. If the user has preferences stored in
+   * the sortBy cookie, use those, otherwise use the default.
+   */
+  function initComparator() {
+    by = 'rating'; // Default to sort by rating.
+    // If the sortBy cookie is set, use that instead.
+    if (document.cookie.length > 0) {
+      var start = document.cookie.indexOf('sortBy=');
+      if (start != -1) {
+        start = start + 7;
+        var end = document.cookie.indexOf(";", start);
+        if (end == -1) {
+          end = document.cookie.length;
+          by = unescape(document.cookie.substring(start, end));
+        }
+      }
+    }
+    setComparator();
+  }
+
+  /**
+   * Show a comment div.
+   */
+  function show(id) {
+    $('#ao' + id).hide();
+    $('#ah' + id).show();
+    var context = $.extend({id: id}, opts);
+    var popup = $(renderTemplate(popupTemplate, context)).hide();
+    popup.find('textarea[name="proposal"]').hide();
+    popup.find('a.by' + by).addClass('sel');
+    var form = popup.find('#cf' + id);
+    form.submit(function(event) {
+      event.preventDefault();
+      addComment(form);
+    });
+    $('#s' + id).after(popup);
+    popup.slideDown('fast', function() {
+      getComments(id);
+    });
+  }
+
+  /**
+   * Hide a comment div.
+   */
+  function hide(id) {
+    $('#ah' + id).hide();
+    $('#ao' + id).show();
+    var div = $('#sc' + id);
+    div.slideUp('fast', function() {
+      div.remove();
+    });
+  }
+
+  /**
+   * Perform an ajax request to get comments for a node
+   * and insert the comments into the comments tree.
+   */
+  function getComments(id) {
+    $.ajax({
+     type: 'GET',
+     url: opts.getCommentsURL,
+     data: {node: id},
+     success: function(data, textStatus, request) {
+       var ul = $('#cl' + id);
+       var speed = 100;
+       $('#cf' + id)
+         .find('textarea[name="proposal"]')
+         .data('source', data.source);
+
+       if (data.comments.length === 0) {
+         ul.html('<li>No comments yet.</li>');
+         ul.data('empty', true);
+       } else {
+         // If there are comments, sort them and put them in the list.
+         var comments = sortComments(data.comments);
+         speed = data.comments.length * 100;
+         appendComments(comments, ul);
+         ul.data('empty', false);
+       }
+       $('#cn' + id).slideUp(speed + 200);
+       ul.slideDown(speed);
+     },
+     error: function(request, textStatus, error) {
+       showError('Oops, there was a problem retrieving the comments.');
+     },
+     dataType: 'json'
+    });
+  }
+
+  /**
+   * Add a comment via ajax and insert the comment into the comment tree.
+   */
+  function addComment(form) {
+    var node_id = form.find('input[name="node"]').val();
+    var parent_id = form.find('input[name="parent"]').val();
+    var text = form.find('textarea[name="comment"]').val();
+    var proposal = form.find('textarea[name="proposal"]').val();
+
+    if (text == '') {
+      showError('Please enter a comment.');
+      return;
+    }
+
+    // Disable the form that is being submitted.
+    form.find('textarea,input').attr('disabled', 'disabled');
+
+    // Send the comment to the server.
+    $.ajax({
+      type: "POST",
+      url: opts.addCommentURL,
+      dataType: 'json',
+      data: {
+        node: node_id,
+        parent: parent_id,
+        text: text,
+        proposal: proposal
+      },
+      success: function(data, textStatus, error) {
+        // Reset the form.
+        if (node_id) {
+          hideProposeChange(node_id);
+        }
+        form.find('textarea')
+          .val('')
+          .add(form.find('input'))
+          .removeAttr('disabled');
+       var ul = $('#cl' + (node_id || parent_id));
+        if (ul.data('empty')) {
+          $(ul).empty();
+          ul.data('empty', false);
+        }
+        insertComment(data.comment);
+        var ao = $('#ao' + node_id);
+        ao.find('img').attr({'src': opts.commentBrightImage});
+        if (node_id) {
+          // if this was a "root" comment, remove the commenting box
+          // (the user can get it back by reopening the comment popup)
+          $('#ca' + node_id).slideUp();
+        }
+      },
+      error: function(request, textStatus, error) {
+        form.find('textarea,input').removeAttr('disabled');
+        showError('Oops, there was a problem adding the comment.');
+      }
+    });
+  }
+
+  /**
+   * Recursively append comments to the main comment list and children
+   * lists, creating the comment tree.
+   */
+  function appendComments(comments, ul) {
+    $.each(comments, function() {
+      var div = createCommentDiv(this);
+      ul.append($(document.createElement('li')).html(div));
+      appendComments(this.children, div.find('ul.comment-children'));
+      // To avoid stagnating data, don't store the comments children in data.
+      this.children = null;
+      div.data('comment', this);
+    });
+  }
+
+  /**
+   * After adding a new comment, it must be inserted in the correct
+   * location in the comment tree.
+   */
+  function insertComment(comment) {
+    var div = createCommentDiv(comment);
+
+    // To avoid stagnating data, don't store the comments children in data.
+    comment.children = null;
+    div.data('comment', comment);
+
+    var ul = $('#cl' + (comment.node || comment.parent));
+    var siblings = getChildren(ul);
+
+    var li = $(document.createElement('li'));
+    li.hide();
+
+    // Determine where in the parents children list to insert this comment.
+    for(i=0; i < siblings.length; i++) {
+      if (comp(comment, siblings[i]) <= 0) {
+        $('#cd' + siblings[i].id)
+          .parent()
+          .before(li.html(div));
+        li.slideDown('fast');
+        return;
+      }
+    }
+
+    // If we get here, this comment rates lower than all the others,
+    // or it is the only comment in the list.
+    ul.append(li.html(div));
+    li.slideDown('fast');
+  }
+
+  function acceptComment(id) {
+    $.ajax({
+      type: 'POST',
+      url: opts.acceptCommentURL,
+      data: {id: id},
+      success: function(data, textStatus, request) {
+        $('#cm' + id).fadeOut('fast');
+        $('#cd' + id).removeClass('moderate');
+      },
+      error: function(request, textStatus, error) {
+        showError('Oops, there was a problem accepting the comment.');
+      }
+    });
+  }
+
+  function deleteComment(id) {
+    $.ajax({
+      type: 'POST',
+      url: opts.deleteCommentURL,
+      data: {id: id},
+      success: function(data, textStatus, request) {
+        var div = $('#cd' + id);
+        if (data == 'delete') {
+          // Moderator mode: remove the comment and all children immediately
+          div.slideUp('fast', function() {
+            div.remove();
+          });
+          return;
+        }
+        // User mode: only mark the comment as deleted
+        div
+          .find('span.user-id:first')
+          .text('[deleted]').end()
+          .find('div.comment-text:first')
+          .text('[deleted]').end()
+          .find('#cm' + id + ', #dc' + id + ', #ac' + id + ', #rc' + id +
+                ', #sp' + id + ', #hp' + id + ', #cr' + id + ', #rl' + id)
+          .remove();
+        var comment = div.data('comment');
+        comment.username = '[deleted]';
+        comment.text = '[deleted]';
+        div.data('comment', comment);
+      },
+      error: function(request, textStatus, error) {
+        showError('Oops, there was a problem deleting the comment.');
+      }
+    });
+  }
+
+  function showProposal(id) {
+    $('#sp' + id).hide();
+    $('#hp' + id).show();
+    $('#pr' + id).slideDown('fast');
+  }
+
+  function hideProposal(id) {
+    $('#hp' + id).hide();
+    $('#sp' + id).show();
+    $('#pr' + id).slideUp('fast');
+  }
+
+  function showProposeChange(id) {
+    $('#pc' + id).hide();
+    $('#hc' + id).show();
+    var textarea = $('#pt' + id);
+    textarea.val(textarea.data('source'));
+    $.fn.autogrow.resize(textarea[0]);
+    textarea.slideDown('fast');
+  }
+
+  function hideProposeChange(id) {
+    $('#hc' + id).hide();
+    $('#pc' + id).show();
+    var textarea = $('#pt' + id);
+    textarea.val('').removeAttr('disabled');
+    textarea.slideUp('fast');
+  }
+
+  function toggleCommentMarkupBox(id) {
+    $('#mb' + id).toggle();
+  }
+
+  /** Handle when the user clicks on a sort by link. */
+  function handleReSort(link) {
+    var classes = link.attr('class').split(/\s+/);
+    for (var i=0; i<classes.length; i++) {
+      if (classes[i] != 'sort-option') {
+       by = classes[i].substring(2);
+      }
+    }
+    setComparator();
+    // Save/update the sortBy cookie.
+    var expiration = new Date();
+    expiration.setDate(expiration.getDate() + 365);
+    document.cookie= 'sortBy=' + escape(by) +
+                     ';expires=' + expiration.toUTCString();
+    $('ul.comment-ul').each(function(index, ul) {
+      var comments = getChildren($(ul), true);
+      comments = sortComments(comments);
+      appendComments(comments, $(ul).empty());
+    });
+  }
+
+  /**
+   * Function to process a vote when a user clicks an arrow.
+   */
+  function handleVote(link) {
+    if (!opts.voting) {
+      showError("You'll need to login to vote.");
+      return;
+    }
+
+    var id = link.attr('id');
+    if (!id) {
+      // Didn't click on one of the voting arrows.
+      return;
+    }
+    // If it is an unvote, the new vote value is 0,
+    // Otherwise it's 1 for an upvote, or -1 for a downvote.
+    var value = 0;
+    if (id.charAt(1) != 'u') {
+      value = id.charAt(0) == 'u' ? 1 : -1;
+    }
+    // The data to be sent to the server.
+    var d = {
+      comment_id: id.substring(2),
+      value: value
+    };
+
+    // Swap the vote and unvote links.
+    link.hide();
+    $('#' + id.charAt(0) + (id.charAt(1) == 'u' ? 'v' : 'u') + d.comment_id)
+      .show();
+
+    // The div the comment is displayed in.
+    var div = $('div#cd' + d.comment_id);
+    var data = div.data('comment');
+
+    // If this is not an unvote, and the other vote arrow has
+    // already been pressed, unpress it.
+    if ((d.value !== 0) && (data.vote === d.value * -1)) {
+      $('#' + (d.value == 1 ? 'd' : 'u') + 'u' + d.comment_id).hide();
+      $('#' + (d.value == 1 ? 'd' : 'u') + 'v' + d.comment_id).show();
+    }
+
+    // Update the comments rating in the local data.
+    data.rating += (data.vote === 0) ? d.value : (d.value - data.vote);
+    data.vote = d.value;
+    div.data('comment', data);
+
+    // Change the rating text.
+    div.find('.rating:first')
+      .text(data.rating + ' point' + (data.rating == 1 ? '' : 's'));
+
+    // Send the vote information to the server.
+    $.ajax({
+      type: "POST",
+      url: opts.processVoteURL,
+      data: d,
+      error: function(request, textStatus, error) {
+        showError('Oops, there was a problem casting that vote.');
+      }
+    });
+  }
+
+  /**
+   * Open a reply form used to reply to an existing comment.
+   */
+  function openReply(id) {
+    // Swap out the reply link for the hide link
+    $('#rl' + id).hide();
+    $('#cr' + id).show();
+
+    // Add the reply li to the children ul.
+    var div = $(renderTemplate(replyTemplate, {id: id})).hide();
+    $('#cl' + id)
+      .prepend(div)
+      // Setup the submit handler for the reply form.
+      .find('#rf' + id)
+      .submit(function(event) {
+        event.preventDefault();
+        addComment($('#rf' + id));
+        closeReply(id);
+      })
+      .find('input[type=button]')
+      .click(function() {
+        closeReply(id);
+      });
+    div.slideDown('fast', function() {
+      $('#rf' + id).find('textarea').focus();
+    });
+  }
+
+  /**
+   * Close the reply form opened with openReply.
+   */
+  function closeReply(id) {
+    // Remove the reply div from the DOM.
+    $('#rd' + id).slideUp('fast', function() {
+      $(this).remove();
+    });
+
+    // Swap out the hide link for the reply link
+    $('#cr' + id).hide();
+    $('#rl' + id).show();
+  }
+
+  /**
+   * Recursively sort a tree of comments using the comp comparator.
+   */
+  function sortComments(comments) {
+    comments.sort(comp);
+    $.each(comments, function() {
+      this.children = sortComments(this.children);
+    });
+    return comments;
+  }
+
+  /**
+   * Get the children comments from a ul. If recursive is true,
+   * recursively include childrens' children.
+   */
+  function getChildren(ul, recursive) {
+    var children = [];
+    ul.children().children("[id^='cd']")
+      .each(function() {
+        var comment = $(this).data('comment');
+        if (recursive)
+          comment.children = getChildren($(this).find('#cl' + comment.id), true);
+        children.push(comment);
+      });
+    return children;
+  }
+
+  /** Create a div to display a comment in. */
+  function createCommentDiv(comment) {
+    if (!comment.displayed && !opts.moderator) {
+      return $('<div class="moderate">Thank you!  Your comment will show up '
+               + 'once it is has been approved by a moderator.</div>');
+    }
+    // Prettify the comment rating.
+    comment.pretty_rating = comment.rating + ' point' +
+      (comment.rating == 1 ? '' : 's');
+    // Make a class (for displaying not yet moderated comments differently)
+    comment.css_class = comment.displayed ? '' : ' moderate';
+    // Create a div for this comment.
+    var context = $.extend({}, opts, comment);
+    var div = $(renderTemplate(commentTemplate, context));
+
+    // If the user has voted on this comment, highlight the correct arrow.
+    if (comment.vote) {
+      var direction = (comment.vote == 1) ? 'u' : 'd';
+      div.find('#' + direction + 'v' + comment.id).hide();
+      div.find('#' + direction + 'u' + comment.id).show();
+    }
+
+    if (opts.moderator || comment.text != '[deleted]') {
+      div.find('a.reply').show();
+      if (comment.proposal_diff)
+        div.find('#sp' + comment.id).show();
+      if (opts.moderator && !comment.displayed)
+        div.find('#cm' + comment.id).show();
+      if (opts.moderator || (opts.username == comment.username))
+        div.find('#dc' + comment.id).show();
+    }
+    return div;
+  }
+
+  /**
+   * A simple template renderer. Placeholders such as <%id%> are replaced
+   * by context['id'] with items being escaped. Placeholders such as <#id#>
+   * are not escaped.
+   */
+  function renderTemplate(template, context) {
+    var esc = $(document.createElement('div'));
+
+    function handle(ph, escape) {
+      var cur = context;
+      $.each(ph.split('.'), function() {
+        cur = cur[this];
+      });
+      return escape ? esc.text(cur || "").html() : cur;
+    }
+
+    return template.replace(/<([%#])([\w\.]*)\1>/g, function() {
+      return handle(arguments[2], arguments[1] == '%' ? true : false);
+    });
+  }
+
+  /** Flash an error message briefly. */
+  function showError(message) {
+    $(document.createElement('div')).attr({'class': 'popup-error'})
+      .append($(document.createElement('div'))
+               .attr({'class': 'error-message'}).text(message))
+      .appendTo('body')
+      .fadeIn("slow")
+      .delay(2000)
+      .fadeOut("slow");
+  }
+
+  /** Add a link the user uses to open the comments popup. */
+  $.fn.comment = function() {
+    return this.each(function() {
+      var id = $(this).attr('id').substring(1);
+      var count = COMMENT_METADATA[id];
+      var title = count + ' comment' + (count == 1 ? '' : 's');
+      var image = count > 0 ? opts.commentBrightImage : opts.commentImage;
+      var addcls = count == 0 ? ' nocomment' : '';
+      $(this)
+        .append(
+          $(document.createElement('a')).attr({
+            href: '#',
+            'class': 'sphinx-comment-open' + addcls,
+            id: 'ao' + id
+          })
+            .append($(document.createElement('img')).attr({
+              src: image,
+              alt: 'comment',
+              title: title
+            }))
+            .click(function(event) {
+              event.preventDefault();
+              show($(this).attr('id').substring(2));
+            })
+        )
+        .append(
+          $(document.createElement('a')).attr({
+            href: '#',
+            'class': 'sphinx-comment-close hidden',
+            id: 'ah' + id
+          })
+            .append($(document.createElement('img')).attr({
+              src: opts.closeCommentImage,
+              alt: 'close',
+              title: 'close'
+            }))
+            .click(function(event) {
+              event.preventDefault();
+              hide($(this).attr('id').substring(2));
+            })
+        );
+    });
+  };
+
+  var opts = {
+    processVoteURL: '/_process_vote',
+    addCommentURL: '/_add_comment',
+    getCommentsURL: '/_get_comments',
+    acceptCommentURL: '/_accept_comment',
+    deleteCommentURL: '/_delete_comment',
+    commentImage: '/static/_static/comment.png',
+    closeCommentImage: '/static/_static/comment-close.png',
+    loadingImage: '/static/_static/ajax-loader.gif',
+    commentBrightImage: '/static/_static/comment-bright.png',
+    upArrow: '/static/_static/up.png',
+    downArrow: '/static/_static/down.png',
+    upArrowPressed: '/static/_static/up-pressed.png',
+    downArrowPressed: '/static/_static/down-pressed.png',
+    voting: false,
+    moderator: false
+  };
+
+  if (typeof COMMENT_OPTIONS != "undefined") {
+    opts = jQuery.extend(opts, COMMENT_OPTIONS);
+  }
+
+  var popupTemplate = '\
+    <div class="sphinx-comments" id="sc<%id%>">\
+      <p class="sort-options">\
+        Sort by:\
+        <a href="#" class="sort-option byrating">best rated</a>\
+        <a href="#" class="sort-option byascage">newest</a>\
+        <a href="#" class="sort-option byage">oldest</a>\
+      </p>\
+      <div class="comment-header">Comments</div>\
+      <div class="comment-loading" id="cn<%id%>">\
+        loading comments... <img src="<%loadingImage%>" alt="" /></div>\
+      <ul id="cl<%id%>" class="comment-ul"></ul>\
+      <div id="ca<%id%>">\
+      <p class="add-a-comment">Add a comment\
+        (<a href="#" class="comment-markup" id="ab<%id%>">markup</a>):</p>\
+      <div class="comment-markup-box" id="mb<%id%>">\
+        reStructured text markup: <i>*emph*</i>, <b>**strong**</b>, \
+        <tt>``code``</tt>, \
+        code blocks: <tt>::</tt> and an indented block after blank line</div>\
+      <form method="post" id="cf<%id%>" class="comment-form" action="">\
+        <textarea name="comment" cols="80"></textarea>\
+        <p class="propose-button">\
+          <a href="#" id="pc<%id%>" class="show-propose-change">\
+            Propose a change &#9657;\
+          </a>\
+          <a href="#" id="hc<%id%>" class="hide-propose-change">\
+            Propose a change &#9663;\
+          </a>\
+        </p>\
+        <textarea name="proposal" id="pt<%id%>" cols="80"\
+                  spellcheck="false"></textarea>\
+        <input type="submit" value="Add comment" />\
+        <input type="hidden" name="node" value="<%id%>" />\
+        <input type="hidden" name="parent" value="" />\
+      </form>\
+      </div>\
+    </div>';
+
+  var commentTemplate = '\
+    <div id="cd<%id%>" class="sphinx-comment<%css_class%>">\
+      <div class="vote">\
+        <div class="arrow">\
+          <a href="#" id="uv<%id%>" class="vote" title="vote up">\
+            <img src="<%upArrow%>" />\
+          </a>\
+          <a href="#" id="uu<%id%>" class="un vote" title="vote up">\
+            <img src="<%upArrowPressed%>" />\
+          </a>\
+        </div>\
+        <div class="arrow">\
+          <a href="#" id="dv<%id%>" class="vote" title="vote down">\
+            <img src="<%downArrow%>" id="da<%id%>" />\
+          </a>\
+          <a href="#" id="du<%id%>" class="un vote" title="vote down">\
+            <img src="<%downArrowPressed%>" />\
+          </a>\
+        </div>\
+      </div>\
+      <div class="comment-content">\
+        <p class="tagline comment">\
+          <span class="user-id"><%username%></span>\
+          <span class="rating"><%pretty_rating%></span>\
+          <span class="delta"><%time.delta%></span>\
+        </p>\
+        <div class="comment-text comment"><#text#></div>\
+        <p class="comment-opts comment">\
+          <a href="#" class="reply hidden" id="rl<%id%>">reply &#9657;</a>\
+          <a href="#" class="close-reply" id="cr<%id%>">reply &#9663;</a>\
+          <a href="#" id="sp<%id%>" class="show-proposal">proposal &#9657;</a>\
+          <a href="#" id="hp<%id%>" class="hide-proposal">proposal &#9663;</a>\
+          <a href="#" id="dc<%id%>" class="delete-comment hidden">delete</a>\
+          <span id="cm<%id%>" class="moderation hidden">\
+            <a href="#" id="ac<%id%>" class="accept-comment">accept</a>\
+          </span>\
+        </p>\
+        <pre class="proposal" id="pr<%id%>">\
+<#proposal_diff#>\
+        </pre>\
+          <ul class="comment-children" id="cl<%id%>"></ul>\
+        </div>\
+        <div class="clearleft"></div>\
+      </div>\
+    </div>';
+
+  var replyTemplate = '\
+    <li>\
+      <div class="reply-div" id="rd<%id%>">\
+        <form id="rf<%id%>">\
+          <textarea name="comment" cols="80"></textarea>\
+          <input type="submit" value="Add reply" />\
+          <input type="button" value="Cancel" />\
+          <input type="hidden" name="parent" value="<%id%>" />\
+          <input type="hidden" name="node" value="" />\
+        </form>\
+      </div>\
+    </li>';
+
+  $(document).ready(function() {
+    init();
+  });
+})(jQuery);
+
+$(document).ready(function() {
+  // add comment anchors for all paragraphs that are commentable
+  $('.sphinx-has-comment').comment();
+
+  // highlight search words in search results
+  $("div.context").each(function() {
+    var params = $.getQueryParameters();
+    var terms = (params.q) ? params.q[0].split(/\s+/) : [];
+    var result = $(this);
+    $.each(terms, function() {
+      result.highlightText(this.toLowerCase(), 'highlighted');
+    });
+  });
+
+  // directly open comment window if requested
+  var anchor = document.location.hash;
+  if (anchor.substring(0, 9) == '#comment-') {
+    $('#ao' + anchor.substring(9)).click();
+    document.location.hash = '#s' + anchor.substring(9);
+  }
+});
diff --git a/doc/sphinx/_build/html/genindex.html b/doc/sphinx/_build/html/genindex.html
new file mode 100644 (file)
index 0000000..0cb5e02
--- /dev/null
@@ -0,0 +1,7100 @@
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>Index &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    './',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="_static/jquery.js"></script>
+    <script type="text/javascript" src="_static/underscore.js"></script>
+    <script type="text/javascript" src="_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="#" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+
+   
+
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+
+<h1 id="index">Index</h1>
+
+<div class="genindex-jumpbox">
+ <a href="#A"><strong>A</strong></a>
+ | <a href="#B"><strong>B</strong></a>
+ | <a href="#C"><strong>C</strong></a>
+ | <a href="#D"><strong>D</strong></a>
+ | <a href="#E"><strong>E</strong></a>
+ | <a href="#F"><strong>F</strong></a>
+ | <a href="#G"><strong>G</strong></a>
+ | <a href="#H"><strong>H</strong></a>
+ | <a href="#I"><strong>I</strong></a>
+ | <a href="#J"><strong>J</strong></a>
+ | <a href="#K"><strong>K</strong></a>
+ | <a href="#L"><strong>L</strong></a>
+ | <a href="#M"><strong>M</strong></a>
+ | <a href="#N"><strong>N</strong></a>
+ | <a href="#O"><strong>O</strong></a>
+ | <a href="#P"><strong>P</strong></a>
+ | <a href="#Q"><strong>Q</strong></a>
+ | <a href="#R"><strong>R</strong></a>
+ | <a href="#S"><strong>S</strong></a>
+ | <a href="#T"><strong>T</strong></a>
+ | <a href="#U"><strong>U</strong></a>
+ | <a href="#V"><strong>V</strong></a>
+ | <a href="#W"><strong>W</strong></a>
+ | <a href="#X"><strong>X</strong></a>
+</div>
+<h2 id="A">A</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.abort">abort (nepi.execution.ec.ExperimentController attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.FailureManager.abort">(nepi.execution.ec.FailureManager attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.netgraph.NetGraph.add_edge">add_edge() (nepi.util.netgraph.NetGraph method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.netgraph.NetGraph.add_node">add_node() (nepi.util.netgraph.NetGraph method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.manifoldapi.MANIFOLDAPI.add_resource_to_slice">add_resource_to_slice() (nepi.util.manifoldapi.MANIFOLDAPI method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.util.html#nepi.util.sfaapi.SFAAPI.add_resource_to_slice">(nepi.util.sfaapi.SFAAPI method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.sfaapi.SFAAPI.add_resource_to_slice_batch">add_resource_to_slice_batch() (nepi.util.sfaapi.SFAAPI method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.application.OMFApplication.add_set_hook">add_set_hook() (nepi.resources.omf.application.OMFApplication method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.interface.LinuxInterface.add_set_hooks">add_set_hooks() (nepi.resources.linux.interface.LinuxInterface method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.add_slice_nodes">add_slice_nodes() (nepi.resources.planetlab.plcapi.PLCAPI method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.netgraph.TopologyType.ADHOC">ADHOC (nepi.util.netgraph.TopologyType attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.messages_5_4.MessageHandler.alias_function">alias_function() (nepi.resources.omf.messages_5_4.MessageHandler method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.trace.TraceAttr.ALL">ALL (nepi.execution.trace.TraceAttr attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.attribute.Attribute.allowed">allowed (nepi.execution.attribute.Attribute attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.NS3Wrapper.allowed_types">allowed_types (nepi.resources.ns3.ns3wrapper.NS3Wrapper attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf_resource.ResourceGateway.AMtoGateway">AMtoGateway (nepi.resources.omf.omf_resource.ResourceGateway attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.data.processing.ccn.html#nepi.data.processing.ccn.parser.annotate_cn_graph">annotate_cn_graph() (in module nepi.data.processing.ccn.parser)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.data.processing.ping.html#nepi.data.processing.ping.parser.annotate_cn_graph">(in module nepi.data.processing.ping.parser)</a>
+  </dt>
+
+      </dl></dd>
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.data.processing.ccn.html#nepi.data.processing.ccn.parser.annotate_cn_node">annotate_cn_node() (in module nepi.data.processing.ccn.parser)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.data.processing.ping.html#nepi.data.processing.ping.parser.annotate_cn_node">(in module nepi.data.processing.ping.parser)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.netgraph.NetGraph.annotate_edge">annotate_edge() (nepi.util.netgraph.NetGraph method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.netgraph.NetGraph.annotate_edge_net">annotate_edge_net() (nepi.util.netgraph.NetGraph method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.netgraph.NetGraph.annotate_node">annotate_node() (nepi.util.netgraph.NetGraph method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.netgraph.NetGraph.annotate_node_ip">annotate_node_ip() (nepi.util.netgraph.NetGraph method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.api">api (nepi.resources.planetlab.plcapi.PLCAPI attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.util.html#nepi.util.manifoldapi.MANIFOLDAPI.api">(nepi.util.manifoldapi.MANIFOLDAPI attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.app_home">app_home (nepi.resources.linux.application.LinuxApplication attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.app_home">app_home() (nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tunnel.LinuxTunnel.app_home">(nepi.resources.linux.tunnel.LinuxTunnel method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3node.NS3BaseNode.arp">arp (nepi.resources.ns3.ns3node.NS3BaseNode attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice.ascii_helper_uuid">ascii_helper_uuid (nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch.assign_controller">assign_controller() (nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.netgraph.NetGraph.assign_p2p_ips">assign_p2p_ips() (nepi.util.netgraph.NetGraph method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.parallel.WorkerThread.attach">attach() (nepi.util.parallel.WorkerThread method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.attribute.Attribute">Attribute (class in nepi.execution.attribute)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+<h2 id="B">B</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.environ.backticks">backticks() (in module nepi.util.environ)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.BaseOMFClient">BaseOMFClient (class in nepi.resources.omf.omf_client)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.bin_dir">bin_dir (nepi.resources.linux.node.LinuxNode attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.blacklist_host">blacklist_host() (nepi.resources.planetlab.plcapi.PLCAPI method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.sfaapi.SFAAPI.blacklist_resource">blacklist_resource() (nepi.util.sfaapi.SFAAPI method)</a>
+  </dt>
+
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.blacklisted">blacklisted() (nepi.resources.planetlab.plcapi.PLCAPI method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.util.html#nepi.util.sfaapi.SFAAPI.blacklisted">(nepi.util.sfaapi.SFAAPI method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.attribute.Types.Bool">Bool (nepi.execution.attribute.Types attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.build">build() (nepi.resources.linux.application.LinuxApplication method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.sfarspec_proc.SfaRSpecProcessing.build_sfa_rspec">build_sfa_rspec() (nepi.util.sfarspec_proc.SfaRSpecProcessing method)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+<h2 id="C">C</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3ccndceapplication.NS3BaseCCNDceApplication.ccn_client_helper_uuid">ccn_client_helper_uuid (nepi.resources.ns3.ns3ccndceapplication.NS3BaseCCNDceApplication attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3ccndceapplication.NS3BaseCCNDceApplication.ccn_client_lock">ccn_client_lock (nepi.resources.ns3.ns3ccndceapplication.NS3BaseCCNDceApplication attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.data.processing.ccn.html#nepi.data.processing.ccn.parser.ccn_consumers">ccn_consumers() (in module nepi.data.processing.ccn.parser)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.data.processing.ccn.html#nepi.data.processing.ccn.parser.ccn_producers">ccn_producers() (in module nepi.data.processing.ccn.parser)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnapplication.LinuxCCNApplication.ccnd">ccnd (nepi.resources.linux.ccn.ccnapplication.LinuxCCNApplication attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccncontent.LinuxCCNContent.ccnd">(nepi.resources.linux.ccn.ccncontent.LinuxCCNContent attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnr.LinuxCCNR.ccnd">(nepi.resources.linux.ccn.ccnr.LinuxCCNR attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.ccnd">(nepi.resources.linux.ccn.fibentry.LinuxFIBEntry attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnping.LinuxCCNPing.ccnpingserver">ccnpingserver (nepi.resources.linux.ccn.ccnping.LinuxCCNPing attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccncontent.LinuxCCNContent.ccnr">ccnr (nepi.resources.linux.ccn.ccncontent.LinuxCCNContent attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.interface.LinuxInterface.channel">channel (nepi.resources.linux.interface.LinuxInterface attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice.channel">(nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3propagationdelaymodel.NS3BasePropagationDelayModel.channel">(nepi.resources.ns3.ns3propagationdelaymodel.NS3BasePropagationDelayModel attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel.channel">(nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wifiphy.NS3BaseWifiPhy.channel">(nepi.resources.ns3.ns3wifiphy.NS3BaseWifiPhy attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.interface.OMFWifiInterface.channel">(nepi.resources.omf.interface.OMFWifiInterface attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.channel.OMFChannel.ChannelToFreq">ChannelToFreq (nepi.resources.omf.channel.OMFChannel attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.application.OMFApplication.check_deploy">check_deploy() (nepi.resources.omf.application.OMFApplication method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.interface.OMFWifiInterface.check_deploy">(nepi.resources.omf.interface.OMFWifiInterface method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.check_errors">check_errors() (nepi.resources.linux.node.LinuxNode method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf6_api.OMF6API.check_mailbox">check_mailbox() (nepi.resources.omf.omf6_api.OMF6API method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf6_parser.OMF6Parser.check_mailbox">(nepi.resources.omf.omf6_parser.OMF6Parser method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.check_mailbox">(nepi.resources.omf.omf_client.OMFClient method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.check_output">check_output() (nepi.resources.linux.node.LinuxNode method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf6_api.OMF6API.check_ready">check_ready() (nepi.resources.omf.omf6_api.OMF6API method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.application.OMFApplication.check_release">check_release() (nepi.resources.omf.application.OMFApplication method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.interface.OMFWifiInterface.check_release">(nepi.resources.omf.interface.OMFWifiInterface method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch.check_sliver_ovs">check_sliver_ovs() (nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.application.OMFApplication.check_start">check_start() (nepi.resources.omf.application.OMFApplication method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.gretunnel.LinuxGRETunnel.check_state_connection">check_state_connection() (nepi.resources.linux.gretunnel.LinuxGRETunnel method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.check_state_connection">(nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tunnel.LinuxTunnel.check_state_connection">(nepi.resources.linux.tunnel.LinuxTunnel method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.udptunnel.LinuxUdpTunnel.check_state_connection">(nepi.resources.linux.udptunnel.LinuxUdpTunnel method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.check_status">check_status() (nepi.resources.linux.tap.LinuxTap method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.check_status">(nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.clean_experiment">clean_experiment() (nepi.resources.linux.node.LinuxNode method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.clean_home">clean_home() (nepi.resources.linux.node.LinuxNode method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.clean_processes">clean_processes() (nepi.resources.linux.node.LinuxNode method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsemulation.NetNSEmulation.client">client (nepi.resources.netns.netnsemulation.NetNSEmulation attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3simulation.NS3Simulation.client">(nepi.resources.ns3.ns3simulation.NS3Simulation attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.clone_command">clone_command() (nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3server.close_socket">close_socket() (in module nepi.resources.ns3.ns3server)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.clsinit">clsinit() (in module nepi.execution.resource)</a>
+  </dt>
+
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.clsinit_copy">clsinit_copy() (in module nepi.execution.resource)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.all.html#nepi.resources.all.collector.Collector">Collector (class in nepi.resources.all.collector)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.timefuncs.compute_delay_ms">compute_delay_ms() (in module nepi.util.timefuncs)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.statfuncs.compute_mean">compute_mean() (in module nepi.util.statfuncs)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.conditions">conditions (nepi.execution.resource.ResourceManager attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.configure">configure() (nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.configure">(nepi.resources.linux.ccn.fibentry.LinuxFIBEntry method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.configure">(nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf5_api.OMF5API.configure">(nepi.resources.omf.omf5_api.OMF5API method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.messages_5_4.MessageHandler.configure_function">configure_function() (nepi.resources.omf.messages_5_4.MessageHandler method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.messages_6.MessageHandler.configure_function">(nepi.resources.omf.messages_6.MessageHandler method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.interface.OMFWifiInterface.configure_iface">configure_iface() (nepi.resources.omf.interface.OMFWifiInterface method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.interface.OMFWifiInterface.configure_ip">configure_ip() (nepi.resources.omf.interface.OMFWifiInterface method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.interface.OMFWifiInterface.configure_on_omf5">configure_on_omf5() (nepi.resources.omf.interface.OMFWifiInterface method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.interface.OMFWifiInterface.configure_on_omf6">configure_on_omf6() (nepi.resources.omf.interface.OMFWifiInterface method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsbase.NetNSBase.connected">connected (nepi.resources.netns.netnsbase.NetNSBase attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3base.NS3Base.connected">(nepi.resources.ns3.ns3base.NS3Base attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.connections">connections (nepi.execution.resource.ResourceManager attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.attribute.Flags.Construct">Construct (nepi.execution.attribute.Flags attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.copy">copy() (nepi.resources.linux.node.LinuxNode method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.ExitCode.CORRUPTFILE">CORRUPTFILE (nepi.resources.linux.node.ExitCode attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsserver.NetNSWrapperMessage.CREATE">CREATE (nepi.resources.netns.netnsserver.NetNSWrapperMessage attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3server.NS3WrapperMessage.CREATE">(nepi.resources.ns3.ns3server.NS3WrapperMessage attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceFactory.create">create() (nepi.execution.resource.ResourceFactory class method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsclient.LinuxNetNSClient.create">(nepi.resources.linux.netns.netnsclient.LinuxNetNSClient method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3client.LinuxNS3Client.create">(nepi.resources.linux.ns3.ns3client.LinuxNS3Client method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsclient.NetNSClient.create">(nepi.resources.netns.netnsclient.NetNSClient method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsemulation.NetNSEmulation.create">(nepi.resources.netns.netnsemulation.NetNSEmulation method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper.NetNSWrapper.create">(nepi.resources.netns.netnswrapper.NetNSWrapper method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3client.NS3Client.create">(nepi.resources.ns3.ns3client.NS3Client method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3simulation.NS3Simulation.create">(nepi.resources.ns3.ns3simulation.NS3Simulation method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.NS3Wrapper.create">(nepi.resources.ns3.ns3wrapper.NS3Wrapper method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.create">(nepi.resources.omf.omf_client.OMFClient method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf6_api.OMF6API.create_and_enroll_topic">create_and_enroll_topic() (nepi.resources.omf.omf6_api.OMF6API method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf_api_factory.OMFAPIFactory.create_api">create_api() (nepi.resources.omf.omf_api_factory.OMFAPIFactory class method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPIFactory.create_api">(nepi.resources.planetlab.plcapi.PLCAPIFactory class method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch.create_bridge">create_bridge() (nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.messages_6.MessageHandler.create_function">create_function() (nepi.resources.omf.messages_6.MessageHandler method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.resource_manager_generator.create_ns3_rms">create_ns3_rms() (in module nepi.resources.ns3.resource_manager_generator)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.create_port">create_port() (nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsserver.create_socket">create_socket() (in module nepi.resources.netns.netnsserver)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.attribute.Flags.Credential">Credential (nepi.execution.attribute.Flags attribute)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+<h2 id="D">D</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3dcehelper.NS3DceHelper.dce_application_lock">dce_application_lock (nepi.resources.ns3.ns3dcehelper.NS3DceHelper attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3dcehelper.NS3DceHelper.dce_application_uuid">dce_application_uuid (nepi.resources.ns3.ns3dcehelper.NS3DceHelper attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.dce_helper">dce_helper (nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3dcehelper.NS3DceHelper.dce_manager_lock">dce_manager_lock (nepi.resources.ns3.ns3dcehelper.NS3DceHelper attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3dcehelper.NS3DceHelper.dce_manager_uuid">dce_manager_uuid (nepi.resources.ns3.ns3dcehelper.NS3DceHelper attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.dce_repo">dce_repo (nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.dce_src_location">dce_src_location (nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.dce_version">dce_version (nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3node.NS3BaseNode.dceapplications">dceapplications (nepi.resources.ns3.ns3node.NS3BaseNode attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.OSType.DEBIAN">DEBIAN (nepi.resources.linux.node.OSType attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.logger.Logger.debug">debug() (nepi.util.logger.Logger method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper.NetNSWrapper.debuger">debuger (nepi.resources.netns.netnswrapper.NetNSWrapper attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.NS3Wrapper.debuger">(nepi.resources.ns3.ns3wrapper.NS3Wrapper attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.attribute.Attribute.default">default (nepi.execution.attribute.Attribute attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.netgraph.NetGraph.del_edge_annotation">del_edge_annotation() (nepi.util.netgraph.NetGraph method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.netgraph.NetGraph.del_node_annotation">del_node_annotation() (nepi.util.netgraph.NetGraph method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf5_api.OMF5API.delete">delete() (nepi.resources.omf.omf5_api.OMF5API method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.delete">(nepi.resources.omf.omf_client.OMFClient method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.delete_slice_node">delete_slice_node() (nepi.resources.planetlab.plcapi.PLCAPI method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceAction.DEPLOY">DEPLOY (nepi.execution.resource.ResourceAction attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.deploy">deploy() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.deploy">(nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.deploy_with_conditions">deploy_with_conditions() (nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.attribute.Flags.Design">Design (nepi.execution.attribute.Flags attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.parallel.ParallelRun.destroy">destroy() (nepi.util.parallel.ParallelRun method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.route.LinuxRoute.device">device (nepi.resources.linux.route.LinuxRoute attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3errormodel.NS3BaseErrorModel.device">(nepi.resources.ns3.ns3errormodel.NS3BaseErrorModel attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3queue.NS3BaseQueue.device">(nepi.resources.ns3.ns3queue.NS3BaseQueue attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wifimac.NS3BaseWifiMac.device">(nepi.resources.ns3.ns3wifimac.NS3BaseWifiMac attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wifiphy.NS3BaseWifiPhy.device">(nepi.resources.ns3.ns3wifiphy.NS3BaseWifiPhy attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager.device">(nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice.device_helper_uuid">device_helper_uuid (nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3channel.NS3BaseChannel.devices">devices (nepi.resources.ns3.ns3channel.NS3BaseChannel attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3node.NS3BaseNode.devices">(nepi.resources.ns3.ns3node.NS3BaseNode attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3pipechanel.NS3BasePipeChannel.devices">(nepi.resources.ns3.ns3pipechanel.NS3BasePipeChannel attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf5_api.OMF5API.disconnect">disconnect() (nepi.resources.omf.omf5_api.OMF5API method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf6_api.OMF6API.disconnect">(nepi.resources.omf.omf6_api.OMF6API method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.discover">discover() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.discover">(nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.discover_time">discover_time (nepi.execution.resource.ResourceManager attribute)</a>
+  </dt>
+
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceState.DISCOVERED">DISCOVERED (nepi.execution.resource.ResourceState attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_configure">do_configure() (nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_connect">do_connect() (nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_deploy">do_deploy() (nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.all.html#nepi.resources.all.collector.Collector.do_deploy">(nepi.resources.all.collector.Collector method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.do_deploy">(nepi.resources.linux.application.LinuxApplication method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnapplication.LinuxCCNApplication.do_deploy">(nepi.resources.linux.ccn.ccnapplication.LinuxCCNApplication method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccncat.LinuxCCNCat.do_deploy">(nepi.resources.linux.ccn.ccncat.LinuxCCNCat method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccncontent.LinuxCCNContent.do_deploy">(nepi.resources.linux.ccn.ccncontent.LinuxCCNContent method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnd.LinuxCCND.do_deploy">(nepi.resources.linux.ccn.ccnd.LinuxCCND method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnpeek.LinuxCCNPeek.do_deploy">(nepi.resources.linux.ccn.ccnpeek.LinuxCCNPeek method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnpingserver.LinuxCCNPingServer.do_deploy">(nepi.resources.linux.ccn.ccnpingserver.LinuxCCNPingServer method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnpoke.LinuxCCNPoke.do_deploy">(nepi.resources.linux.ccn.ccnpoke.LinuxCCNPoke method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnr.LinuxCCNR.do_deploy">(nepi.resources.linux.ccn.ccnr.LinuxCCNR method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.do_deploy">(nepi.resources.linux.ccn.fibentry.LinuxFIBEntry method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.interface.LinuxInterface.do_deploy">(nepi.resources.linux.interface.LinuxInterface method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.mtr.LinuxMtr.do_deploy">(nepi.resources.linux.mtr.LinuxMtr method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.do_deploy">(nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.do_deploy">(nepi.resources.linux.node.LinuxNode method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.nping.LinuxNPing.do_deploy">(nepi.resources.linux.nping.LinuxNPing method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.do_deploy">(nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink.do_deploy">(nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.ping.LinuxPing.do_deploy">(nepi.resources.linux.ping.LinuxPing method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.route.LinuxRoute.do_deploy">(nepi.resources.linux.route.LinuxRoute method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.do_deploy">(nepi.resources.linux.tap.LinuxTap method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tcpdump.LinuxTcpdump.do_deploy">(nepi.resources.linux.tcpdump.LinuxTcpdump method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.traceroute.LinuxTraceroute.do_deploy">(nepi.resources.linux.traceroute.LinuxTraceroute method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tunnel.LinuxTunnel.do_deploy">(nepi.resources.linux.tunnel.LinuxTunnel method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.udptest.LinuxUdpTest.do_deploy">(nepi.resources.linux.udptest.LinuxUdpTest method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsbase.NetNSBase.do_deploy">(nepi.resources.netns.netnsbase.NetNSBase method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3base.NS3Base.do_deploy">(nepi.resources.ns3.ns3base.NS3Base method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.application.OMFApplication.do_deploy">(nepi.resources.omf.application.OMFApplication method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.channel.OMFChannel.do_deploy">(nepi.resources.omf.channel.OMFChannel method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.interface.OMFWifiInterface.do_deploy">(nepi.resources.omf.interface.OMFWifiInterface method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.node.OMFNode.do_deploy">(nepi.resources.omf.node.OMFNode method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.wilabt_node.WilabtSfaNode.do_deploy">(nepi.resources.omf.wilabt_node.WilabtSfaNode method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch.do_deploy">(nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.do_deploy">(nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.vroute.PlanetlabVroute.do_deploy">(nepi.resources.planetlab.vroute.PlanetlabVroute method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_disconnect">do_disconnect() (nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_discover">do_discover() (nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.interface.LinuxInterface.do_discover">(nepi.resources.linux.interface.LinuxInterface method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.wilabt_node.WilabtSfaNode.do_discover">(nepi.resources.omf.wilabt_node.WilabtSfaNode method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.node.PlanetlabNode.do_discover">(nepi.resources.planetlab.node.PlanetlabNode method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.sfa_node.PlanetlabSfaNode.do_discover">(nepi.resources.planetlab.sfa_node.PlanetlabSfaNode method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_fail">do_fail() (nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_provision">do_provision() (nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.all.html#nepi.resources.all.collector.Collector.do_provision">(nepi.resources.all.collector.Collector method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.do_provision">(nepi.resources.linux.application.LinuxApplication method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.interface.LinuxInterface.do_provision">(nepi.resources.linux.interface.LinuxInterface method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.do_provision">(nepi.resources.linux.node.LinuxNode method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tunnel.LinuxTunnel.do_provision">(nepi.resources.linux.tunnel.LinuxTunnel method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsbase.NetNSBase.do_provision">(nepi.resources.netns.netnsbase.NetNSBase method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3base.NS3Base.do_provision">(nepi.resources.ns3.ns3base.NS3Base method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.wilabt_node.WilabtSfaNode.do_provision">(nepi.resources.omf.wilabt_node.WilabtSfaNode method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.node.PlanetlabNode.do_provision">(nepi.resources.planetlab.node.PlanetlabNode method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch.do_provision">(nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.do_provision">(nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.sfa_node.PlanetlabSfaNode.do_provision">(nepi.resources.planetlab.sfa_node.PlanetlabSfaNode method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_release">do_release() (nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.all.html#nepi.resources.all.collector.Collector.do_release">(nepi.resources.all.collector.Collector method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.do_release">(nepi.resources.linux.application.LinuxApplication method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.interface.LinuxInterface.do_release">(nepi.resources.linux.interface.LinuxInterface method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.do_release">(nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.do_release">(nepi.resources.linux.node.LinuxNode method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.do_release">(nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.do_release">(nepi.resources.linux.tap.LinuxTap method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.application.OMFApplication.do_release">(nepi.resources.omf.application.OMFApplication method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.channel.OMFChannel.do_release">(nepi.resources.omf.channel.OMFChannel method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.interface.OMFWifiInterface.do_release">(nepi.resources.omf.interface.OMFWifiInterface method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.node.OMFNode.do_release">(nepi.resources.omf.node.OMFNode method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.wilabt_node.WilabtSfaNode.do_release">(nepi.resources.omf.wilabt_node.WilabtSfaNode method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.node.PlanetlabNode.do_release">(nepi.resources.planetlab.node.PlanetlabNode method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch.do_release">(nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.do_release">(nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.sfa_node.PlanetlabSfaNode.do_release">(nepi.resources.planetlab.sfa_node.PlanetlabSfaNode method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.vroute.PlanetlabVroute.do_release">(nepi.resources.planetlab.vroute.PlanetlabVroute method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_reserve">do_reserve() (nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_start">do_start() (nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.do_start">(nepi.resources.linux.application.LinuxApplication method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccncontent.LinuxCCNContent.do_start">(nepi.resources.linux.ccn.ccncontent.LinuxCCNContent method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnd.LinuxCCND.do_start">(nepi.resources.linux.ccn.ccnd.LinuxCCND method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnping.LinuxCCNPing.do_start">(nepi.resources.linux.ccn.ccnping.LinuxCCNPing method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnr.LinuxCCNR.do_start">(nepi.resources.linux.ccn.ccnr.LinuxCCNR method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.do_start">(nepi.resources.linux.ccn.fibentry.LinuxFIBEntry method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.mtr.LinuxMtr.do_start">(nepi.resources.linux.mtr.LinuxMtr method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.do_start">(nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.do_start">(nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink.do_start">(nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.ping.LinuxPing.do_start">(nepi.resources.linux.ping.LinuxPing method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.route.LinuxRoute.do_start">(nepi.resources.linux.route.LinuxRoute method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.do_start">(nepi.resources.linux.tap.LinuxTap method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.traceroute.LinuxTraceroute.do_start">(nepi.resources.linux.traceroute.LinuxTraceroute method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tunnel.LinuxTunnel.do_start">(nepi.resources.linux.tunnel.LinuxTunnel method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.udptest.LinuxUdpTest.do_start">(nepi.resources.linux.udptest.LinuxUdpTest method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsapplication.NetNSApplication.do_start">(nepi.resources.netns.netnsapplication.NetNSApplication method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsbase.NetNSBase.do_start">(nepi.resources.netns.netnsbase.NetNSBase method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3application.NS3BaseApplication.do_start">(nepi.resources.ns3.ns3application.NS3BaseApplication method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3base.NS3Base.do_start">(nepi.resources.ns3.ns3base.NS3Base method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3dceapplication.NS3BaseDceApplication.do_start">(nepi.resources.ns3.ns3dceapplication.NS3BaseDceApplication method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.application.OMFApplication.do_start">(nepi.resources.omf.application.OMFApplication method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.vroute.PlanetlabVroute.do_start">(nepi.resources.planetlab.vroute.PlanetlabVroute method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.do_stop">do_stop() (nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.do_stop">(nepi.resources.linux.application.LinuxApplication method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnd.LinuxCCND.do_stop">(nepi.resources.linux.ccn.ccnd.LinuxCCND method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.do_stop">(nepi.resources.linux.ccn.fibentry.LinuxFIBEntry method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.do_stop">(nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.do_stop">(nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.route.LinuxRoute.do_stop">(nepi.resources.linux.route.LinuxRoute method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.do_stop">(nepi.resources.linux.tap.LinuxTap method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tunnel.LinuxTunnel.do_stop">(nepi.resources.linux.tunnel.LinuxTunnel method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsbase.NetNSBase.do_stop">(nepi.resources.netns.netnsbase.NetNSBase method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3application.NS3BaseApplication.do_stop">(nepi.resources.ns3.ns3application.NS3BaseApplication method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3base.NS3Base.do_stop">(nepi.resources.ns3.ns3base.NS3Base method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3dceapplication.NS3BaseDceApplication.do_stop">(nepi.resources.ns3.ns3dceapplication.NS3BaseDceApplication method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.application.OMFApplication.do_stop">(nepi.resources.omf.application.OMFApplication method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.vroute.PlanetlabVroute.do_stop">(nepi.resources.planetlab.vroute.PlanetlabVroute method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.scheduler.TaskStatus.DONE">DONE (nepi.execution.scheduler.TaskStatus attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.plotter.PFormats.DOT">DOT (nepi.util.plotter.PFormats attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.attribute.Types.Double">Double (nepi.execution.attribute.Types attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.download">download() (nepi.resources.linux.node.LinuxNode method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.data.processing.ccn.html#nepi.data.processing.ccn.parser.dump_content_history">dump_content_history() (in module nepi.data.processing.ccn.parser)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.dump_create">dump_create() (nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.dump_create">(nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.dump_factory">dump_factory() (nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.dump_factory">(nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.dump_get">dump_get() (nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.dump_get">(nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.dump_header">dump_header() (nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.dump_header">(nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.dump_invoke">dump_invoke() (nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.dump_invoke">(nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.dump_set">dump_set() (nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.dump_set">(nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.dump_shutdown">dump_shutdown() (nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.dump_shutdown">(nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.dump_start">dump_start() (nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.dump_stop">dump_stop() (nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.dump_to_script">dump_to_script() (nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.dump_to_script">(nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger method)</a>
+  </dt>
+
+      </dl></dd>
+  </dl></td>
+</tr></table>
+
+<h2 id="E">E</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.FailureManager.ec">ec (nepi.execution.ec.FailureManager attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.ec">(nepi.execution.resource.ResourceManager attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.FailureLevel.EC_FAILURE">EC_FAILURE (nepi.execution.ec.FailureLevel attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.plotter.ECPlotter">ECPlotter (class in nepi.util.plotter)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.serializer.ECSerializer">ECSerializer (class in nepi.util.serializer)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ECState">ECState (class in nepi.execution.ec)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.ecstate">ecstate (nepi.execution.ec.ExperimentController attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.parsers.html#nepi.util.parsers.xml_parser.ECXMLParser">ECXMLParser (class in nepi.util.parsers.xml_parser)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.netgraph.NetGraph.edge_annotation">edge_annotation() (nepi.util.netgraph.NetGraph method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.netgraph.NetGraph.edge_annotations">edge_annotations() (nepi.util.netgraph.NetGraph method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.netgraph.NetGraph.edge_net_annotation">edge_net_annotation() (nepi.util.netgraph.NetGraph method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.netgraph.NetGraph.edges">edges() (nepi.util.netgraph.NetGraph method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.sshfuncs.eintr_retry">eintr_retry() (in module nepi.util.sshfuncs)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.parallel.ParallelRun.empty">empty() (nepi.util.parallel.ParallelRun method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsemulation.NetNSEmulation.emu_get">emu_get() (nepi.resources.netns.netnsemulation.NetNSEmulation method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsemulation.NetNSEmulation.emu_set">emu_set() (nepi.resources.netns.netnsemulation.NetNSEmulation method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsclient.LinuxNetNSClient.emulation">emulation (nepi.resources.linux.netns.netnsclient.LinuxNetNSClient attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsapplication.NetNSApplication.emulation">(nepi.resources.netns.netnsapplication.NetNSApplication attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsipv4address.NetNSIPv4Address.emulation">(nepi.resources.netns.netnsipv4address.NetNSIPv4Address attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsnode.NetNSNode.emulation">(nepi.resources.netns.netnsnode.NetNSNode attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsnodeinterface.NetNSNodeInterface.emulation">(nepi.resources.netns.netnsnodeinterface.NetNSNodeInterface attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsroute.NetNSIPv4Route.emulation">(nepi.resources.netns.netnsroute.NetNSIPv4Route attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsswitch.NetNSSwitch.emulation">(nepi.resources.netns.netnsswitch.NetNSSwitch attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.enable_dce">enable_dce (nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.enable_trace">enable_trace() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.enable_trace">(nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.enabled">enabled (nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.enabled">(nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.endpoint1">endpoint1 (nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tunnel.LinuxTunnel.endpoint1">(nepi.resources.linux.tunnel.LinuxTunnel attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.endpoint2">endpoint2 (nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tunnel.LinuxTunnel.endpoint2">(nepi.resources.linux.tunnel.LinuxTunnel attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.endpoint_mkdir">endpoint_mkdir() (nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tunnel.LinuxTunnel.endpoint_mkdir">(nepi.resources.linux.tunnel.LinuxTunnel method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.endpoint_node">endpoint_node() (nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.messages_5_4.MessageHandler.enroll_function">enroll_function() (nepi.resources.omf.messages_5_4.MessageHandler method)</a>
+  </dt>
+
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf5_api.OMF5API.enroll_host">enroll_host() (nepi.resources.omf.omf5_api.OMF5API method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf6_api.OMF6API.enroll_topic">enroll_topic() (nepi.resources.omf.omf6_api.OMF6API method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.attribute.Types.Enumerate">Enumerate (nepi.execution.attribute.Types attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.scheduler.TaskStatus.ERROR">ERROR (nepi.execution.scheduler.TaskStatus attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.ExitCode.ERROR">(nepi.resources.linux.node.ExitCode attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.logger.Logger.error">error() (nepi.util.logger.Logger method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.establish">establish() (nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.gretunnel.LinuxGRETunnel.establish_connection">establish_connection() (nepi.resources.linux.gretunnel.LinuxGRETunnel method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.establish_connection">(nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tunnel.LinuxTunnel.establish_connection">(nepi.resources.linux.tunnel.LinuxTunnel method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.udptunnel.LinuxUdpTunnel.establish_connection">(nepi.resources.linux.udptunnel.LinuxUdpTunnel method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.establish_udp_connection">establish_udp_connection() (nepi.resources.linux.tap.LinuxTap method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.establish_udp_connection">(nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.FailureManager.eval_failure">eval_failure() (nepi.execution.ec.FailureManager method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.runner.ExperimentRunner.evaluate_normal_convergence">evaluate_normal_convergence() (nepi.execution.runner.ExperimentRunner method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.environ.execute">execute() (in module nepi.util.environ)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.execute">(nepi.resources.linux.node.LinuxNode method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf5_api.OMF5API.execute">(nepi.resources.omf.omf5_api.OMF5API method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.wilabt_node.WilabtSfaNode.execute">(nepi.resources.omf.wilabt_node.WilabtSfaNode method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.execute_command">execute_command() (nepi.resources.linux.application.LinuxApplication method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.execute_deploy_command">execute_deploy_command() (nepi.resources.linux.application.LinuxApplication method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.messages_5_4.MessageHandler.execute_function">execute_function() (nepi.resources.omf.messages_5_4.MessageHandler method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf5_api.OMF5API.exit">exit() (nepi.resources.omf.omf5_api.OMF5API method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.messages_5_4.MessageHandler.exit_function">exit_function() (nepi.resources.omf.messages_5_4.MessageHandler method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.ExitCode">ExitCode (class in nepi.resources.linux.node)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.exitcode">exitcode() (nepi.resources.linux.node.LinuxNode method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.exp_dir">exp_dir (nepi.execution.ec.ExperimentController attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.exp_dir">(nepi.resources.linux.node.LinuxNode attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.exp_home">exp_home (nepi.resources.linux.node.LinuxNode attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.exp_id">exp_id (nepi.execution.ec.ExperimentController attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.application.OMFApplication.exp_id">(nepi.resources.omf.application.OMFApplication attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.channel.OMFChannel.exp_id">(nepi.resources.omf.channel.OMFChannel attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.interface.OMFWifiInterface.exp_id">(nepi.resources.omf.interface.OMFWifiInterface attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.node.OMFNode.exp_id">(nepi.resources.omf.node.OMFNode attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController">ExperimentController (class in nepi.execution.ec)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.runner.ExperimentRunner">ExperimentRunner (class in nepi.execution.runner)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+<h2 id="F">F</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3server.NS3WrapperMessage.FACTORY">FACTORY (nepi.resources.ns3.ns3server.NS3WrapperMessage attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3client.LinuxNS3Client.factory">factory() (nepi.resources.linux.ns3.ns3client.LinuxNS3Client method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3client.NS3Client.factory">(nepi.resources.ns3.ns3client.NS3Client method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3simulation.NS3Simulation.factory">(nepi.resources.ns3.ns3simulation.NS3Simulation method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.NS3Wrapper.factory">(nepi.resources.ns3.ns3wrapper.NS3Wrapper method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.fail">fail() (nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.wilabt_node.WilabtSfaNode.fail_discovery">fail_discovery() (nepi.resources.omf.wilabt_node.WilabtSfaNode method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.node.PlanetlabNode.fail_discovery">(nepi.resources.planetlab.node.PlanetlabNode method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.sfa_node.PlanetlabSfaNode.fail_discovery">(nepi.resources.planetlab.sfa_node.PlanetlabSfaNode method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.wilabt_node.WilabtSfaNode.fail_node_not_alive">fail_node_not_alive() (nepi.resources.omf.wilabt_node.WilabtSfaNode method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.node.PlanetlabNode.fail_node_not_alive">(nepi.resources.planetlab.node.PlanetlabNode method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.sfa_node.PlanetlabSfaNode.fail_node_not_alive">(nepi.resources.planetlab.sfa_node.PlanetlabSfaNode method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.wilabt_node.WilabtSfaNode.fail_node_not_available">fail_node_not_available() (nepi.resources.omf.wilabt_node.WilabtSfaNode method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.node.PlanetlabNode.fail_node_not_available">(nepi.resources.planetlab.node.PlanetlabNode method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.sfa_node.PlanetlabSfaNode.fail_node_not_available">(nepi.resources.planetlab.sfa_node.PlanetlabSfaNode method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.wilabt_node.WilabtSfaNode.fail_not_enough_nodes">fail_not_enough_nodes() (nepi.resources.omf.wilabt_node.WilabtSfaNode method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.node.PlanetlabNode.fail_not_enough_nodes">(nepi.resources.planetlab.node.PlanetlabNode method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.sfa_node.PlanetlabSfaNode.fail_not_enough_nodes">(nepi.resources.planetlab.sfa_node.PlanetlabSfaNode method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.node.PlanetlabNode.fail_plapi">fail_plapi() (nepi.resources.planetlab.node.PlanetlabNode method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.wilabt_node.WilabtSfaNode.fail_sfaapi">fail_sfaapi() (nepi.resources.omf.wilabt_node.WilabtSfaNode method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.sfa_node.PlanetlabSfaNode.fail_sfaapi">(nepi.resources.planetlab.sfa_node.PlanetlabSfaNode method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ECState.FAILED">FAILED (nepi.execution.ec.ECState attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceState.FAILED">(nepi.execution.resource.ResourceState attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.failed_time">failed_time (nepi.execution.resource.ResourceManager attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.failtrap">failtrap() (in module nepi.execution.resource)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.failure_level">failure_level (nepi.execution.ec.ExperimentController attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.FailureLevel">FailureLevel (class in nepi.execution.ec)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.FailureManager">FailureManager (class in nepi.execution.ec)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink.fdnetdevice">fdnetdevice (nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.planetlab.ns3.html#nepi.resources.planetlab.ns3.tuntapfdlink.PlanetlabTunTapFdLink.fdnetdevice">(nepi.resources.planetlab.ns3.tuntapfdlink.PlanetlabTunTapFdLink attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink.fdnode">fdnode (nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.OSType.FEDORA">FEDORA (nepi.resources.linux.node.OSType attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.OSType.FEDORA_12">FEDORA_12 (nepi.resources.linux.node.OSType attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.OSType.FEDORA_14">FEDORA_14 (nepi.resources.linux.node.OSType attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.OSType.FEDORA_8">FEDORA_8 (nepi.resources.linux.node.OSType attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.plotter.PFormats.FIGURE">FIGURE (nepi.util.plotter.PFormats attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.ExitCode.FILENOTFOUND">FILENOTFOUND (nepi.resources.linux.node.ExitCode attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.attribute.Flags.Filter">Filter (nepi.execution.attribute.Flags attribute)</a>
+  </dt>
+
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.filter_existing_files">filter_existing_files() (nepi.resources.linux.node.LinuxNode method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.filter_resources">filter_resources() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.rmatcher.find_boxes">find_boxes() (in module nepi.util.rmatcher)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.find_home">find_home() (nepi.resources.linux.node.LinuxNode method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.find_types">find_types() (in module nepi.execution.resource)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.finish_multicall">finish_multicall() (nepi.resources.planetlab.plcapi.PLCAPI method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.sshfuncs.ProcStatus.FINISHED">FINISHED (nepi.util.sshfuncs.ProcStatus attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.attribute.Flags">Flags (class in nepi.execution.attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.attribute.Attribute.flags">flags (nepi.execution.attribute.Attribute attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsserver.NetNSWrapperMessage.FLUSH">FLUSH (nepi.resources.netns.netnsserver.NetNSWrapperMessage attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3server.NS3WrapperMessage.FLUSH">(nepi.resources.ns3.ns3server.NS3WrapperMessage attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsclient.LinuxNetNSClient.flush">flush() (nepi.resources.linux.netns.netnsclient.LinuxNetNSClient method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3client.LinuxNS3Client.flush">(nepi.resources.linux.ns3.ns3client.LinuxNS3Client method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsclient.NetNSClient.flush">(nepi.resources.netns.netnsclient.NetNSClient method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsemulation.NetNSEmulation.flush">(nepi.resources.netns.netnsemulation.NetNSEmulation method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3client.NS3Client.flush">(nepi.resources.ns3.ns3client.NS3Client method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3simulation.NS3Simulation.flush">(nepi.resources.ns3.ns3simulation.NS3Simulation method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.fm">fm (nepi.execution.ec.ExperimentController attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.format_args">format_args() (nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.format_args">(nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.format_environment">format_environment() (nepi.resources.linux.node.LinuxNode method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.format_kwargs">format_kwargs() (nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.format_kwargs">(nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.format_value">format_value() (nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.format_value">(nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf6_api.OMF6API.frcp_configure">frcp_configure() (nepi.resources.omf.omf6_api.OMF6API method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf6_api.OMF6API.frcp_create">frcp_create() (nepi.resources.omf.omf6_api.OMF6API method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf6_api.OMF6API.frcp_inform">frcp_inform() (nepi.resources.omf.omf6_api.OMF6API method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf6_api.OMF6API.frcp_release">frcp_release() (nepi.resources.omf.omf6_api.OMF6API method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf6_api.OMF6API.frcp_request">frcp_request() (nepi.resources.omf.omf6_api.OMF6API method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.parsers.html#nepi.util.parsers.xml_parser.from_type">from_type() (in module nepi.util.parsers.xml_parser)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.parsers.html#nepi.util.parsers.xml_parser.ECXMLParser.from_xml">from_xml() (nepi.util.parsers.xml_parser.ECXMLParser method)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+<h2 id="G">G</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.netgraph.NetGraph.generate_topology">generate_topology() (nepi.util.netgraph.NetGraph method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsserver.NetNSWrapperMessage.GET">GET (nepi.resources.netns.netnsserver.NetNSWrapperMessage attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3server.NS3WrapperMessage.GET">(nepi.resources.ns3.ns3server.NS3WrapperMessage attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.get">get() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.get">(nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsclient.LinuxNetNSClient.get">(nepi.resources.linux.netns.netnsclient.LinuxNetNSClient method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3client.LinuxNS3Client.get">(nepi.resources.linux.ns3.ns3client.LinuxNS3Client method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsbase.NetNSBase.get">(nepi.resources.netns.netnsbase.NetNSBase method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsclient.NetNSClient.get">(nepi.resources.netns.netnsclient.NetNSClient method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper.NetNSWrapper.get">(nepi.resources.netns.netnswrapper.NetNSWrapper method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3base.NS3Base.get">(nepi.resources.ns3.ns3base.NS3Base method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3client.NS3Client.get">(nepi.resources.ns3.ns3client.NS3Client method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.NS3Wrapper.get">(nepi.resources.ns3.ns3wrapper.NS3Wrapper method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.get">(nepi.resources.omf.omf_client.OMFClient method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf_api_factory.OMFAPIFactory.get_api">get_api() (nepi.resources.omf.omf_api_factory.OMFAPIFactory class method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPIFactory.get_api">(nepi.resources.planetlab.plcapi.PLCAPIFactory class method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.util.html#nepi.util.manifoldapi.MANIFOLDAPIFactory.get_api">(nepi.util.manifoldapi.MANIFOLDAPIFactory class method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.util.html#nepi.util.sfaapi.SFAAPIFactory.get_api">(nepi.util.sfaapi.SFAAPIFactory class method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.get_attribute">get_attribute() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.get_attribute">(nepi.execution.resource.ResourceManager class method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.get_attributes">get_attributes() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.get_attributes">(nepi.execution.resource.ResourceManager class method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.get_connected">get_connected() (nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.get_discover_time">get_discover_time() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.gretunnel.LinuxGRETunnel.get_endpoints">get_endpoints() (nepi.resources.linux.gretunnel.LinuxGRETunnel method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.get_endpoints">(nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tunnel.LinuxTunnel.get_endpoints">(nepi.resources.linux.tunnel.LinuxTunnel method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.udptunnel.LinuxUdpTunnel.get_endpoints">(nepi.resources.linux.udptunnel.LinuxUdpTunnel method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.planetlab.ns3.html#nepi.resources.planetlab.ns3.fdudptunnel.PlanetlabNs3FdUdpTunnel.get_endpoints">(nepi.resources.planetlab.ns3.fdudptunnel.PlanetlabNs3FdUdpTunnel method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.get_failed_time">get_failed_time() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.channel.OMFChannel.get_frequency">get_frequency() (nepi.resources.omf.channel.OMFChannel method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.get_global">get_global() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.get_global">(nepi.execution.resource.ResourceManager class method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.get_help">get_help() (nepi.execution.resource.ResourceManager class method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.get_interfaces">get_interfaces() (nepi.resources.planetlab.plcapi.PLCAPI method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.get_node_flavour">get_node_flavour() (nepi.resources.planetlab.plcapi.PLCAPI method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.get_node_info">get_node_info() (nepi.resources.planetlab.plcapi.PLCAPI method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.get_node_tags">get_node_tags() (nepi.resources.planetlab.plcapi.PLCAPI method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.get_nodes">get_nodes() (nepi.resources.planetlab.plcapi.PLCAPI method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper.NetNSWrapper.get_object">get_object() (nepi.resources.netns.netnswrapper.NetNSWrapper method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.NS3Wrapper.get_object">(nepi.resources.ns3.ns3wrapper.NS3Wrapper method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsserver.get_options">get_options() (in module nepi.resources.netns.netnsserver)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3server.get_options">(in module nepi.resources.ns3.ns3server)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.get_os">get_os() (nepi.resources.linux.node.LinuxNode method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.netgraph.NetGraph.get_p2p_info">get_p2p_info() (nepi.util.netgraph.NetGraph method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.get_platform">get_platform() (nepi.execution.resource.ResourceManager class method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.get_provision_time">get_provision_time() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.get_ready_time">get_ready_time() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.get_release_time">get_release_time() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.get_resource">get_resource() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.manifoldapi.MANIFOLDAPI.get_resource_info">get_resource_info() (nepi.util.manifoldapi.MANIFOLDAPI method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceFactory.get_resource_type">get_resource_type() (nepi.execution.resource.ResourceFactory class method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.manifoldapi.MANIFOLDAPI.get_resource_urn">get_resource_urn() (nepi.util.manifoldapi.MANIFOLDAPI method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.get_resources_by_type">get_resources_by_type() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.sfaapi.SFAAPI.get_resources_hrn">get_resources_hrn() (nepi.util.sfaapi.SFAAPI method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.sfaapi.SFAAPI.get_resources_info">get_resources_info() (nepi.util.sfaapi.SFAAPI method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.get_rtype">get_rtype() (nepi.execution.resource.ResourceManager class method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.manifoldapi.MANIFOLDAPI.get_session_key">get_session_key() (nepi.util.manifoldapi.MANIFOLDAPI method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.get_slice_id">get_slice_id() (nepi.resources.planetlab.plcapi.PLCAPI method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.get_slice_nodes">get_slice_nodes() (nepi.resources.planetlab.plcapi.PLCAPI method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.manifoldapi.MANIFOLDAPI.get_slice_resources">get_slice_resources() (nepi.util.manifoldapi.MANIFOLDAPI method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.util.html#nepi.util.sfaapi.SFAAPI.get_slice_resources">(nepi.util.sfaapi.SFAAPI method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.get_slice_tags">get_slice_tags() (nepi.resources.planetlab.plcapi.PLCAPI method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.get_slice_vnet_sys_tag">get_slice_vnet_sys_tag() (nepi.resources.planetlab.plcapi.PLCAPI method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.get_slices">get_slices() (nepi.resources.planetlab.plcapi.PLCAPI method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.get_start_time">get_start_time() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.get_stop_time">get_stop_time() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.get_task">get_task() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.get_traces">get_traces() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.get_traces">(nepi.execution.resource.ResourceManager class method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.attribute.Attribute.get_value">get_value() (nepi.execution.attribute.Attribute method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.sshfuncs.gethostbyname">gethostbyname() (in module nepi.util.sshfuncs)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.getpid">getpid() (nepi.resources.linux.node.LinuxNode method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.attribute.Flags.Global">Global (nepi.execution.attribute.Flags attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.gre_connect">gre_connect() (nepi.resources.linux.tap.LinuxTap method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.tap.PlanetlabTap.gre_connect">(nepi.resources.planetlab.tap.PlanetlabTap method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.gre_enabled">gre_enabled (nepi.resources.linux.tap.LinuxTap attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.guid">guid (nepi.execution.resource.ResourceManager attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.guid.GuidGenerator">GuidGenerator (class in nepi.util.guid)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+<h2 id="H">H</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf6_parser.OMF6Parser.handle">handle() (nepi.resources.omf.omf6_parser.OMF6Parser method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsserver.handle_message">handle_message() (in module nepi.resources.netns.netnsserver)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3server.handle_message">(in module nepi.resources.ns3.ns3server)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.handle_omf_message">handle_omf_message() (nepi.resources.omf.omf_client.OMFClient method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.has_attribute">has_attribute() (nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.attribute.Attribute.has_changed">has_changed (nepi.execution.attribute.Attribute attribute)</a>
+  </dt>
+
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.has_changed">has_changed() (nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.attribute.Attribute.has_flag">has_flag() (nepi.execution.attribute.Attribute method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.has_flag">(nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.scheduler.HeapScheduler">HeapScheduler (class in nepi.execution.scheduler)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.attribute.Attribute.help">help (nepi.execution.attribute.Attribute attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.trace.Trace.help">(nepi.execution.trace.Trace attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.home_dir">home_dir (nepi.resources.linux.node.LinuxNode attribute)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+<h2 id="I">I</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.IFF_TAP">IFF_TAP (nepi.resources.linux.tap.LinuxTap attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.IFF_TUN">IFF_TUN (nepi.resources.linux.tap.LinuxTap attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.in_foreground">in_foreground (nepi.resources.linux.application.LinuxApplication attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.logger.Logger.info">info() (nepi.util.logger.Logger method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.inform_failure">inform_failure() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf6_parser.OMF6Parser.init_mailbox">init_mailbox() (nepi.resources.omf.omf6_parser.OMF6Parser method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.parallel.ParallelRun.initialize_workers">initialize_workers() (nepi.util.parallel.ParallelRun method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.initiate">initiate() (nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.gretunnel.LinuxGRETunnel.initiate_connection">initiate_connection() (nepi.resources.linux.gretunnel.LinuxGRETunnel method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.initiate_connection">(nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tunnel.LinuxTunnel.initiate_connection">(nepi.resources.linux.tunnel.LinuxTunnel method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.udptunnel.LinuxUdpTunnel.initiate_connection">(nepi.resources.linux.udptunnel.LinuxUdpTunnel method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.initiate_udp_connection">initiate_udp_connection() (nepi.resources.linux.tap.LinuxTap method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.initiate_udp_connection">(nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.install">install() (nepi.resources.linux.application.LinuxApplication method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.install_dependencies">install_dependencies() (nepi.resources.linux.application.LinuxApplication method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.install_packages">install_packages() (nepi.resources.linux.node.LinuxNode method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.debfuncs.install_packages_command">install_packages_command() (in module nepi.resources.linux.debfuncs)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.rpmfuncs.install_packages_command">(in module nepi.resources.linux.rpmfuncs)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.install_packages_command">(nepi.resources.linux.node.LinuxNode method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.rpmfuncs.install_rpmfusion_command">install_rpmfusion_command() (in module nepi.resources.linux.rpmfuncs)</a>
+  </dt>
+
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.attribute.Types.Integer">Integer (nepi.execution.attribute.Types attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsipv4address.NetNSIPv4Address.interface">interface (nepi.resources.netns.netnsipv4address.NetNSIPv4Address attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsswitch.NetNSSwitch.interface">(nepi.resources.netns.netnsswitch.NetNSSwitch attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsserver.NetNSWrapperMessage.INVOKE">INVOKE (nepi.resources.netns.netnsserver.NetNSWrapperMessage attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3server.NS3WrapperMessage.INVOKE">(nepi.resources.ns3.ns3server.NS3WrapperMessage attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsclient.LinuxNetNSClient.invoke">invoke() (nepi.resources.linux.netns.netnsclient.LinuxNetNSClient method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3client.LinuxNS3Client.invoke">(nepi.resources.linux.ns3.ns3client.LinuxNS3Client method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsclient.NetNSClient.invoke">(nepi.resources.netns.netnsclient.NetNSClient method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsemulation.NetNSEmulation.invoke">(nepi.resources.netns.netnsemulation.NetNSEmulation method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper.NetNSWrapper.invoke">(nepi.resources.netns.netnswrapper.NetNSWrapper method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3client.NS3Client.invoke">(nepi.resources.ns3.ns3client.NS3Client method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3simulation.NS3Simulation.invoke">(nepi.resources.ns3.ns3simulation.NS3Simulation method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.NS3Wrapper.invoke">(nepi.resources.ns3.ns3wrapper.NS3Wrapper method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3node.NS3BaseNode.ipv4">ipv4 (nepi.resources.ns3.ns3node.NS3BaseNode attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.is_alive">is_alive() (nepi.resources.linux.node.LinuxNode method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.data.processing.ccn.html#nepi.data.processing.ccn.parser.is_control">is_control() (in module nepi.data.processing.ccn.parser)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.NS3Wrapper.is_finished">is_finished (nepi.resources.ns3.ns3wrapper.NS3Wrapper attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.is_rm_instance">is_rm_instance() (nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.NS3Wrapper.is_running">is_running (nepi.resources.ns3.ns3wrapper.NS3Wrapper attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.netgraph.NetGraph.is_source">is_source() (nepi.util.netgraph.NetGraph method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.NS3Wrapper.is_started">is_started (nepi.resources.ns3.ns3wrapper.NS3Wrapper attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.netgraph.NetGraph.is_target">is_target() (nepi.util.netgraph.NetGraph method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.attribute.Attribute.is_valid_value">is_valid_value() (nepi.execution.attribute.Attribute method)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+<h2 id="J">J</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.parallel.ParallelRun.join">join() (nepi.util.parallel.ParallelRun method)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+<h2 id="K">K</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.kill">kill() (nepi.resources.linux.node.LinuxNode method)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+<h2 id="L">L</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.netgraph.TopologyType.LADDER">LADDER (nepi.util.netgraph.TopologyType attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.execfuncs.lcopy">lcopy() (in module nepi.util.execfuncs)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.execfuncs.lexec">lexec() (in module nepi.util.execfuncs)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.execfuncs.lgetpid">lgetpid() (in module nepi.util.execfuncs)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.lib_dir">lib_dir (nepi.resources.linux.node.LinuxNode attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.netgraph.TopologyType.LINEAR">LINEAR (nepi.util.netgraph.TopologyType attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication">LinuxApplication (class in nepi.resources.linux.application)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnapplication.LinuxCCNApplication">LinuxCCNApplication (class in nepi.resources.linux.ccn.ccnapplication)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccncat.LinuxCCNCat">LinuxCCNCat (class in nepi.resources.linux.ccn.ccncat)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccncontent.LinuxCCNContent">LinuxCCNContent (class in nepi.resources.linux.ccn.ccncontent)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnd.LinuxCCND">LinuxCCND (class in nepi.resources.linux.ccn.ccnd)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnpeek.LinuxCCNPeek">LinuxCCNPeek (class in nepi.resources.linux.ccn.ccnpeek)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnping.LinuxCCNPing">LinuxCCNPing (class in nepi.resources.linux.ccn.ccnping)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnpingserver.LinuxCCNPingServer">LinuxCCNPingServer (class in nepi.resources.linux.ccn.ccnpingserver)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnpoke.LinuxCCNPoke">LinuxCCNPoke (class in nepi.resources.linux.ccn.ccnpoke)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnr.LinuxCCNR">LinuxCCNR (class in nepi.resources.linux.ccn.ccnr)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.channel.LinuxChannel">LinuxChannel (class in nepi.resources.linux.channel)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3pingdceapplication.LinuxDcePing">LinuxDcePing (class in nepi.resources.linux.ns3.ns3pingdceapplication)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.fibentry.LinuxFIBEntry">LinuxFIBEntry (class in nepi.resources.linux.ccn.fibentry)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.gretunnel.LinuxGRETunnel">LinuxGRETunnel (class in nepi.resources.linux.gretunnel)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.interface.LinuxInterface">LinuxInterface (class in nepi.resources.linux.interface)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.mtr.LinuxMtr">LinuxMtr (class in nepi.resources.linux.mtr)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsclient.LinuxNetNSClient">LinuxNetNSClient (class in nepi.resources.linux.netns.netnsclient)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation">LinuxNetNSEmulation (class in nepi.resources.linux.netns.netnsemulation)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode">LinuxNode (class in nepi.resources.linux.node)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.nping.LinuxNPing">LinuxNPing (class in nepi.resources.linux.nping)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.ccn.html#nepi.resources.linux.ns3.ccn.ns3ccndceapplication.LinuxNS3CCNDceApplication">LinuxNS3CCNDceApplication (class in nepi.resources.linux.ns3.ccn.ns3ccndceapplication)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3client.LinuxNS3Client">LinuxNS3Client (class in nepi.resources.linux.ns3.ns3client)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3dceapplication.LinuxNS3DceApplication">LinuxNS3DceApplication (class in nepi.resources.linux.ns3.ns3dceapplication)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.ccn.html#nepi.resources.linux.ns3.ccn.ns3ccncatdceapplication.LinuxNS3DceCCNCat">LinuxNS3DceCCNCat (class in nepi.resources.linux.ns3.ccn.ns3ccncatdceapplication)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.ccn.html#nepi.resources.linux.ns3.ccn.ns3ccnddceapplication.LinuxNS3DceCCND">LinuxNS3DceCCND (class in nepi.resources.linux.ns3.ccn.ns3ccnddceapplication)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.ccn.html#nepi.resources.linux.ns3.ccn.ns3ccnpeekdceapplication.LinuxNS3DceCCNPeek">LinuxNS3DceCCNPeek (class in nepi.resources.linux.ns3.ccn.ns3ccnpeekdceapplication)</a>
+  </dt>
+
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.ccn.html#nepi.resources.linux.ns3.ccn.ns3ccnpokedceapplication.LinuxNS3DceCCNPoke">LinuxNS3DceCCNPoke (class in nepi.resources.linux.ns3.ccn.ns3ccnpokedceapplication)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.ccn.html#nepi.resources.linux.ns3.ccn.ns3ccnrdceapplication.LinuxNS3DceCCNR">LinuxNS3DceCCNR (class in nepi.resources.linux.ns3.ccn.ns3ccnrdceapplication)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.ccn.html#nepi.resources.linux.ns3.ccn.ns3fibentrydceapplication.LinuxNS3DceFIBEntry">LinuxNS3DceFIBEntry (class in nepi.resources.linux.ns3.ccn.ns3fibentrydceapplication)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel">LinuxNs3FdUdpTunnel (class in nepi.resources.linux.ns3.fdudptunnel)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation">LinuxNS3Simulation (class in nepi.resources.linux.ns3.ns3simulation)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.ping.LinuxPing">LinuxPing (class in nepi.resources.linux.ping)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.route.LinuxRoute">LinuxRoute (class in nepi.resources.linux.route)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap">LinuxTap (class in nepi.resources.linux.tap)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tcpdump.LinuxTcpdump">LinuxTcpdump (class in nepi.resources.linux.tcpdump)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.traceroute.LinuxTraceroute">LinuxTraceroute (class in nepi.resources.linux.traceroute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tun.LinuxTun">LinuxTun (class in nepi.resources.linux.tun)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tunnel.LinuxTunnel">LinuxTunnel (class in nepi.resources.linux.tunnel)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink">LinuxTunTapFdLink (class in nepi.resources.linux.ns3.tuntapfdlink)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.udptest.LinuxUdpTest">LinuxUdpTest (class in nepi.resources.linux.udptest)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.udptunnel.LinuxUdpTunnel">LinuxUdpTunnel (class in nepi.resources.linux.udptunnel)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.execfuncs.lkill">lkill() (in module nepi.util.execfuncs)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.load">load() (nepi.execution.ec.ExperimentController class method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.util.html#nepi.util.serializer.ECSerializer.load">(nepi.util.serializer.ECSerializer method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.interface.LinuxInterface.load_configuration">load_configuration() (nepi.resources.linux.interface.LinuxInterface method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.data.processing.ccn.html#nepi.data.processing.ccn.parser.load_content_history">load_content_history() (in module nepi.data.processing.ccn.parser)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.load_ns3_libraries">load_ns3_libraries() (in module nepi.resources.ns3.ns3wrapper)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.load_ns3_module">load_ns3_module() (in module nepi.resources.ns3.ns3wrapper)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.local_dir">local_dir (nepi.execution.ec.ExperimentController attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.localhost">localhost (nepi.resources.linux.node.LinuxNode attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf_api_factory.OMFAPIFactory.lock">lock (nepi.resources.omf.omf_api_factory.OMFAPIFactory attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.node.PlanetlabNode.lock">(nepi.resources.planetlab.node.PlanetlabNode attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.sshfuncs.log">log() (in module nepi.util.sshfuncs)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.util.html#nepi.util.logger.Logger.log">(nepi.util.logger.Logger method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.messages_5_4.MessageHandler.log_function">log_function() (nepi.resources.omf.messages_5_4.MessageHandler method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.log_message">log_message() (nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.log_message">(nepi.resources.linux.application.LinuxApplication method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.channel.LinuxChannel.log_message">(nepi.resources.linux.channel.LinuxChannel method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.gretunnel.LinuxGRETunnel.log_message">(nepi.resources.linux.gretunnel.LinuxGRETunnel method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.interface.LinuxInterface.log_message">(nepi.resources.linux.interface.LinuxInterface method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.log_message">(nepi.resources.linux.node.LinuxNode method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.log_message">(nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tunnel.LinuxTunnel.log_message">(nepi.resources.linux.tunnel.LinuxTunnel method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.udptunnel.LinuxUdpTunnel.log_message">(nepi.resources.linux.udptunnel.LinuxUdpTunnel method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.util.html#nepi.util.logger.Logger.log_message">(nepi.util.logger.Logger method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.logger.Logger">Logger (class in nepi.util.logger)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.logger">logger (nepi.execution.ec.ExperimentController attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper.NetNSWrapper.logger">(nepi.resources.netns.netnswrapper.NetNSWrapper attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.NS3Wrapper.logger">(nepi.resources.ns3.ns3wrapper.NS3Wrapper attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.util.html#nepi.util.logger.Logger.logger">(nepi.util.logger.Logger attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.execfuncs.lspawn">lspawn() (in module nepi.util.execfuncs)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.execfuncs.lstatus">lstatus() (in module nepi.util.execfuncs)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+<h2 id="M">M</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.sshfuncs.make_control_path">make_control_path() (in module nepi.util.sshfuncs)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.sfarspec_proc.SfaRSpecProcessing.make_dict_rec">make_dict_rec() (nepi.util.sfarspec_proc.SfaRSpecProcessing method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.manifoldapi.MANIFOLDAPIFactory.make_key">make_key() (nepi.util.manifoldapi.MANIFOLDAPIFactory class method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.util.html#nepi.util.sfaapi.SFAAPIFactory.make_key">(nepi.util.sfaapi.SFAAPIFactory class method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.sshfuncs.make_server_key_args">make_server_key_args() (in module nepi.util.sshfuncs)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper.NetNSWrapper.make_uuid">make_uuid() (nepi.resources.netns.netnswrapper.NetNSWrapper method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.NS3Wrapper.make_uuid">(nepi.resources.ns3.ns3wrapper.NS3Wrapper method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.manifoldapi.MANIFOLDAPI">MANIFOLDAPI (class in nepi.util.manifoldapi)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.manifoldapi.MANIFOLDAPIFactory">MANIFOLDAPIFactory (class in nepi.util.manifoldapi)</a>
+  </dt>
+
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.rmatcher.match_tags">match_tags() (in module nepi.util.rmatcher)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.mcapi">mcapi (nepi.resources.planetlab.plcapi.PLCAPI attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.netgraph.TopologyType.MESH">MESH (nepi.util.netgraph.TopologyType attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.messages_5_4.MessageHandler">MessageHandler (class in nepi.resources.omf.messages_5_4)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.messages_6.MessageHandler">(class in nepi.resources.omf.messages_6)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.mkdir">mkdir() (nepi.resources.linux.node.LinuxNode method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3node.NS3BaseNode.mobility">mobility (nepi.resources.ns3.ns3node.NS3BaseNode attribute)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+<h2 id="N">N</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.attribute.Attribute.name">name (nepi.execution.attribute.Attribute attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.trace.Trace.name">(nepi.execution.trace.Trace attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.html#module-nepi">nepi (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.data.html#module-nepi.data">nepi.data (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.data.processing.html#module-nepi.data.processing">nepi.data.processing (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.data.processing.ccn.html#module-nepi.data.processing.ccn">nepi.data.processing.ccn (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.data.processing.ccn.html#module-nepi.data.processing.ccn.parser">nepi.data.processing.ccn.parser (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.data.processing.ping.html#module-nepi.data.processing.ping">nepi.data.processing.ping (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.data.processing.ping.html#module-nepi.data.processing.ping.parser">nepi.data.processing.ping.parser (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#module-nepi.execution">nepi.execution (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#module-nepi.execution.attribute">nepi.execution.attribute (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#module-nepi.execution.ec">nepi.execution.ec (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#module-nepi.execution.resource">nepi.execution.resource (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#module-nepi.execution.runner">nepi.execution.runner (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#module-nepi.execution.scheduler">nepi.execution.scheduler (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#module-nepi.execution.tags">nepi.execution.tags (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#module-nepi.execution.trace">nepi.execution.trace (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.html#module-nepi.resources">nepi.resources (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.all.html#module-nepi.resources.all">nepi.resources.all (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.all.html#module-nepi.resources.all.collector">nepi.resources.all.collector (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#module-nepi.resources.linux">nepi.resources.linux (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#module-nepi.resources.linux.application">nepi.resources.linux.application (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn">nepi.resources.linux.ccn (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccnapplication">nepi.resources.linux.ccn.ccnapplication (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccncat">nepi.resources.linux.ccn.ccncat (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccncontent">nepi.resources.linux.ccn.ccncontent (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccnd">nepi.resources.linux.ccn.ccnd (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccnpeek">nepi.resources.linux.ccn.ccnpeek (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccnping">nepi.resources.linux.ccn.ccnping (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccnpingserver">nepi.resources.linux.ccn.ccnpingserver (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccnpoke">nepi.resources.linux.ccn.ccnpoke (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccnr">nepi.resources.linux.ccn.ccnr (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.fibentry">nepi.resources.linux.ccn.fibentry (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#module-nepi.resources.linux.channel">nepi.resources.linux.channel (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#module-nepi.resources.linux.debfuncs">nepi.resources.linux.debfuncs (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#module-nepi.resources.linux.gretunnel">nepi.resources.linux.gretunnel (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#module-nepi.resources.linux.interface">nepi.resources.linux.interface (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#module-nepi.resources.linux.mtr">nepi.resources.linux.mtr (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.netns.html#module-nepi.resources.linux.netns">nepi.resources.linux.netns (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.netns.html#module-nepi.resources.linux.netns.netnsclient">nepi.resources.linux.netns.netnsclient (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.netns.html#module-nepi.resources.linux.netns.netnsemulation">nepi.resources.linux.netns.netnsemulation (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#module-nepi.resources.linux.node">nepi.resources.linux.node (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#module-nepi.resources.linux.nping">nepi.resources.linux.nping (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#module-nepi.resources.linux.ns3">nepi.resources.linux.ns3 (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn">nepi.resources.linux.ns3.ccn (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3ccncatdceapplication">nepi.resources.linux.ns3.ccn.ns3ccncatdceapplication (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3ccndceapplication">nepi.resources.linux.ns3.ccn.ns3ccndceapplication (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3ccnddceapplication">nepi.resources.linux.ns3.ccn.ns3ccnddceapplication (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3ccnpeekdceapplication">nepi.resources.linux.ns3.ccn.ns3ccnpeekdceapplication (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3ccnpokedceapplication">nepi.resources.linux.ns3.ccn.ns3ccnpokedceapplication (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3ccnrdceapplication">nepi.resources.linux.ns3.ccn.ns3ccnrdceapplication (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3fibentrydceapplication">nepi.resources.linux.ns3.ccn.ns3fibentrydceapplication (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#module-nepi.resources.linux.ns3.fdudptunnel">nepi.resources.linux.ns3.fdudptunnel (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#module-nepi.resources.linux.ns3.ns3client">nepi.resources.linux.ns3.ns3client (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#module-nepi.resources.linux.ns3.ns3dceapplication">nepi.resources.linux.ns3.ns3dceapplication (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#module-nepi.resources.linux.ns3.ns3pingdceapplication">nepi.resources.linux.ns3.ns3pingdceapplication (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#module-nepi.resources.linux.ns3.ns3simulation">nepi.resources.linux.ns3.ns3simulation (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#module-nepi.resources.linux.ns3.tuntapfdlink">nepi.resources.linux.ns3.tuntapfdlink (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#module-nepi.resources.linux.ping">nepi.resources.linux.ping (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#module-nepi.resources.linux.route">nepi.resources.linux.route (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#module-nepi.resources.linux.rpmfuncs">nepi.resources.linux.rpmfuncs (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#module-nepi.resources.linux.tap">nepi.resources.linux.tap (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#module-nepi.resources.linux.tcpdump">nepi.resources.linux.tcpdump (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#module-nepi.resources.linux.traceroute">nepi.resources.linux.traceroute (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#module-nepi.resources.linux.tun">nepi.resources.linux.tun (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#module-nepi.resources.linux.tunnel">nepi.resources.linux.tunnel (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#module-nepi.resources.linux.udptest">nepi.resources.linux.udptest (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#module-nepi.resources.linux.udptunnel">nepi.resources.linux.udptunnel (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#module-nepi.resources.netns">nepi.resources.netns (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#module-nepi.resources.netns.netnsapplication">nepi.resources.netns.netnsapplication (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#module-nepi.resources.netns.netnsbase">nepi.resources.netns.netnsbase (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#module-nepi.resources.netns.netnsclient">nepi.resources.netns.netnsclient (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#module-nepi.resources.netns.netnsemulation">nepi.resources.netns.netnsemulation (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#module-nepi.resources.netns.netnsinterface">nepi.resources.netns.netnsinterface (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#module-nepi.resources.netns.netnsipv4address">nepi.resources.netns.netnsipv4address (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#module-nepi.resources.netns.netnsnode">nepi.resources.netns.netnsnode (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#module-nepi.resources.netns.netnsnodeinterface">nepi.resources.netns.netnsnodeinterface (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#module-nepi.resources.netns.netnsroute">nepi.resources.netns.netnsroute (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#module-nepi.resources.netns.netnsserver">nepi.resources.netns.netnsserver (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#module-nepi.resources.netns.netnsswitch">nepi.resources.netns.netnsswitch (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#module-nepi.resources.netns.netnswrapper">nepi.resources.netns.netnswrapper (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#module-nepi.resources.netns.netnswrapper_debug">nepi.resources.netns.netnswrapper_debug (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3">nepi.resources.ns3 (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes">nepi.resources.ns3.classes (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.aarf_wifi_manager">nepi.resources.ns3.classes.aarf_wifi_manager (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.aarfcd_wifi_manager">nepi.resources.ns3.classes.aarfcd_wifi_manager (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.adhoc_wifi_mac">nepi.resources.ns3.classes.adhoc_wifi_mac (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.aloha_noack_net_device">nepi.resources.ns3.classes.aloha_noack_net_device (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.amrr_wifi_manager">nepi.resources.ns3.classes.amrr_wifi_manager (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.ap_wifi_mac">nepi.resources.ns3.classes.ap_wifi_mac (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.arf_wifi_manager">nepi.resources.ns3.classes.arf_wifi_manager (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.arp_l3protocol">nepi.resources.ns3.classes.arp_l3protocol (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.base_station_net_device">nepi.resources.ns3.classes.base_station_net_device (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.binary_error_model">nepi.resources.ns3.classes.binary_error_model (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.binary_error_sixlow_model">nepi.resources.ns3.classes.binary_error_sixlow_model (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.bridge_channel">nepi.resources.ns3.classes.bridge_channel (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.bridge_net_device">nepi.resources.ns3.classes.bridge_net_device (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.bulk_send_application">nepi.resources.ns3.classes.bulk_send_application (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.burst_error_model">nepi.resources.ns3.classes.burst_error_model (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.cara_wifi_manager">nepi.resources.ns3.classes.cara_wifi_manager (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.constant_acceleration_mobility_model">nepi.resources.ns3.classes.constant_acceleration_mobility_model (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.constant_position_mobility_model">nepi.resources.ns3.classes.constant_position_mobility_model (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.constant_rate_wifi_manager">nepi.resources.ns3.classes.constant_rate_wifi_manager (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.constant_speed_propagation_delay_model">nepi.resources.ns3.classes.constant_speed_propagation_delay_model (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.constant_velocity_mobility_model">nepi.resources.ns3.classes.constant_velocity_mobility_model (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.cost231propagation_loss_model">nepi.resources.ns3.classes.cost231propagation_loss_model (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.csma_channel">nepi.resources.ns3.classes.csma_channel (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.csma_net_device">nepi.resources.ns3.classes.csma_net_device (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.drop_tail_queue">nepi.resources.ns3.classes.drop_tail_queue (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.dsrdsr_routing">nepi.resources.ns3.classes.dsrdsr_routing (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.emu_net_device">nepi.resources.ns3.classes.emu_net_device (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.error_channel">nepi.resources.ns3.classes.error_channel (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.error_channel_sixlow">nepi.resources.ns3.classes.error_channel_sixlow (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.error_net_device">nepi.resources.ns3.classes.error_net_device (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.fd_net_device">nepi.resources.ns3.classes.fd_net_device (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.fixed_rss_loss_model">nepi.resources.ns3.classes.fixed_rss_loss_model (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.friis_propagation_loss_model">nepi.resources.ns3.classes.friis_propagation_loss_model (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.gauss_markov_mobility_model">nepi.resources.ns3.classes.gauss_markov_mobility_model (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.hierarchical_mobility_model">nepi.resources.ns3.classes.hierarchical_mobility_model (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.hybrid_buildings_propagation_loss_model">nepi.resources.ns3.classes.hybrid_buildings_propagation_loss_model (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.icmpv4l4protocol">nepi.resources.ns3.classes.icmpv4l4protocol (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.icmpv6l4protocol">nepi.resources.ns3.classes.icmpv6l4protocol (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.ideal_wifi_manager">nepi.resources.ns3.classes.ideal_wifi_manager (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.ipv4l3protocol">nepi.resources.ns3.classes.ipv4l3protocol (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.itu_r1411los_propagation_loss_model">nepi.resources.ns3.classes.itu_r1411los_propagation_loss_model (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.itu_r1411nlos_over_rooftop_propagation_loss_model">nepi.resources.ns3.classes.itu_r1411nlos_over_rooftop_propagation_loss_model (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.jakes_propagation_loss_model">nepi.resources.ns3.classes.jakes_propagation_loss_model (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.kun2600mhz_propagation_loss_model">nepi.resources.ns3.classes.kun2600mhz_propagation_loss_model (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.list_error_model">nepi.resources.ns3.classes.list_error_model (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.log_distance_propagation_loss_model">nepi.resources.ns3.classes.log_distance_propagation_loss_model (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.loopback_net_device">nepi.resources.ns3.classes.loopback_net_device (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.lr_wpan_net_device">nepi.resources.ns3.classes.lr_wpan_net_device (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.lte_enb_net_device">nepi.resources.ns3.classes.lte_enb_net_device (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.lte_simple_net_device">nepi.resources.ns3.classes.lte_simple_net_device (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.lte_ue_net_device">nepi.resources.ns3.classes.lte_ue_net_device (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.matrix_propagation_loss_model">nepi.resources.ns3.classes.matrix_propagation_loss_model (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.mesh_point_device">nepi.resources.ns3.classes.mesh_point_device (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.mesh_wifi_interface_mac">nepi.resources.ns3.classes.mesh_wifi_interface_mac (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.minstrel_wifi_manager">nepi.resources.ns3.classes.minstrel_wifi_manager (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.multi_model_spectrum_channel">nepi.resources.ns3.classes.multi_model_spectrum_channel (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.nakagami_propagation_loss_model">nepi.resources.ns3.classes.nakagami_propagation_loss_model (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.nist_error_rate_model">nepi.resources.ns3.classes.nist_error_rate_model (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.node">nepi.resources.ns3.classes.node (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.non_communicating_net_device">nepi.resources.ns3.classes.non_communicating_net_device (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.ocb_wifi_mac">nepi.resources.ns3.classes.ocb_wifi_mac (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.oh_buildings_propagation_loss_model">nepi.resources.ns3.classes.oh_buildings_propagation_loss_model (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.okumura_hata_propagation_loss_model">nepi.resources.ns3.classes.okumura_hata_propagation_loss_model (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.on_off_application">nepi.resources.ns3.classes.on_off_application (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.onoe_wifi_manager">nepi.resources.ns3.classes.onoe_wifi_manager (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.packet_sink">nepi.resources.ns3.classes.packet_sink (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.ping6">nepi.resources.ns3.classes.ping6 (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.point_to_point_channel">nepi.resources.ns3.classes.point_to_point_channel (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.point_to_point_net_device">nepi.resources.ns3.classes.point_to_point_net_device (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.point_to_point_remote_channel">nepi.resources.ns3.classes.point_to_point_remote_channel (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.radvd">nepi.resources.ns3.classes.radvd (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.random_direction2d_mobility_model">nepi.resources.ns3.classes.random_direction2d_mobility_model (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.random_propagation_delay_model">nepi.resources.ns3.classes.random_propagation_delay_model (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.random_propagation_loss_model">nepi.resources.ns3.classes.random_propagation_loss_model (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.random_walk2d_mobility_model">nepi.resources.ns3.classes.random_walk2d_mobility_model (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.random_waypoint_mobility_model">nepi.resources.ns3.classes.random_waypoint_mobility_model (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.range_propagation_loss_model">nepi.resources.ns3.classes.range_propagation_loss_model (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.rate_error_model">nepi.resources.ns3.classes.rate_error_model (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.receive_list_error_model">nepi.resources.ns3.classes.receive_list_error_model (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.red_queue">nepi.resources.ns3.classes.red_queue (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.rraa_wifi_manager">nepi.resources.ns3.classes.rraa_wifi_manager (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.simple_channel">nepi.resources.ns3.classes.simple_channel (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.simple_net_device">nepi.resources.ns3.classes.simple_net_device (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.single_model_spectrum_channel">nepi.resources.ns3.classes.single_model_spectrum_channel (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.six_low_pan_net_device">nepi.resources.ns3.classes.six_low_pan_net_device (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.sta_wifi_mac">nepi.resources.ns3.classes.sta_wifi_mac (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.steady_state_random_waypoint_mobility_model">nepi.resources.ns3.classes.steady_state_random_waypoint_mobility_model (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.subscriber_station_net_device">nepi.resources.ns3.classes.subscriber_station_net_device (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.tap_bridge">nepi.resources.ns3.classes.tap_bridge (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.tcp_l4protocol">nepi.resources.ns3.classes.tcp_l4protocol (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.three_log_distance_propagation_loss_model">nepi.resources.ns3.classes.three_log_distance_propagation_loss_model (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.two_ray_ground_propagation_loss_model">nepi.resources.ns3.classes.two_ray_ground_propagation_loss_model (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.uan_channel">nepi.resources.ns3.classes.uan_channel (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.udp_client">nepi.resources.ns3.classes.udp_client (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.udp_echo_client">nepi.resources.ns3.classes.udp_echo_client (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.udp_echo_server">nepi.resources.ns3.classes.udp_echo_server (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.udp_l4protocol">nepi.resources.ns3.classes.udp_l4protocol (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.udp_server">nepi.resources.ns3.classes.udp_server (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.udp_trace_client">nepi.resources.ns3.classes.udp_trace_client (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.v4ping">nepi.resources.ns3.classes.v4ping (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.virtual_net_device">nepi.resources.ns3.classes.virtual_net_device (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.waypoint_mobility_model">nepi.resources.ns3.classes.waypoint_mobility_model (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.wifi_net_device">nepi.resources.ns3.classes.wifi_net_device (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.yans_error_rate_model">nepi.resources.ns3.classes.yans_error_rate_model (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.yans_wifi_channel">nepi.resources.ns3.classes.yans_wifi_channel (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.yans_wifi_phy">nepi.resources.ns3.classes.yans_wifi_phy (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3application">nepi.resources.ns3.ns3application (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3arpl3protocol">nepi.resources.ns3.ns3arpl3protocol (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3base">nepi.resources.ns3.ns3base (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3ccndceapplication">nepi.resources.ns3.ns3ccndceapplication (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3channel">nepi.resources.ns3.ns3channel (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3client">nepi.resources.ns3.ns3client (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3dceapplication">nepi.resources.ns3.ns3dceapplication (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3dcehelper">nepi.resources.ns3.ns3dcehelper (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3errormodel">nepi.resources.ns3.ns3errormodel (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3errorratemodel">nepi.resources.ns3.ns3errorratemodel (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3fdnetdevice">nepi.resources.ns3.ns3fdnetdevice (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3icmpv4l4protocol">nepi.resources.ns3.ns3icmpv4l4protocol (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3ipv4l3protocol">nepi.resources.ns3.ns3ipv4l3protocol (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3mobilitymodel">nepi.resources.ns3.ns3mobilitymodel (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3netdevice">nepi.resources.ns3.ns3netdevice (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3node">nepi.resources.ns3.ns3node (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3pipechanel">nepi.resources.ns3.ns3pipechanel (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3propagationdelaymodel">nepi.resources.ns3.ns3propagationdelaymodel (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3propagationlossmodel">nepi.resources.ns3.ns3propagationlossmodel (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3queue">nepi.resources.ns3.ns3queue (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3route">nepi.resources.ns3.ns3route (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3server">nepi.resources.ns3.ns3server (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3simulation">nepi.resources.ns3.ns3simulation (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3wifichannel">nepi.resources.ns3.ns3wifichannel (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3wifimac">nepi.resources.ns3.ns3wifimac (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3wifinetdevice">nepi.resources.ns3.ns3wifinetdevice (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3wifiphy">nepi.resources.ns3.ns3wifiphy (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3wifiremotestationmanager">nepi.resources.ns3.ns3wifiremotestationmanager (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3wrapper">nepi.resources.ns3.ns3wrapper (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3wrapper_debug">nepi.resources.ns3.ns3wrapper_debug (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.resource_manager_generator">nepi.resources.ns3.resource_manager_generator (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#module-nepi.resources.omf">nepi.resources.omf (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#module-nepi.resources.omf.application">nepi.resources.omf.application (module)</a>
+  </dt>
+
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.resources.omf.html#module-nepi.resources.omf.channel">nepi.resources.omf.channel (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#module-nepi.resources.omf.interface">nepi.resources.omf.interface (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#module-nepi.resources.omf.messages_5_4">nepi.resources.omf.messages_5_4 (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#module-nepi.resources.omf.messages_6">nepi.resources.omf.messages_6 (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#module-nepi.resources.omf.node">nepi.resources.omf.node (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#module-nepi.resources.omf.omf5_api">nepi.resources.omf.omf5_api (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#module-nepi.resources.omf.omf6_api">nepi.resources.omf.omf6_api (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#module-nepi.resources.omf.omf6_parser">nepi.resources.omf.omf6_parser (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#module-nepi.resources.omf.omf_api_factory">nepi.resources.omf.omf_api_factory (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#module-nepi.resources.omf.omf_client">nepi.resources.omf.omf_client (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#module-nepi.resources.omf.omf_resource">nepi.resources.omf.omf_resource (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#module-nepi.resources.omf.wilabt_node">nepi.resources.omf.wilabt_node (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#module-nepi.resources.planetlab">nepi.resources.planetlab (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#module-nepi.resources.planetlab.node">nepi.resources.planetlab.node (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.ns3.html#module-nepi.resources.planetlab.ns3">nepi.resources.planetlab.ns3 (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.ns3.html#module-nepi.resources.planetlab.ns3.fdudptunnel">nepi.resources.planetlab.ns3.fdudptunnel (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.ns3.html#module-nepi.resources.planetlab.ns3.tuntapfdlink">nepi.resources.planetlab.ns3.tuntapfdlink (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.openvswitch.html#module-nepi.resources.planetlab.openvswitch">nepi.resources.planetlab.openvswitch (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.openvswitch.html#module-nepi.resources.planetlab.openvswitch.ovs">nepi.resources.planetlab.openvswitch.ovs (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.openvswitch.html#module-nepi.resources.planetlab.openvswitch.ovsport">nepi.resources.planetlab.openvswitch.ovsport (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#module-nepi.resources.planetlab.plcapi">nepi.resources.planetlab.plcapi (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#module-nepi.resources.planetlab.sfa_node">nepi.resources.planetlab.sfa_node (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#module-nepi.resources.planetlab.tap">nepi.resources.planetlab.tap (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#module-nepi.resources.planetlab.tun">nepi.resources.planetlab.tun (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#module-nepi.resources.planetlab.vroute">nepi.resources.planetlab.vroute (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#module-nepi.util">nepi.util (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#module-nepi.util.environ">nepi.util.environ (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#module-nepi.util.execfuncs">nepi.util.execfuncs (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#module-nepi.util.guid">nepi.util.guid (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#module-nepi.util.logger">nepi.util.logger (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#module-nepi.util.manifoldapi">nepi.util.manifoldapi (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#module-nepi.util.netgraph">nepi.util.netgraph (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#module-nepi.util.parallel">nepi.util.parallel (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.parsers.html#module-nepi.util.parsers">nepi.util.parsers (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.parsers.html#module-nepi.util.parsers.xml_parser">nepi.util.parsers.xml_parser (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#module-nepi.util.plotter">nepi.util.plotter (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#module-nepi.util.rmatcher">nepi.util.rmatcher (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#module-nepi.util.serializer">nepi.util.serializer (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#module-nepi.util.sfaapi">nepi.util.sfaapi (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#module-nepi.util.sfarspec_proc">nepi.util.sfarspec_proc (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#module-nepi.util.sshfuncs">nepi.util.sshfuncs (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#module-nepi.util.statfuncs">nepi.util.statfuncs (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#module-nepi.util.timefuncs">nepi.util.timefuncs (module)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.nepi_home">nepi_home (nepi.resources.linux.node.LinuxNode attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.netgraph.NetGraph">NetGraph (class in nepi.util.netgraph)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.netgraph">netgraph (nepi.execution.ec.ExperimentController attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.netns_repo">netns_repo (nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.netns_src">netns_src (nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.netns_version">netns_version (nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsapplication.NetNSApplication">NetNSApplication (class in nepi.resources.netns.netnsapplication)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsbase.NetNSBase">NetNSBase (class in nepi.resources.netns.netnsbase)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsclient.NetNSClient">NetNSClient (class in nepi.resources.netns.netnsclient)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsemulation.NetNSEmulation">NetNSEmulation (class in nepi.resources.netns.netnsemulation)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsinterface.NetNSInterface">NetNSInterface (class in nepi.resources.netns.netnsinterface)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsipv4address.NetNSIPv4Address">NetNSIPv4Address (class in nepi.resources.netns.netnsipv4address)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsroute.NetNSIPv4Route">NetNSIPv4Route (class in nepi.resources.netns.netnsroute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsnode.NetNSNode">NetNSNode (class in nepi.resources.netns.netnsnode)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsnodeinterface.NetNSNodeInterface">NetNSNodeInterface (class in nepi.resources.netns.netnsnodeinterface)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsswitch.NetNSSwitch">NetNSSwitch (class in nepi.resources.netns.netnsswitch)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper.NetNSWrapper">NetNSWrapper (class in nepi.resources.netns.netnswrapper)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger">NetNSWrapperDebuger (class in nepi.resources.netns.netnswrapper_debug)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsserver.NetNSWrapperMessage">NetNSWrapperMessage (class in nepi.resources.netns.netnsserver)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.network_types">network_types (nepi.resources.planetlab.plcapi.PLCAPI attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceState.NEW">NEW (nepi.execution.resource.ResourceState attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.scheduler.TaskStatus.NEW">(nepi.execution.scheduler.TaskStatus attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.messages_5_4.MessageHandler.newexp_function">newexp_function() (nepi.resources.omf.messages_5_4.MessageHandler method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.scheduler.HeapScheduler.next">next() (nepi.execution.scheduler.HeapScheduler method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.util.html#nepi.util.guid.GuidGenerator.next">(nepi.util.guid.GuidGenerator method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.node">node (nepi.resources.linux.application.LinuxApplication attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnapplication.LinuxCCNApplication.node">(nepi.resources.linux.ccn.ccnapplication.LinuxCCNApplication attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccncontent.LinuxCCNContent.node">(nepi.resources.linux.ccn.ccncontent.LinuxCCNContent attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnr.LinuxCCNR.node">(nepi.resources.linux.ccn.ccnr.LinuxCCNR attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.node">(nepi.resources.linux.ccn.fibentry.LinuxFIBEntry attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.interface.LinuxInterface.node">(nepi.resources.linux.interface.LinuxInterface attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink.node">(nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.route.LinuxRoute.node">(nepi.resources.linux.route.LinuxRoute attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.node">(nepi.resources.linux.tap.LinuxTap attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsapplication.NetNSApplication.node">(nepi.resources.netns.netnsapplication.NetNSApplication attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsipv4address.NetNSIPv4Address.node">(nepi.resources.netns.netnsipv4address.NetNSIPv4Address attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsnodeinterface.NetNSNodeInterface.node">(nepi.resources.netns.netnsnodeinterface.NetNSNodeInterface attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsroute.NetNSIPv4Route.node">(nepi.resources.netns.netnsroute.NetNSIPv4Route attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsswitch.NetNSSwitch.node">(nepi.resources.netns.netnsswitch.NetNSSwitch attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3application.NS3BaseApplication.node">(nepi.resources.ns3.ns3application.NS3BaseApplication attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3arpl3protocol.NS3BaseArpL3Protocol.node">(nepi.resources.ns3.ns3arpl3protocol.NS3BaseArpL3Protocol attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3base.NS3Base.node">(nepi.resources.ns3.ns3base.NS3Base attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3errorratemodel.NS3BaseErrorRateModel.node">(nepi.resources.ns3.ns3errorratemodel.NS3BaseErrorRateModel attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3icmpv4l4protocol.NS3BaseIcmpv4L4Protocol.node">(nepi.resources.ns3.ns3icmpv4l4protocol.NS3BaseIcmpv4L4Protocol attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3ipv4l3protocol.NS3BaseIpv4L3Protocol.node">(nepi.resources.ns3.ns3ipv4l3protocol.NS3BaseIpv4L3Protocol attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice.node">(nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3pipechanel.NS3BasePipeChannel.node">(nepi.resources.ns3.ns3pipechanel.NS3BasePipeChannel attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3queue.NS3BaseQueue.node">(nepi.resources.ns3.ns3queue.NS3BaseQueue attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3route.NS3Route.node">(nepi.resources.ns3.ns3route.NS3Route attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wifimac.NS3BaseWifiMac.node">(nepi.resources.ns3.ns3wifimac.NS3BaseWifiMac attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wifiphy.NS3BaseWifiPhy.node">(nepi.resources.ns3.ns3wifiphy.NS3BaseWifiPhy attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager.node">(nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.application.OMFApplication.node">(nepi.resources.omf.application.OMFApplication attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.interface.OMFWifiInterface.node">(nepi.resources.omf.interface.OMFWifiInterface attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch.node">(nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.node">(nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.tap.PlanetlabTap.node">(nepi.resources.planetlab.tap.PlanetlabTap attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.vroute.PlanetlabVroute.node">(nepi.resources.planetlab.vroute.PlanetlabVroute attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.node1">node1 (nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.node2">node2 (nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.netgraph.NetGraph.node_annotation">node_annotation() (nepi.util.netgraph.NetGraph method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.netgraph.NetGraph.node_annotations">node_annotations() (nepi.util.netgraph.NetGraph method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.node_home">node_home (nepi.resources.linux.node.LinuxNode attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3node.NS3BaseNode.node_id">node_id (nepi.resources.ns3.ns3node.NS3BaseNode attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.netgraph.NetGraph.node_ip_annotations">node_ip_annotations() (nepi.util.netgraph.NetGraph method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.nodes">nodes() (nepi.resources.omf.omf_client.OMFClient method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.util.html#nepi.util.netgraph.NetGraph.nodes">(nepi.util.netgraph.NetGraph method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.messages_5_4.MessageHandler.noop_function">noop_function() (nepi.resources.omf.messages_5_4.MessageHandler method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.attribute.Flags.NoRead">NoRead (nepi.execution.attribute.Flags attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.sshfuncs.ProcStatus.NOT_STARTED">NOT_STARTED (nepi.util.sshfuncs.ProcStatus attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.attribute.Flags.NoWrite">NoWrite (nepi.execution.attribute.Flags attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.NS3Wrapper.ns3">ns3 (nepi.resources.ns3.ns3wrapper.NS3Wrapper attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.ns3_build_location">ns3_build_location (nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3simulation.NS3Simulation.ns3_get">ns3_get() (nepi.resources.ns3.ns3simulation.NS3Simulation method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.ns3_repo">ns3_repo (nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3simulation.NS3Simulation.ns3_set">ns3_set() (nepi.resources.ns3.ns3simulation.NS3Simulation method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.ns3_src_location">ns3_src_location (nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.aarfcd_wifi_manager.NS3AarfcdWifiManager">NS3AarfcdWifiManager (class in nepi.resources.ns3.classes.aarfcd_wifi_manager)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.aarf_wifi_manager.NS3AarfWifiManager">NS3AarfWifiManager (class in nepi.resources.ns3.classes.aarf_wifi_manager)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.adhoc_wifi_mac.NS3AdhocWifiMac">NS3AdhocWifiMac (class in nepi.resources.ns3.classes.adhoc_wifi_mac)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.aloha_noack_net_device.NS3AlohaNoackNetDevice">NS3AlohaNoackNetDevice (class in nepi.resources.ns3.classes.aloha_noack_net_device)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.amrr_wifi_manager.NS3AmrrWifiManager">NS3AmrrWifiManager (class in nepi.resources.ns3.classes.amrr_wifi_manager)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.ap_wifi_mac.NS3ApWifiMac">NS3ApWifiMac (class in nepi.resources.ns3.classes.ap_wifi_mac)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.arf_wifi_manager.NS3ArfWifiManager">NS3ArfWifiManager (class in nepi.resources.ns3.classes.arf_wifi_manager)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.arp_l3protocol.NS3ArpL3Protocol">NS3ArpL3Protocol (class in nepi.resources.ns3.classes.arp_l3protocol)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3base.NS3Base">NS3Base (class in nepi.resources.ns3.ns3base)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3application.NS3BaseApplication">NS3BaseApplication (class in nepi.resources.ns3.ns3application)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3arpl3protocol.NS3BaseArpL3Protocol">NS3BaseArpL3Protocol (class in nepi.resources.ns3.ns3arpl3protocol)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3ccndceapplication.NS3BaseCCNDceApplication">NS3BaseCCNDceApplication (class in nepi.resources.ns3.ns3ccndceapplication)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3channel.NS3BaseChannel">NS3BaseChannel (class in nepi.resources.ns3.ns3channel)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3dceapplication.NS3BaseDceApplication">NS3BaseDceApplication (class in nepi.resources.ns3.ns3dceapplication)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3errormodel.NS3BaseErrorModel">NS3BaseErrorModel (class in nepi.resources.ns3.ns3errormodel)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3errorratemodel.NS3BaseErrorRateModel">NS3BaseErrorRateModel (class in nepi.resources.ns3.ns3errorratemodel)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3fdnetdevice.NS3BaseFdNetDevice">NS3BaseFdNetDevice (class in nepi.resources.ns3.ns3fdnetdevice)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3icmpv4l4protocol.NS3BaseIcmpv4L4Protocol">NS3BaseIcmpv4L4Protocol (class in nepi.resources.ns3.ns3icmpv4l4protocol)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3ipv4l3protocol.NS3BaseIpv4L3Protocol">NS3BaseIpv4L3Protocol (class in nepi.resources.ns3.ns3ipv4l3protocol)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3mobilitymodel.NS3BaseMobilityModel">NS3BaseMobilityModel (class in nepi.resources.ns3.ns3mobilitymodel)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice">NS3BaseNetDevice (class in nepi.resources.ns3.ns3netdevice)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3node.NS3BaseNode">NS3BaseNode (class in nepi.resources.ns3.ns3node)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3pipechanel.NS3BasePipeChannel">NS3BasePipeChannel (class in nepi.resources.ns3.ns3pipechanel)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3propagationdelaymodel.NS3BasePropagationDelayModel">NS3BasePropagationDelayModel (class in nepi.resources.ns3.ns3propagationdelaymodel)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel">NS3BasePropagationLossModel (class in nepi.resources.ns3.ns3propagationlossmodel)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3queue.NS3BaseQueue">NS3BaseQueue (class in nepi.resources.ns3.ns3queue)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.base_station_net_device.NS3BaseStationNetDevice">NS3BaseStationNetDevice (class in nepi.resources.ns3.classes.base_station_net_device)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wifichannel.NS3BaseWifiChannel">NS3BaseWifiChannel (class in nepi.resources.ns3.ns3wifichannel)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wifimac.NS3BaseWifiMac">NS3BaseWifiMac (class in nepi.resources.ns3.ns3wifimac)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wifinetdevice.NS3BaseWifiNetDevice">NS3BaseWifiNetDevice (class in nepi.resources.ns3.ns3wifinetdevice)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wifiphy.NS3BaseWifiPhy">NS3BaseWifiPhy (class in nepi.resources.ns3.ns3wifiphy)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager">NS3BaseWifiRemoteStationManager (class in nepi.resources.ns3.ns3wifiremotestationmanager)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.binary_error_model.NS3BinaryErrorModel">NS3BinaryErrorModel (class in nepi.resources.ns3.classes.binary_error_model)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.binary_error_sixlow_model.NS3BinaryErrorSixlowModel">NS3BinaryErrorSixlowModel (class in nepi.resources.ns3.classes.binary_error_sixlow_model)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.bridge_channel.NS3BridgeChannel">NS3BridgeChannel (class in nepi.resources.ns3.classes.bridge_channel)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.bridge_net_device.NS3BridgeNetDevice">NS3BridgeNetDevice (class in nepi.resources.ns3.classes.bridge_net_device)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.bulk_send_application.NS3BulkSendApplication">NS3BulkSendApplication (class in nepi.resources.ns3.classes.bulk_send_application)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.burst_error_model.NS3BurstErrorModel">NS3BurstErrorModel (class in nepi.resources.ns3.classes.burst_error_model)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.cara_wifi_manager.NS3CaraWifiManager">NS3CaraWifiManager (class in nepi.resources.ns3.classes.cara_wifi_manager)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3client.NS3Client">NS3Client (class in nepi.resources.ns3.ns3client)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.constant_acceleration_mobility_model.NS3ConstantAccelerationMobilityModel">NS3ConstantAccelerationMobilityModel (class in nepi.resources.ns3.classes.constant_acceleration_mobility_model)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.constant_position_mobility_model.NS3ConstantPositionMobilityModel">NS3ConstantPositionMobilityModel (class in nepi.resources.ns3.classes.constant_position_mobility_model)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.constant_rate_wifi_manager.NS3ConstantRateWifiManager">NS3ConstantRateWifiManager (class in nepi.resources.ns3.classes.constant_rate_wifi_manager)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.constant_speed_propagation_delay_model.NS3ConstantSpeedPropagationDelayModel">NS3ConstantSpeedPropagationDelayModel (class in nepi.resources.ns3.classes.constant_speed_propagation_delay_model)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.constant_velocity_mobility_model.NS3ConstantVelocityMobilityModel">NS3ConstantVelocityMobilityModel (class in nepi.resources.ns3.classes.constant_velocity_mobility_model)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.cost231propagation_loss_model.NS3Cost231PropagationLossModel">NS3Cost231PropagationLossModel (class in nepi.resources.ns3.classes.cost231propagation_loss_model)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.csma_channel.NS3CsmaChannel">NS3CsmaChannel (class in nepi.resources.ns3.classes.csma_channel)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.csma_net_device.NS3CsmaNetDevice">NS3CsmaNetDevice (class in nepi.resources.ns3.classes.csma_net_device)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3dcehelper.NS3DceHelper">NS3DceHelper (class in nepi.resources.ns3.ns3dcehelper)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.drop_tail_queue.NS3DropTailQueue">NS3DropTailQueue (class in nepi.resources.ns3.classes.drop_tail_queue)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.dsrdsr_routing.NS3dsrDsrRouting">NS3dsrDsrRouting (class in nepi.resources.ns3.classes.dsrdsr_routing)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.emu_net_device.NS3EmuNetDevice">NS3EmuNetDevice (class in nepi.resources.ns3.classes.emu_net_device)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.error_channel.NS3ErrorChannel">NS3ErrorChannel (class in nepi.resources.ns3.classes.error_channel)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.error_channel_sixlow.NS3ErrorChannelSixlow">NS3ErrorChannelSixlow (class in nepi.resources.ns3.classes.error_channel_sixlow)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.error_net_device.NS3ErrorNetDevice">NS3ErrorNetDevice (class in nepi.resources.ns3.classes.error_net_device)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.fd_net_device.NS3FdNetDevice">NS3FdNetDevice (class in nepi.resources.ns3.classes.fd_net_device)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.fixed_rss_loss_model.NS3FixedRssLossModel">NS3FixedRssLossModel (class in nepi.resources.ns3.classes.fixed_rss_loss_model)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.friis_propagation_loss_model.NS3FriisPropagationLossModel">NS3FriisPropagationLossModel (class in nepi.resources.ns3.classes.friis_propagation_loss_model)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.gauss_markov_mobility_model.NS3GaussMarkovMobilityModel">NS3GaussMarkovMobilityModel (class in nepi.resources.ns3.classes.gauss_markov_mobility_model)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.hierarchical_mobility_model.NS3HierarchicalMobilityModel">NS3HierarchicalMobilityModel (class in nepi.resources.ns3.classes.hierarchical_mobility_model)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.hybrid_buildings_propagation_loss_model.NS3HybridBuildingsPropagationLossModel">NS3HybridBuildingsPropagationLossModel (class in nepi.resources.ns3.classes.hybrid_buildings_propagation_loss_model)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.icmpv4l4protocol.NS3Icmpv4L4Protocol">NS3Icmpv4L4Protocol (class in nepi.resources.ns3.classes.icmpv4l4protocol)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.icmpv6l4protocol.NS3Icmpv6L4Protocol">NS3Icmpv6L4Protocol (class in nepi.resources.ns3.classes.icmpv6l4protocol)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.ideal_wifi_manager.NS3IdealWifiManager">NS3IdealWifiManager (class in nepi.resources.ns3.classes.ideal_wifi_manager)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.ipv4l3protocol.NS3Ipv4L3Protocol">NS3Ipv4L3Protocol (class in nepi.resources.ns3.classes.ipv4l3protocol)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.itu_r1411los_propagation_loss_model.NS3ItuR1411LosPropagationLossModel">NS3ItuR1411LosPropagationLossModel (class in nepi.resources.ns3.classes.itu_r1411los_propagation_loss_model)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.itu_r1411nlos_over_rooftop_propagation_loss_model.NS3ItuR1411NlosOverRooftopPropagationLossModel">NS3ItuR1411NlosOverRooftopPropagationLossModel (class in nepi.resources.ns3.classes.itu_r1411nlos_over_rooftop_propagation_loss_model)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.jakes_propagation_loss_model.NS3JakesPropagationLossModel">NS3JakesPropagationLossModel (class in nepi.resources.ns3.classes.jakes_propagation_loss_model)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.kun2600mhz_propagation_loss_model.NS3Kun2600MhzPropagationLossModel">NS3Kun2600MhzPropagationLossModel (class in nepi.resources.ns3.classes.kun2600mhz_propagation_loss_model)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.list_error_model.NS3ListErrorModel">NS3ListErrorModel (class in nepi.resources.ns3.classes.list_error_model)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.log_distance_propagation_loss_model.NS3LogDistancePropagationLossModel">NS3LogDistancePropagationLossModel (class in nepi.resources.ns3.classes.log_distance_propagation_loss_model)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.loopback_net_device.NS3LoopbackNetDevice">NS3LoopbackNetDevice (class in nepi.resources.ns3.classes.loopback_net_device)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.lr_wpan_net_device.NS3LrWpanNetDevice">NS3LrWpanNetDevice (class in nepi.resources.ns3.classes.lr_wpan_net_device)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.lte_enb_net_device.NS3LteEnbNetDevice">NS3LteEnbNetDevice (class in nepi.resources.ns3.classes.lte_enb_net_device)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.lte_simple_net_device.NS3LteSimpleNetDevice">NS3LteSimpleNetDevice (class in nepi.resources.ns3.classes.lte_simple_net_device)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.lte_ue_net_device.NS3LteUeNetDevice">NS3LteUeNetDevice (class in nepi.resources.ns3.classes.lte_ue_net_device)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.matrix_propagation_loss_model.NS3MatrixPropagationLossModel">NS3MatrixPropagationLossModel (class in nepi.resources.ns3.classes.matrix_propagation_loss_model)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.mesh_point_device.NS3MeshPointDevice">NS3MeshPointDevice (class in nepi.resources.ns3.classes.mesh_point_device)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.mesh_wifi_interface_mac.NS3MeshWifiInterfaceMac">NS3MeshWifiInterfaceMac (class in nepi.resources.ns3.classes.mesh_wifi_interface_mac)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.minstrel_wifi_manager.NS3MinstrelWifiManager">NS3MinstrelWifiManager (class in nepi.resources.ns3.classes.minstrel_wifi_manager)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.multi_model_spectrum_channel.NS3MultiModelSpectrumChannel">NS3MultiModelSpectrumChannel (class in nepi.resources.ns3.classes.multi_model_spectrum_channel)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.nakagami_propagation_loss_model.NS3NakagamiPropagationLossModel">NS3NakagamiPropagationLossModel (class in nepi.resources.ns3.classes.nakagami_propagation_loss_model)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.nist_error_rate_model.NS3NistErrorRateModel">NS3NistErrorRateModel (class in nepi.resources.ns3.classes.nist_error_rate_model)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.node.NS3Node">NS3Node (class in nepi.resources.ns3.classes.node)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.non_communicating_net_device.NS3NonCommunicatingNetDevice">NS3NonCommunicatingNetDevice (class in nepi.resources.ns3.classes.non_communicating_net_device)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.ocb_wifi_mac.NS3OcbWifiMac">NS3OcbWifiMac (class in nepi.resources.ns3.classes.ocb_wifi_mac)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.oh_buildings_propagation_loss_model.NS3OhBuildingsPropagationLossModel">NS3OhBuildingsPropagationLossModel (class in nepi.resources.ns3.classes.oh_buildings_propagation_loss_model)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.okumura_hata_propagation_loss_model.NS3OkumuraHataPropagationLossModel">NS3OkumuraHataPropagationLossModel (class in nepi.resources.ns3.classes.okumura_hata_propagation_loss_model)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.onoe_wifi_manager.NS3OnoeWifiManager">NS3OnoeWifiManager (class in nepi.resources.ns3.classes.onoe_wifi_manager)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.on_off_application.NS3OnOffApplication">NS3OnOffApplication (class in nepi.resources.ns3.classes.on_off_application)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.packet_sink.NS3PacketSink">NS3PacketSink (class in nepi.resources.ns3.classes.packet_sink)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.ping6.NS3Ping6">NS3Ping6 (class in nepi.resources.ns3.classes.ping6)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.point_to_point_channel.NS3PointToPointChannel">NS3PointToPointChannel (class in nepi.resources.ns3.classes.point_to_point_channel)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.point_to_point_net_device.NS3PointToPointNetDevice">NS3PointToPointNetDevice (class in nepi.resources.ns3.classes.point_to_point_net_device)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.point_to_point_remote_channel.NS3PointToPointRemoteChannel">NS3PointToPointRemoteChannel (class in nepi.resources.ns3.classes.point_to_point_remote_channel)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.radvd.NS3Radvd">NS3Radvd (class in nepi.resources.ns3.classes.radvd)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.random_direction2d_mobility_model.NS3RandomDirection2dMobilityModel">NS3RandomDirection2dMobilityModel (class in nepi.resources.ns3.classes.random_direction2d_mobility_model)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.random_propagation_delay_model.NS3RandomPropagationDelayModel">NS3RandomPropagationDelayModel (class in nepi.resources.ns3.classes.random_propagation_delay_model)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.random_propagation_loss_model.NS3RandomPropagationLossModel">NS3RandomPropagationLossModel (class in nepi.resources.ns3.classes.random_propagation_loss_model)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.random_walk2d_mobility_model.NS3RandomWalk2dMobilityModel">NS3RandomWalk2dMobilityModel (class in nepi.resources.ns3.classes.random_walk2d_mobility_model)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.random_waypoint_mobility_model.NS3RandomWaypointMobilityModel">NS3RandomWaypointMobilityModel (class in nepi.resources.ns3.classes.random_waypoint_mobility_model)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.range_propagation_loss_model.NS3RangePropagationLossModel">NS3RangePropagationLossModel (class in nepi.resources.ns3.classes.range_propagation_loss_model)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.rate_error_model.NS3RateErrorModel">NS3RateErrorModel (class in nepi.resources.ns3.classes.rate_error_model)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.receive_list_error_model.NS3ReceiveListErrorModel">NS3ReceiveListErrorModel (class in nepi.resources.ns3.classes.receive_list_error_model)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.red_queue.NS3RedQueue">NS3RedQueue (class in nepi.resources.ns3.classes.red_queue)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3route.NS3Route">NS3Route (class in nepi.resources.ns3.ns3route)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.rraa_wifi_manager.NS3RraaWifiManager">NS3RraaWifiManager (class in nepi.resources.ns3.classes.rraa_wifi_manager)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.simple_channel.NS3SimpleChannel">NS3SimpleChannel (class in nepi.resources.ns3.classes.simple_channel)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.simple_net_device.NS3SimpleNetDevice">NS3SimpleNetDevice (class in nepi.resources.ns3.classes.simple_net_device)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3simulation.NS3Simulation">NS3Simulation (class in nepi.resources.ns3.ns3simulation)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.single_model_spectrum_channel.NS3SingleModelSpectrumChannel">NS3SingleModelSpectrumChannel (class in nepi.resources.ns3.classes.single_model_spectrum_channel)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.six_low_pan_net_device.NS3SixLowPanNetDevice">NS3SixLowPanNetDevice (class in nepi.resources.ns3.classes.six_low_pan_net_device)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.sta_wifi_mac.NS3StaWifiMac">NS3StaWifiMac (class in nepi.resources.ns3.classes.sta_wifi_mac)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.steady_state_random_waypoint_mobility_model.NS3SteadyStateRandomWaypointMobilityModel">NS3SteadyStateRandomWaypointMobilityModel (class in nepi.resources.ns3.classes.steady_state_random_waypoint_mobility_model)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.subscriber_station_net_device.NS3SubscriberStationNetDevice">NS3SubscriberStationNetDevice (class in nepi.resources.ns3.classes.subscriber_station_net_device)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.tap_bridge.NS3TapBridge">NS3TapBridge (class in nepi.resources.ns3.classes.tap_bridge)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.tcp_l4protocol.NS3TcpL4Protocol">NS3TcpL4Protocol (class in nepi.resources.ns3.classes.tcp_l4protocol)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.three_log_distance_propagation_loss_model.NS3ThreeLogDistancePropagationLossModel">NS3ThreeLogDistancePropagationLossModel (class in nepi.resources.ns3.classes.three_log_distance_propagation_loss_model)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.two_ray_ground_propagation_loss_model.NS3TwoRayGroundPropagationLossModel">NS3TwoRayGroundPropagationLossModel (class in nepi.resources.ns3.classes.two_ray_ground_propagation_loss_model)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.uan_channel.NS3UanChannel">NS3UanChannel (class in nepi.resources.ns3.classes.uan_channel)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.udp_client.NS3UdpClient">NS3UdpClient (class in nepi.resources.ns3.classes.udp_client)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.udp_echo_client.NS3UdpEchoClient">NS3UdpEchoClient (class in nepi.resources.ns3.classes.udp_echo_client)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.udp_echo_server.NS3UdpEchoServer">NS3UdpEchoServer (class in nepi.resources.ns3.classes.udp_echo_server)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.udp_l4protocol.NS3UdpL4Protocol">NS3UdpL4Protocol (class in nepi.resources.ns3.classes.udp_l4protocol)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.udp_server.NS3UdpServer">NS3UdpServer (class in nepi.resources.ns3.classes.udp_server)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.udp_trace_client.NS3UdpTraceClient">NS3UdpTraceClient (class in nepi.resources.ns3.classes.udp_trace_client)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.v4ping.NS3V4Ping">NS3V4Ping (class in nepi.resources.ns3.classes.v4ping)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.virtual_net_device.NS3VirtualNetDevice">NS3VirtualNetDevice (class in nepi.resources.ns3.classes.virtual_net_device)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.waypoint_mobility_model.NS3WaypointMobilityModel">NS3WaypointMobilityModel (class in nepi.resources.ns3.classes.waypoint_mobility_model)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.wifi_net_device.NS3WifiNetDevice">NS3WifiNetDevice (class in nepi.resources.ns3.classes.wifi_net_device)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.NS3Wrapper">NS3Wrapper (class in nepi.resources.ns3.ns3wrapper)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger">NS3WrapperDebuger (class in nepi.resources.ns3.ns3wrapper_debug)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3server.NS3WrapperMessage">NS3WrapperMessage (class in nepi.resources.ns3.ns3server)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.yans_error_rate_model.NS3YansErrorRateModel">NS3YansErrorRateModel (class in nepi.resources.ns3.classes.yans_error_rate_model)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.yans_wifi_channel.NS3YansWifiChannel">NS3YansWifiChannel (class in nepi.resources.ns3.classes.yans_wifi_channel)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.classes.html#nepi.resources.ns3.classes.yans_wifi_phy.NS3YansWifiPhy">NS3YansWifiPhy (class in nepi.resources.ns3.classes.yans_wifi_phy)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.nthreads">nthreads (nepi.execution.ec.ExperimentController attribute)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+<h2 id="O">O</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.FailureLevel.OK">OK (nepi.execution.ec.FailureLevel attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.ExitCode.OK">(nepi.resources.linux.node.ExitCode attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf5_api.OMF5API">OMF5API (class in nepi.resources.omf.omf5_api)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf6_api.OMF6API">OMF6API (class in nepi.resources.omf.omf6_api)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf6_parser.OMF6Parser">OMF6Parser (class in nepi.resources.omf.omf6_parser)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf_api_factory.OMFAPIFactory">OMFAPIFactory (class in nepi.resources.omf.omf_api_factory)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.application.OMFApplication">OMFApplication (class in nepi.resources.omf.application)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.channel.OMFChannel">OMFChannel (class in nepi.resources.omf.channel)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient">OMFClient (class in nepi.resources.omf.omf_client)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.node.OMFNode">OMFNode (class in nepi.resources.omf.node)</a>
+  </dt>
+
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf_resource.OMFResource">OMFResource (class in nepi.resources.omf.omf_resource)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.interface.OMFWifiInterface">OMFWifiInterface (class in nepi.resources.omf.interface)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3server.open_socket">open_socket() (in module nepi.resources.ns3.ns3server)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.sshfuncs.openssh_has_persist">openssh_has_persist() (in module nepi.util.sshfuncs)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.netgraph.NetGraph.order">order (nepi.util.netgraph.NetGraph attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.os">os (nepi.resources.linux.node.LinuxNode attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.OSType">OSType (class in nepi.resources.linux.node)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch.ovs_status">ovs_status() (nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.ovsswitch">ovsswitch (nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort attribute)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+<h2 id="P">P</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.parallel.ParallelRun">ParallelRun (class in nepi.util.parallel)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.data.processing.ccn.html#nepi.data.processing.ccn.parser.parse_file">parse_file() (in module nepi.data.processing.ccn.parser)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.data.processing.ping.html#nepi.data.processing.ping.parser.parse_file">(in module nepi.data.processing.ping.parser)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.sfarspec_proc.SfaRSpecProcessing.parse_sfa_rspec">parse_sfa_rspec() (nepi.util.sfarspec_proc.SfaRSpecProcessing method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.trace.TraceAttr.PATH">PATH (nepi.execution.trace.TraceAttr attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnd.LinuxCCND.path">path (nepi.resources.linux.ccn.ccnd.LinuxCCND attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.peer_map">peer_map (nepi.resources.planetlab.plcapi.PLCAPI attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.scheduler.HeapScheduler.pending">pending (nepi.execution.scheduler.HeapScheduler attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.persist">persist (nepi.execution.ec.ExperimentController attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.plotter.PFormats">PFormats (class in nepi.util.plotter)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3errorratemodel.NS3BaseErrorRateModel.phy">phy (nepi.resources.ns3.ns3errorratemodel.NS3BaseErrorRateModel attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wifichannel.NS3BaseWifiChannel.phys">phys (nepi.resources.ns3.ns3wifichannel.NS3BaseWifiChannel attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.pi">pi (nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.pid">pid (nepi.resources.linux.application.LinuxApplication attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3dceapplication.NS3BaseDceApplication.pid">(nepi.resources.ns3.ns3dceapplication.NS3BaseDceApplication attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.ping">ping (nepi.resources.linux.ccn.fibentry.LinuxFIBEntry attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.node.PlanetlabNode">PlanetlabNode (class in nepi.resources.planetlab.node)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.ns3.html#nepi.resources.planetlab.ns3.fdudptunnel.PlanetlabNs3FdUdpTunnel">PlanetlabNs3FdUdpTunnel (class in nepi.resources.planetlab.ns3.fdudptunnel)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort">PlanetlabOVSPort (class in nepi.resources.planetlab.openvswitch.ovsport)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch">PlanetlabOVSSwitch (class in nepi.resources.planetlab.openvswitch.ovs)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.sfa_node.PlanetlabSfaNode">PlanetlabSfaNode (class in nepi.resources.planetlab.sfa_node)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.tap.PlanetlabTap">PlanetlabTap (class in nepi.resources.planetlab.tap)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.tun.PlanetlabTun">PlanetlabTun (class in nepi.resources.planetlab.tun)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.ns3.html#nepi.resources.planetlab.ns3.tuntapfdlink.PlanetlabTunTapFdLink">PlanetlabTunTapFdLink (class in nepi.resources.planetlab.ns3.tuntapfdlink)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.vroute.PlanetlabVroute">PlanetlabVroute (class in nepi.resources.planetlab.vroute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.node.PlanetlabNode.plapi">plapi (nepi.resources.planetlab.node.PlanetlabNode attribute)</a>
+  </dt>
+
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI">PLCAPI (class in nepi.resources.planetlab.plcapi)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPIFactory">PLCAPIFactory (class in nepi.resources.planetlab.plcapi)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.plot">plot() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.util.html#nepi.util.plotter.ECPlotter.plot">(nepi.util.plotter.ECPlotter method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.populate_factory">populate_factory() (in module nepi.execution.resource)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.port_number">port_number (nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.ppid">ppid (nepi.resources.linux.application.LinuxApplication attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.data.processing.ccn.html#nepi.data.processing.ccn.parser.process_content_history">process_content_history() (in module nepi.data.processing.ccn.parser)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.data.processing.ccn.html#nepi.data.processing.ccn.parser.process_content_history_logs">process_content_history_logs() (in module nepi.data.processing.ccn.parser)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.sshfuncs.ProcStatus">ProcStatus (class in nepi.util.sshfuncs)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.provision">provision() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.provision">(nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.provision_time">provision_time (nepi.execution.resource.ResourceManager attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceState.PROVISIONED">PROVISIONED (nepi.execution.resource.ResourceState attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.publish">publish() (nepi.resources.omf.omf_client.OMFClient method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.purge">purge() (nepi.resources.omf.omf_client.OMFClient method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.parallel.ParallelRun.put">put() (nepi.util.parallel.ParallelRun method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.parallel.ParallelRun.put_nowait">put_nowait() (nepi.util.parallel.ParallelRun method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.pygccxml_version">pygccxml_version (nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.python_passfd_repo">python_passfd_repo (nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.python_passfd_src">python_passfd_src (nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.python_passfd_version">python_passfd_version (nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.python_unshare_repo">python_unshare_repo (nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.python_unshare_src">python_unshare_src (nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.python_unshare_version">python_unshare_version (nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation attribute)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+<h2 id="Q">Q</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice.queue">queue (nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice attribute)</a>
+  </dt>
+
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.parallel.WorkerThread.quit">quit() (nepi.util.parallel.WorkerThread method)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+<h2 id="R">R</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.attribute.Attribute.range">range (nepi.execution.attribute.Attribute attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.sshfuncs.rcopy">rcopy() (in module nepi.util.sshfuncs)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceState.READY">READY (nepi.execution.resource.ResourceState attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.ready">ready (nepi.resources.omf.omf_client.OMFClient attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.ready_time">ready_time (nepi.execution.resource.ResourceManager attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3fdnetdevice.NS3BaseFdNetDevice.recv_fd">recv_fd() (nepi.resources.ns3.ns3fdnetdevice.NS3BaseFdNetDevice method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsserver.recv_msg">recv_msg() (in module nepi.resources.netns.netnsserver)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3server.recv_msg">(in module nepi.resources.ns3.ns3server)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.register">register() (nepi.resources.omf.omf_client.OMFClient method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.register_condition">register_condition() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.register_condition">(nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.register_connection">register_connection() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.register_connection">(nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.register_resource">register_resource() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceFactory.register_type">register_type() (nepi.execution.resource.ResourceFactory class method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.release">release() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.release">(nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf5_api.OMF5API.release">(nepi.resources.omf.omf5_api.OMF5API method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.release">(nepi.resources.planetlab.plcapi.PLCAPI method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.util.html#nepi.util.sfaapi.SFAAPI.release">(nepi.util.sfaapi.SFAAPI method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf_api_factory.OMFAPIFactory.release_api">release_api() (nepi.resources.omf.omf_api_factory.OMFAPIFactory class method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.messages_6.MessageHandler.release_function">release_function() (nepi.resources.omf.messages_6.MessageHandler method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.release_time">release_time (nepi.execution.resource.ResourceManager attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ECState.RELEASED">RELEASED (nepi.execution.ec.ECState attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceState.RELEASED">(nepi.execution.resource.ResourceState attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.remote_socket">remote_socket (nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.remote_socket">(nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.scheduler.HeapScheduler.remove">remove() (nepi.execution.scheduler.HeapScheduler method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.sfaapi.SFAAPI.remove_all_from_slice">remove_all_from_slice() (nepi.util.sfaapi.SFAAPI method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.remove_packages">remove_packages() (nepi.resources.linux.node.LinuxNode method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.debfuncs.remove_packages_command">remove_packages_command() (in module nepi.resources.linux.debfuncs)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.rpmfuncs.remove_packages_command">(in module nepi.resources.linux.rpmfuncs)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.remove_resource">remove_resource() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.manifoldapi.MANIFOLDAPI.remove_resource_from_slice">remove_resource_from_slice() (nepi.util.manifoldapi.MANIFOLDAPI method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.util.html#nepi.util.sfaapi.SFAAPI.remove_resource_from_slice">(nepi.util.sfaapi.SFAAPI method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper.NetNSWrapper.replace_args">replace_args() (nepi.resources.netns.netnswrapper.NetNSWrapper method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.NS3Wrapper.replace_args">(nepi.resources.ns3.ns3wrapper.NS3Wrapper method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper.NetNSWrapper.replace_kwargs">replace_kwargs() (nepi.resources.netns.netnswrapper.NetNSWrapper method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.NS3Wrapper.replace_kwargs">(nepi.resources.ns3.ns3wrapper.NS3Wrapper method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.replace_paths">replace_paths() (nepi.resources.linux.application.LinuxApplication method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.replace_paths">(nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.replace_paths">(nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.messages_6.MessageHandler.request_function">request_function() (nepi.resources.omf.messages_6.MessageHandler method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.reschedule_delay">reschedule_delay (nepi.execution.resource.ResourceManager attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.reserve">reserve() (nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.reserve_host">reserve_host() (nepi.resources.planetlab.plcapi.PLCAPI method)</a>
+  </dt>
+
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.sfaapi.SFAAPI.reserve_resource">reserve_resource() (nepi.util.sfaapi.SFAAPI method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.attribute.Flags.Reserved">Reserved (nepi.execution.attribute.Flags attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceState.RESERVED">RESERVED (nepi.execution.resource.ResourceState attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.reserved">reserved() (nepi.resources.planetlab.plcapi.PLCAPI method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.util.html#nepi.util.sfaapi.SFAAPI.reserved">(nepi.util.sfaapi.SFAAPI method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.reserved_time">reserved_time (nepi.execution.resource.ResourceManager attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.sshfuncs.resolve_hostname">resolve_hostname() (in module nepi.util.sshfuncs)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceFactory.resource_types">resource_types() (nepi.execution.resource.ResourceFactory class method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceAction">ResourceAction (class in nepi.execution.resource)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceFactory">ResourceFactory (class in nepi.execution.resource)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf_resource.ResourceGateway">ResourceGateway (class in nepi.resources.omf.omf_resource)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager">ResourceManager (class in nepi.execution.resource)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.resources">resources (nepi.execution.ec.ExperimentController attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceState">ResourceState (class in nepi.execution.resource)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.retract">retract() (nepi.resources.omf.omf_client.OMFClient method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.sshfuncs.rexec">rexec() (in module nepi.util.sshfuncs)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.sshfuncs.rgetpid">rgetpid() (in module nepi.util.sshfuncs)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.sshfuncs.rkill">rkill() (in module nepi.util.sshfuncs)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.FailureLevel.RM_FAILURE">RM_FAILURE (nepi.execution.ec.FailureLevel attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.rmdir">rmdir() (nepi.resources.linux.node.LinuxNode method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.sshfuncs.rspawn">rspawn() (in module nepi.util.sshfuncs)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.sshfuncs.rstatus">rstatus() (in module nepi.util.sshfuncs)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.runner.ExperimentRunner.run">run() (nepi.execution.runner.ExperimentRunner method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.run">(nepi.resources.linux.node.LinuxNode method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.util.html#nepi.util.parallel.WorkerThread.run">(nepi.util.parallel.WorkerThread method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.run_and_wait">run_and_wait() (nepi.resources.linux.node.LinuxNode method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.run_dir">run_dir (nepi.execution.ec.ExperimentController attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.runner.ExperimentRunner.run_experiment">run_experiment() (nepi.execution.runner.ExperimentRunner method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.run_home">run_home (nepi.resources.linux.application.LinuxApplication attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.run_home">(nepi.resources.linux.node.LinuxNode attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.run_home">run_home() (nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tunnel.LinuxTunnel.run_home">(nepi.resources.linux.tunnel.LinuxTunnel method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.run_id">run_id (nepi.execution.ec.ExperimentController attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsserver.run_server">run_server() (in module nepi.resources.netns.netnsserver)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3server.run_server">(in module nepi.resources.ns3.ns3server)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ECState.RUNNING">RUNNING (nepi.execution.ec.ECState attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.util.html#nepi.util.sshfuncs.ProcStatus.RUNNING">(nepi.util.sshfuncs.ProcStatus attribute)</a>
+  </dt>
+
+      </dl></dd>
+  </dl></td>
+</tr></table>
+
+<h2 id="S">S</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.save">save() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.util.html#nepi.util.serializer.ECSerializer.save">(nepi.util.serializer.ECSerializer method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.schedule">schedule() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.scheduler.HeapScheduler.schedule">(nepi.execution.scheduler.HeapScheduler method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger.script_path">script_path (nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger.script_path">(nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.resource_manager_generator.select_base_class">select_base_class() (in module nepi.resources.ns3.resource_manager_generator)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.netgraph.NetGraph.select_random_source">select_random_source() (nepi.util.netgraph.NetGraph method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.netgraph.NetGraph.select_target_zero">select_target_zero() (nepi.util.netgraph.NetGraph method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsclient.LinuxNetNSClient.send_msg">send_msg() (nepi.resources.linux.netns.netnsclient.LinuxNetNSClient method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3client.LinuxNS3Client.send_msg">(nepi.resources.linux.ns3.ns3client.LinuxNS3Client method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsserver.send_reply">send_reply() (in module nepi.resources.netns.netnsserver)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3server.send_reply">(in module nepi.resources.ns3.ns3server)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf5_api.OMF5API.send_stdin">send_stdin() (nepi.resources.omf.omf5_api.OMF5API method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.serialize">serialize() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.util.html#nepi.util.serializer.ECSerializer.serialize">(nepi.util.serializer.ECSerializer method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch.servers_on">servers_on() (nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsserver.NetNSWrapperMessage.SET">SET (nepi.resources.netns.netnsserver.NetNSWrapperMessage attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3server.NS3WrapperMessage.SET">(nepi.resources.ns3.ns3server.NS3WrapperMessage attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.set">set() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set">(nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsclient.LinuxNetNSClient.set">(nepi.resources.linux.netns.netnsclient.LinuxNetNSClient method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3client.LinuxNS3Client.set">(nepi.resources.linux.ns3.ns3client.LinuxNS3Client method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsbase.NetNSBase.set">(nepi.resources.netns.netnsbase.NetNSBase method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsclient.NetNSClient.set">(nepi.resources.netns.netnsclient.NetNSClient method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper.NetNSWrapper.set">(nepi.resources.netns.netnswrapper.NetNSWrapper method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3base.NS3Base.set">(nepi.resources.ns3.ns3base.NS3Base method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3client.NS3Client.set">(nepi.resources.ns3.ns3client.NS3Client method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.NS3Wrapper.set">(nepi.resources.ns3.ns3wrapper.NS3Wrapper method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_discovered">set_discovered() (nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.FailureManager.set_ec">set_ec() (nepi.execution.ec.FailureManager method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.FailureManager.set_ec_failure">set_ec_failure() (nepi.execution.ec.FailureManager method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_failed">set_failed() (nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.set_global">set_global() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_global">(nepi.execution.resource.ResourceManager class method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.interface.LinuxInterface.set_hook_mtu">set_hook_mtu() (nepi.resources.linux.interface.LinuxInterface method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.interface.LinuxInterface.set_hook_up">set_hook_up() (nepi.resources.linux.interface.LinuxInterface method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_provisioned">set_provisioned() (nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_ready">set_ready() (nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_released">set_released() (nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_reserved">set_reserved() (nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.netgraph.NetGraph.set_source">set_source() (nepi.util.netgraph.NetGraph method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_started">set_started() (nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_state">set_state() (nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_state_time">set_state_time() (nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_stopped">set_stopped() (nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.netgraph.NetGraph.set_target">set_target() (nepi.util.netgraph.NetGraph method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.attribute.Attribute.set_value">set_value() (nepi.execution.attribute.Attribute method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.set_with_conditions">set_with_conditions() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.set_with_conditions">(nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.sfaapi.SFAAPI">SFAAPI (class in nepi.util.sfaapi)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.wilabt_node.WilabtSfaNode.sfaapi">sfaapi (nepi.resources.omf.wilabt_node.WilabtSfaNode attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.sfa_node.PlanetlabSfaNode.sfaapi">(nepi.resources.planetlab.sfa_node.PlanetlabSfaNode attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.sfaapi.SFAAPIFactory">SFAAPIFactory (class in nepi.util.sfaapi)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.sfarspec_proc.SfaRSpecProcessing">SfaRSpecProcessing (class in nepi.util.sfarspec_proc)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.serializer.SFormats">SFormats (class in nepi.util.serializer)</a>
+  </dt>
+
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.share_dir">share_dir (nepi.resources.linux.node.LinuxNode attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.sshfuncs.shell_escape">shell_escape() (in module nepi.util.sshfuncs)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsserver.NetNSWrapperMessage.SHUTDOWN">SHUTDOWN (nepi.resources.netns.netnsserver.NetNSWrapperMessage attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3server.NS3WrapperMessage.SHUTDOWN">(nepi.resources.ns3.ns3server.NS3WrapperMessage attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.shutdown">shutdown() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsclient.LinuxNetNSClient.shutdown">(nepi.resources.linux.netns.netnsclient.LinuxNetNSClient method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3client.LinuxNS3Client.shutdown">(nepi.resources.linux.ns3.ns3client.LinuxNS3Client method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsclient.NetNSClient.shutdown">(nepi.resources.netns.netnsclient.NetNSClient method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsemulation.NetNSEmulation.shutdown">(nepi.resources.netns.netnsemulation.NetNSEmulation method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnswrapper.NetNSWrapper.shutdown">(nepi.resources.netns.netnswrapper.NetNSWrapper method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3client.NS3Client.shutdown">(nepi.resources.ns3.ns3client.NS3Client method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3simulation.NS3Simulation.shutdown">(nepi.resources.ns3.ns3simulation.NS3Simulation method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.NS3Wrapper.shutdown">(nepi.resources.ns3.ns3wrapper.NS3Wrapper method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3client.LinuxNS3Client.simulation">simulation (nepi.resources.linux.ns3.ns3client.LinuxNS3Client attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3base.NS3Base.simulation">(nepi.resources.ns3.ns3base.NS3Base attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3channel.NS3BaseChannel.simulation">(nepi.resources.ns3.ns3channel.NS3BaseChannel attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3node.NS3BaseNode.simulation">(nepi.resources.ns3.ns3node.NS3BaseNode attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3propagationdelaymodel.NS3BasePropagationDelayModel.simulation">(nepi.resources.ns3.ns3propagationdelaymodel.NS3BasePropagationDelayModel attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel.simulation">(nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wifichannel.NS3BaseWifiChannel.simulation">(nepi.resources.ns3.ns3wifichannel.NS3BaseWifiChannel attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.trace.TraceAttr.SIZE">SIZE (nepi.execution.trace.TraceAttr attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.sock_name">sock_name (nepi.resources.linux.tap.LinuxTap attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.socket_name">socket_name (nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.socket_name">(nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.netgraph.NetGraph.sources">sources() (nepi.util.netgraph.NetGraph method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.src_dir">src_dir (nepi.resources.linux.node.LinuxNode attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.timefuncs.stabsformat">stabsformat() (in module nepi.util.timefuncs)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.netgraph.TopologyType.STAR">STAR (nepi.util.netgraph.TopologyType attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceAction.START">START (nepi.execution.resource.ResourceAction attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3server.NS3WrapperMessage.START">(nepi.resources.ns3.ns3server.NS3WrapperMessage attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.start">start() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.start">(nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3client.LinuxNS3Client.start">(nepi.resources.linux.ns3.ns3client.LinuxNS3Client method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3client.NS3Client.start">(nepi.resources.ns3.ns3client.NS3Client method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3simulation.NS3Simulation.start">(nepi.resources.ns3.ns3simulation.NS3Simulation method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.NS3Wrapper.start">(nepi.resources.ns3.ns3wrapper.NS3Wrapper method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.start">(nepi.resources.omf.omf_client.OMFClient method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.util.html#nepi.util.parallel.ParallelRun.start">(nepi.util.parallel.ParallelRun method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.start_multicall">start_multicall() (nepi.resources.planetlab.plcapi.PLCAPI method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.start_time">start_time (nepi.execution.resource.ResourceManager attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.start_with_conditions">start_with_conditions() (nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceState.STARTED">STARTED (nepi.execution.resource.ResourceState attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.state">state (nepi.execution.resource.ResourceManager attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.state">(nepi.resources.linux.application.LinuxApplication attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnd.LinuxCCND.state">(nepi.resources.linux.ccn.ccnd.LinuxCCND attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.state">(nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.state">(nepi.resources.linux.tap.LinuxTap attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tunnel.LinuxTunnel.state">(nepi.resources.linux.tunnel.LinuxTunnel attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsapplication.NetNSApplication.state">(nepi.resources.netns.netnsapplication.NetNSApplication attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsbase.NetNSBase.state">(nepi.resources.netns.netnsbase.NetNSBase attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3application.NS3BaseApplication.state">(nepi.resources.ns3.ns3application.NS3BaseApplication attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3base.NS3Base.state">(nepi.resources.ns3.ns3base.NS3Base attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.state">state() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.status">status() (nepi.resources.linux.node.LinuxNode method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.messages_5_4.MessageHandler.stdin_function">stdin_function() (nepi.resources.omf.messages_5_4.MessageHandler method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.application.OMFApplication.stdin_hook">stdin_hook() (nepi.resources.omf.application.OMFApplication method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.sshfuncs.STDOUT">STDOUT (class in nepi.util.sshfuncs)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.timefuncs.stformat">stformat() (in module nepi.util.timefuncs)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceAction.STOP">STOP (nepi.execution.resource.ResourceAction attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3server.NS3WrapperMessage.STOP">(nepi.resources.ns3.ns3server.NS3WrapperMessage attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.stop">stop() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.stop">(nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3client.LinuxNS3Client.stop">(nepi.resources.linux.ns3.ns3client.LinuxNS3Client method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3client.NS3Client.stop">(nepi.resources.ns3.ns3client.NS3Client method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3simulation.NS3Simulation.stop">(nepi.resources.ns3.ns3simulation.NS3Simulation method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3wrapper.NS3Wrapper.stop">(nepi.resources.ns3.ns3wrapper.NS3Wrapper method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.stop_time">stop_time (nepi.execution.resource.ResourceManager attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.stop_with_conditions">stop_with_conditions() (nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceState.STOPPED">STOPPED (nepi.execution.resource.ResourceState attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.all.html#nepi.resources.all.collector.Collector.store_path">store_path (nepi.resources.all.collector.Collector attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.trace.TraceAttr.STREAM">STREAM (nepi.execution.trace.TraceAttr attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.attribute.Types.String">String (nepi.execution.attribute.Types attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.subscribe">subscribe() (nepi.resources.omf.omf_client.OMFClient method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.subscriptions">subscriptions() (nepi.resources.omf.omf_client.OMFClient method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsnodeinterface.NetNSNodeInterface.switch">switch (nepi.resources.netns.netnsnodeinterface.NetNSNodeInterface attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.parallel.ParallelRun.sync">sync() (nepi.util.parallel.ParallelRun method)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+<h2 id="T">T</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink.tap">tap (nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.planetlab.ns3.html#nepi.resources.planetlab.ns3.tuntapfdlink.PlanetlabTunTapFdLink.tap">(nepi.resources.planetlab.ns3.tuntapfdlink.PlanetlabTunTapFdLink attribute)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.vroute.PlanetlabVroute.tap">(nepi.resources.planetlab.vroute.PlanetlabVroute attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink.tapnode">tapnode (nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.netgraph.NetGraph.targets">targets() (nepi.util.netgraph.NetGraph method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.scheduler.Task">Task (class in nepi.execution.scheduler)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.scheduler.TaskStatus">TaskStatus (class in nepi.execution.scheduler)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.timefuncs.tdiff">tdiff() (in module nepi.util.timefuncs)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.timefuncs.tdiffsec">tdiffsec() (in module nepi.util.timefuncs)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.resource_manager_generator.template_attributes">template_attributes() (in module nepi.resources.ns3.resource_manager_generator)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.resource_manager_generator.template_traces">template_traces() (in module nepi.resources.ns3.resource_manager_generator)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.gretunnel.LinuxGRETunnel.terminate_connection">terminate_connection() (nepi.resources.linux.gretunnel.LinuxGRETunnel method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.terminate_connection">(nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.terminate_connection">(nepi.resources.linux.tap.LinuxTap method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tunnel.LinuxTunnel.terminate_connection">(nepi.resources.linux.tunnel.LinuxTunnel method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.udptunnel.LinuxUdpTunnel.terminate_connection">(nepi.resources.linux.udptunnel.LinuxUdpTunnel method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.terminate_connection">(nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ECState.TERMINATED">TERMINATED (nepi.execution.ec.ECState attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.test">test() (nepi.resources.planetlab.plcapi.PLCAPI method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf_resource.ResourceGateway.TestbedtoGateway">TestbedtoGateway (nepi.resources.omf.omf_resource.ResourceGateway attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.timefuncs.tnow">tnow() (in module nepi.util.timefuncs)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.parsers.html#nepi.util.parsers.xml_parser.to_type">to_type() (in module nepi.util.parsers.xml_parser)</a>
+  </dt>
+
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.util.parsers.html#nepi.util.parsers.xml_parser.ECXMLParser.to_xml">to_xml() (nepi.util.parsers.xml_parser.ECXMLParser method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.netgraph.NetGraph.topo_type">topo_type (nepi.util.netgraph.NetGraph attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.netgraph.NetGraph.topology">topology (nepi.util.netgraph.NetGraph attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.netgraph.TopologyType">TopologyType (class in nepi.util.netgraph)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.trace.Trace">Trace (class in nepi.execution.trace)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.trace">trace() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.trace">(nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.trace">(nepi.resources.linux.application.LinuxApplication method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.trace">(nepi.resources.linux.ccn.fibentry.LinuxFIBEntry method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.trace">(nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsbase.NetNSBase.trace">(nepi.resources.netns.netnsbase.NetNSBase method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3base.NS3Base.trace">(nepi.resources.ns3.ns3base.NS3Base method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3dceapplication.NS3BaseDceApplication.trace">(nepi.resources.ns3.ns3dceapplication.NS3BaseDceApplication method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.application.OMFApplication.trace">(nepi.resources.omf.application.OMFApplication method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.trace_enabled">trace_enabled() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.trace_enabled">(nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.trace_filepath">trace_filepath() (nepi.resources.linux.application.LinuxApplication method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.trace.TraceAttr">TraceAttr (class in nepi.execution.trace)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.traceroute">traceroute (nepi.resources.linux.ccn.fibentry.LinuxFIBEntry attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.netgraph.TopologyType.TREE">TREE (nepi.util.netgraph.TopologyType attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.timefuncs.tsformat">tsformat() (in module nepi.util.timefuncs)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.attribute.Attribute.type">type (nepi.execution.attribute.Attribute attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.attribute.Types">Types (class in nepi.execution.attribute)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+<h2 id="U">U</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.OSType.UBUNTU">UBUNTU (nepi.resources.linux.node.OSType attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.udp_connect">udp_connect() (nepi.resources.linux.tap.LinuxTap method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.unblacklist_host">unblacklist_host() (nepi.resources.planetlab.plcapi.PLCAPI method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf6_api.OMF6API.unenroll_topic">unenroll_topic() (nepi.resources.omf.omf6_api.OMF6API method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.unregister">unregister() (nepi.resources.omf.omf_client.OMFClient method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.unregister_condition">unregister_condition() (nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.unregister_connection">unregister_connection() (nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.unreserve_host">unreserve_host() (nepi.resources.planetlab.plcapi.PLCAPI method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.unsubscribe">unsubscribe() (nepi.resources.omf.omf_client.OMFClient method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.plcapi.PLCAPI.update_slice">update_slice() (nepi.resources.planetlab.plcapi.PLCAPI method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.upload">upload() (nepi.resources.linux.node.LinuxNode method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.upload_binaries">upload_binaries() (nepi.resources.linux.application.LinuxApplication method)</a>
+  </dt>
+
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.upload_code">upload_code() (nepi.resources.linux.application.LinuxApplication method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.upload_command">upload_command() (nepi.resources.linux.node.LinuxNode method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.upload_extra_sources">upload_extra_sources() (nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.upload_extra_sources">(nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.upload_files">upload_files() (nepi.resources.linux.application.LinuxApplication method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.upload_libraries">upload_libraries() (nepi.resources.linux.application.LinuxApplication method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.upload_sources">upload_sources() (nepi.resources.linux.application.LinuxApplication method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.upload_sources">(nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.upload_sources">(nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.upload_sources">(nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink.upload_sources">(nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.route.LinuxRoute.upload_sources">(nepi.resources.linux.route.LinuxRoute method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.upload_sources">(nepi.resources.linux.tap.LinuxTap method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.planetlab.ns3.html#nepi.resources.planetlab.ns3.tuntapfdlink.PlanetlabTunTapFdLink.upload_sources">(nepi.resources.planetlab.ns3.tuntapfdlink.PlanetlabTunTapFdLink method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.tap.PlanetlabTap.upload_sources">(nepi.resources.planetlab.tap.PlanetlabTap method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.vroute.PlanetlabVroute.upload_sources">(nepi.resources.planetlab.vroute.PlanetlabVroute method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.upload_start_command">upload_start_command() (nepi.resources.linux.application.LinuxApplication method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccncontent.LinuxCCNContent.upload_start_command">(nepi.resources.linux.ccn.ccncontent.LinuxCCNContent method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnd.LinuxCCND.upload_start_command">(nepi.resources.linux.ccn.ccnd.LinuxCCND method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnr.LinuxCCNR.upload_start_command">(nepi.resources.linux.ccn.ccnr.LinuxCCNR method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.upload_start_command">(nepi.resources.linux.ccn.fibentry.LinuxFIBEntry method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.mtr.LinuxMtr.upload_start_command">(nepi.resources.linux.mtr.LinuxMtr method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.upload_start_command">(nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.upload_start_command">(nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink.upload_start_command">(nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.ping.LinuxPing.upload_start_command">(nepi.resources.linux.ping.LinuxPing method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.route.LinuxRoute.upload_start_command">(nepi.resources.linux.route.LinuxRoute method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.upload_start_command">(nepi.resources.linux.tap.LinuxTap method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.traceroute.LinuxTraceroute.upload_start_command">(nepi.resources.linux.traceroute.LinuxTraceroute method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.udptest.LinuxUdpTest.upload_start_command">(nepi.resources.linux.udptest.LinuxUdpTest method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.tap.PlanetlabTap.upload_start_command">(nepi.resources.planetlab.tap.PlanetlabTap method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.vroute.PlanetlabVroute.upload_start_command">(nepi.resources.planetlab.vroute.PlanetlabVroute method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.upload_stdin">upload_stdin() (nepi.resources.linux.application.LinuxApplication method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.use_deb">use_deb (nepi.resources.linux.node.LinuxNode attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.use_rpm">use_rpm (nepi.resources.linux.node.LinuxNode attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.usr_dir">usr_dir (nepi.resources.linux.node.LinuxNode attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.netns.html#nepi.resources.netns.netnsbase.NetNSBase.uuid">uuid (nepi.resources.netns.netnsbase.NetNSBase attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.ns3.html#nepi.resources.ns3.ns3base.NS3Base.uuid">(nepi.resources.ns3.ns3base.NS3Base attribute)</a>
+  </dt>
+
+      </dl></dd>
+  </dl></td>
+</tr></table>
+
+<h2 id="V">V</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.resource.ResourceManager.valid_connection">valid_connection() (nepi.execution.resource.ResourceManager method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.all.html#nepi.resources.all.collector.Collector.valid_connection">(nepi.resources.all.collector.Collector method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.application.LinuxApplication.valid_connection">(nepi.resources.linux.application.LinuxApplication method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnapplication.LinuxCCNApplication.valid_connection">(nepi.resources.linux.ccn.ccnapplication.LinuxCCNApplication method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccncat.LinuxCCNCat.valid_connection">(nepi.resources.linux.ccn.ccncat.LinuxCCNCat method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccncontent.LinuxCCNContent.valid_connection">(nepi.resources.linux.ccn.ccncontent.LinuxCCNContent method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnd.LinuxCCND.valid_connection">(nepi.resources.linux.ccn.ccnd.LinuxCCND method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnpeek.LinuxCCNPeek.valid_connection">(nepi.resources.linux.ccn.ccnpeek.LinuxCCNPeek method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnping.LinuxCCNPing.valid_connection">(nepi.resources.linux.ccn.ccnping.LinuxCCNPing method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnpingserver.LinuxCCNPingServer.valid_connection">(nepi.resources.linux.ccn.ccnpingserver.LinuxCCNPingServer method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnpoke.LinuxCCNPoke.valid_connection">(nepi.resources.linux.ccn.ccnpoke.LinuxCCNPoke method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnr.LinuxCCNR.valid_connection">(nepi.resources.linux.ccn.ccnr.LinuxCCNR method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.fibentry.LinuxFIBEntry.valid_connection">(nepi.resources.linux.ccn.fibentry.LinuxFIBEntry method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.channel.LinuxChannel.valid_connection">(nepi.resources.linux.channel.LinuxChannel method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.gretunnel.LinuxGRETunnel.valid_connection">(nepi.resources.linux.gretunnel.LinuxGRETunnel method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.interface.LinuxInterface.valid_connection">(nepi.resources.linux.interface.LinuxInterface method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.mtr.LinuxMtr.valid_connection">(nepi.resources.linux.mtr.LinuxMtr method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.valid_connection">(nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.valid_connection">(nepi.resources.linux.node.LinuxNode method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.nping.LinuxNPing.valid_connection">(nepi.resources.linux.nping.LinuxNPing method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.valid_connection">(nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.ping.LinuxPing.valid_connection">(nepi.resources.linux.ping.LinuxPing method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.valid_connection">(nepi.resources.linux.tap.LinuxTap method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tcpdump.LinuxTcpdump.valid_connection">(nepi.resources.linux.tcpdump.LinuxTcpdump method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.traceroute.LinuxTraceroute.valid_connection">(nepi.resources.linux.traceroute.LinuxTraceroute method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tunnel.LinuxTunnel.valid_connection">(nepi.resources.linux.tunnel.LinuxTunnel method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.udptest.LinuxUdpTest.valid_connection">(nepi.resources.linux.udptest.LinuxUdpTest method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.application.OMFApplication.valid_connection">(nepi.resources.omf.application.OMFApplication method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.channel.OMFChannel.valid_connection">(nepi.resources.omf.channel.OMFChannel method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.interface.OMFWifiInterface.valid_connection">(nepi.resources.omf.interface.OMFWifiInterface method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.node.OMFNode.valid_connection">(nepi.resources.omf.node.OMFNode method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.wilabt_node.WilabtSfaNode.valid_connection">(nepi.resources.omf.wilabt_node.WilabtSfaNode method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.node.PlanetlabNode.valid_connection">(nepi.resources.planetlab.node.PlanetlabNode method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch.valid_connection">(nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.valid_connection">(nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.sfa_node.PlanetlabSfaNode.valid_connection">(nepi.resources.planetlab.sfa_node.PlanetlabSfaNode method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.tap.PlanetlabTap.valid_connection">(nepi.resources.planetlab.tap.PlanetlabTap method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.vroute.PlanetlabVroute.valid_connection">(nepi.resources.planetlab.vroute.PlanetlabVroute method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.attribute.Attribute.value">value (nepi.execution.attribute.Attribute attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.verify">verify() (nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.gretunnel.LinuxGRETunnel.verify_connection">verify_connection() (nepi.resources.linux.gretunnel.LinuxGRETunnel method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.verify_connection">(nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.verify_connection">(nepi.resources.linux.tap.LinuxTap method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tunnel.LinuxTunnel.verify_connection">(nepi.resources.linux.tunnel.LinuxTunnel method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.udptunnel.LinuxUdpTunnel.verify_connection">(nepi.resources.linux.udptunnel.LinuxUdpTunnel method)</a>
+  </dt>
+
+        
+  <dt><a href="_layout/nepi.resources.planetlab.openvswitch.html#nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort.verify_connection">(nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.resources.linux.ccn.html#nepi.resources.linux.ccn.ccnd.LinuxCCND.version">version (nepi.resources.linux.ccn.ccnd.LinuxCCND attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.ns3.ccn.html#nepi.resources.linux.ns3.ccn.ns3ccnddceapplication.LinuxNS3DceCCND.version">(nepi.resources.linux.ns3.ccn.ns3ccnddceapplication.LinuxNS3DceCCND attribute)</a>
+  </dt>
+
+      </dl></dd>
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.tap.PlanetlabTap.vif_name_file">vif_name_file (nepi.resources.planetlab.tap.PlanetlabTap attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.vif_prefix">vif_prefix (nepi.resources.linux.tap.LinuxTap attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.vif_type">vif_type (nepi.resources.linux.tap.LinuxTap attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.vif_type_flag">vif_type_flag (nepi.resources.linux.tap.LinuxTap attribute)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+<h2 id="W">W</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.wait">wait() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.wait_deployed">wait_deployed() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.wait_file">wait_file() (nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.tap.LinuxTap.wait_file">(nepi.resources.linux.tap.LinuxTap method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.wait_finished">wait_finished() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.wait_local_port">wait_local_port() (nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.wait_pid">wait_pid() (nepi.resources.linux.node.LinuxNode method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.wait_released">wait_released() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.netns.html#nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation.wait_remote_socket">wait_remote_socket() (nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation.wait_remote_socket">(nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation method)</a>
+  </dt>
+
+      </dl></dd>
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.resources.linux.ns3.html#nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel.wait_result">wait_result() (nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.linux.html#nepi.resources.linux.node.LinuxNode.wait_run">wait_run() (nepi.resources.linux.node.LinuxNode method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.execution.html#nepi.execution.ec.ExperimentController.wait_started">wait_started() (nepi.execution.ec.ExperimentController method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.planetlab.html#nepi.resources.planetlab.tap.PlanetlabTap.wait_vif_name">wait_vif_name() (nepi.resources.planetlab.tap.PlanetlabTap method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.logger.Logger.warning">warning() (nepi.util.logger.Logger method)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.resources.omf.html#nepi.resources.omf.wilabt_node.WilabtSfaNode">WilabtSfaNode (class in nepi.resources.omf.wilabt_node)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.parallel.WorkerThread">WorkerThread (class in nepi.util.parallel)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.parallel.WorkerThread.QUIT">WorkerThread.QUIT (class in nepi.util.parallel)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+<h2 id="X">X</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.util.html#nepi.util.serializer.SFormats.XML">XML (nepi.util.serializer.SFormats attribute)</a>
+  </dt>
+
+      
+  <dt><a href="_layout/nepi.util.parsers.html#nepi.util.parsers.xml_parser.xmldecode">xmldecode() (in module nepi.util.parsers.xml_parser)</a>
+  </dt>
+
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="_layout/nepi.util.parsers.html#nepi.util.parsers.xml_parser.xmlencode">xmlencode() (in module nepi.util.parsers.xml_parser)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="#" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/index.html b/doc/sphinx/_build/html/index.html
new file mode 100644 (file)
index 0000000..f5861b3
--- /dev/null
@@ -0,0 +1,201 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>NEPI modules &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    './',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="_static/jquery.js"></script>
+    <script type="text/javascript" src="_static/underscore.js"></script>
+    <script type="text/javascript" src="_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="#" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="#">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+  <h3><a href="#">Table Of Contents</a></h3>
+  <ul>
+<li><a class="reference internal" href="#">NEPI modules</a><ul>
+<li><a class="reference internal" href="#core-modules">Core modules</a></li>
+<li><a class="reference internal" href="#platform-modules">Platform modules</a></li>
+<li><a class="reference internal" href="#miscellaneous-modules">Miscellaneous modules</a></li>
+</ul>
+</li>
+<li><a class="reference internal" href="#indices-and-tables">Indices and tables</a></li>
+</ul>
+
+  <h3>This Page</h3>
+  <ul class="this-page-menu">
+    <li><a href="_sources/index.txt"
+           rel="nofollow">Show Source</a></li>
+  </ul>
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <div class="section" id="nepi-modules">
+<h1>NEPI modules<a class="headerlink" href="#nepi-modules" title="Permalink to this headline">¶</a></h1>
+<p>This page documents the NEPI source code. It presents the NEPI core modules, the Platform resource modules (i.e. drivers to manage platforms), and other miscellaneous classes.</p>
+<div class="section" id="core-modules">
+<h2>Core modules<a class="headerlink" href="#core-modules" title="Permalink to this headline">¶</a></h2>
+<blockquote>
+<div><ul class="simple">
+<li>ExperimentController API<ul>
+<li><a class="reference internal" href="_layout/nepi.execution.html#module-nepi.execution.ec" title="nepi.execution.ec"><tt class="xref py py-mod docutils literal"><span class="pre">ExperimentController</span></tt></a></li>
+</ul>
+</li>
+<li>ResourceManager API<ul>
+<li><a class="reference internal" href="_layout/nepi.execution.html#module-nepi.execution.resource" title="nepi.execution.resource"><tt class="xref py py-mod docutils literal"><span class="pre">ResourceManager</span></tt></a></li>
+</ul>
+</li>
+<li>Attribute module<ul>
+<li><a class="reference internal" href="_layout/nepi.execution.html#module-nepi.execution.attribute" title="nepi.execution.attribute"><tt class="xref py py-mod docutils literal"><span class="pre">Attribute</span></tt></a></li>
+</ul>
+</li>
+<li>Trace module<ul>
+<li><a class="reference internal" href="_layout/nepi.execution.html#module-nepi.execution.trace" title="nepi.execution.trace"><tt class="xref py py-mod docutils literal"><span class="pre">Trace</span></tt></a></li>
+</ul>
+</li>
+<li>Runner module<ul>
+<li><a class="reference internal" href="_layout/nepi.execution.html#module-nepi.execution.runner" title="nepi.execution.runner"><tt class="xref py py-mod docutils literal"><span class="pre">ExperimentRunner</span></tt></a></li>
+</ul>
+</li>
+<li>Scheduler module<ul>
+<li><a class="reference internal" href="_layout/nepi.execution.html#module-nepi.execution.scheduler" title="nepi.execution.scheduler"><tt class="xref py py-mod docutils literal"><span class="pre">Scheduler</span></tt></a></li>
+</ul>
+</li>
+</ul>
+</div></blockquote>
+</div>
+<div class="section" id="platform-modules">
+<h2>Platform modules<a class="headerlink" href="#platform-modules" title="Permalink to this headline">¶</a></h2>
+<blockquote>
+<div><ul class="simple">
+<li>Live Experiments<ul>
+<li>Linux testbeds<ul>
+<li><a class="reference internal" href="_layout/nepi.resources.linux.html#module-nepi.resources.linux" title="nepi.resources.linux"><tt class="xref py py-mod docutils literal"><span class="pre">Linux</span></tt></a></li>
+</ul>
+</li>
+<li>PlanetLab testbeds<ul>
+<li><a class="reference internal" href="_layout/nepi.resources.planetlab.html#module-nepi.resources.planetlab" title="nepi.resources.planetlab"><tt class="xref py py-mod docutils literal"><span class="pre">PlanetLab</span></tt></a></li>
+</ul>
+</li>
+<li>OMF testbed<ul>
+<li><a class="reference internal" href="_layout/nepi.resources.omf.html#module-nepi.resources.omf" title="nepi.resources.omf"><tt class="xref py py-mod docutils literal"><span class="pre">OMF</span></tt></a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li>Simulated Experiments<ul>
+<li>ns-3 simulator<ul>
+<li><a class="reference internal" href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3" title="nepi.resources.ns3"><tt class="xref py py-mod docutils literal"><span class="pre">ns-3</span></tt></a></li>
+<li><a class="reference internal" href="_layout/nepi.resources.linux.ns3.html#module-nepi.resources.linux.ns3" title="nepi.resources.linux.ns3"><tt class="xref py py-mod docutils literal"><span class="pre">ns-3</span> <span class="pre">in</span> <span class="pre">Linux</span> <span class="pre">hosts</span></tt></a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li>Emulated Experiments<ul>
+<li>DCE emulation extension<ul>
+<li><a class="reference internal" href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3dceapplication" title="nepi.resources.ns3.ns3dceapplication"><tt class="xref py py-mod docutils literal"><span class="pre">DCE</span> <span class="pre">Application</span></tt></a></li>
+<li><a class="reference internal" href="_layout/nepi.resources.linux.ns3.html#module-nepi.resources.linux.ns3.ns3dceapplication" title="nepi.resources.linux.ns3.ns3dceapplication"><tt class="xref py py-mod docutils literal"><span class="pre">DCE</span> <span class="pre">Linux</span> <span class="pre">Application</span></tt></a></li>
+</ul>
+</li>
+<li>NetNS emulator<ul>
+<li><a class="reference internal" href="_layout/nepi.resources.netns.html#module-nepi.resources.netns" title="nepi.resources.netns"><tt class="xref py py-mod docutils literal"><span class="pre">NetNS</span></tt></a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div></blockquote>
+</div>
+<div class="section" id="miscellaneous-modules">
+<h2>Miscellaneous modules<a class="headerlink" href="#miscellaneous-modules" title="Permalink to this headline">¶</a></h2>
+<blockquote>
+<div><ul class="simple">
+<li><a class="reference internal" href="_layout/nepi.util.html#module-nepi.util" title="nepi.util"><tt class="xref py py-mod docutils literal"><span class="pre">Util</span></tt></a></li>
+</ul>
+</div></blockquote>
+<div class="toctree-wrapper compound">
+<ul class="simple">
+</ul>
+</div>
+</div>
+</div>
+<div class="section" id="indices-and-tables">
+<h1>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this headline">¶</a></h1>
+<ul class="simple">
+<li><a class="reference internal" href="genindex.html"><em>Index</em></a></li>
+<li><a class="reference internal" href="py-modindex.html"><em>Module Index</em></a></li>
+<li><a class="reference internal" href="search.html"><em>Search Page</em></a></li>
+</ul>
+</div>
+
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="#">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/objects.inv b/doc/sphinx/_build/html/objects.inv
new file mode 100644 (file)
index 0000000..2c3613a
Binary files /dev/null and b/doc/sphinx/_build/html/objects.inv differ
diff --git a/doc/sphinx/_build/html/py-modindex.html b/doc/sphinx/_build/html/py-modindex.html
new file mode 100644 (file)
index 0000000..5cdeea1
--- /dev/null
@@ -0,0 +1,1424 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>Python Module Index &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    './',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="_static/jquery.js"></script>
+    <script type="text/javascript" src="_static/underscore.js"></script>
+    <script type="text/javascript" src="_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="index.html" />
+
+
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="#" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+
+   <h1>Python Module Index</h1>
+
+   <div class="modindex-jumpbox">
+   <a href="#cap-n"><strong>n</strong></a>
+   </div>
+
+   <table class="indextable modindextable" cellspacing="0" cellpadding="2">
+     <tr class="pcap"><td></td><td>&nbsp;</td><td></td></tr>
+     <tr class="cap" id="cap-n"><td></td><td>
+       <strong>n</strong></td><td></td></tr>
+     <tr>
+       <td><img src="_static/minus.png" class="toggler"
+              id="toggle-1" style="display: none" alt="-" /></td>
+       <td>
+       <a href="_layout/nepi.html#module-nepi"><tt class="xref">nepi</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.data.html#module-nepi.data"><tt class="xref">nepi.data</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.data.processing.html#module-nepi.data.processing"><tt class="xref">nepi.data.processing</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.data.processing.ccn.html#module-nepi.data.processing.ccn"><tt class="xref">nepi.data.processing.ccn</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.data.processing.ccn.html#module-nepi.data.processing.ccn.parser"><tt class="xref">nepi.data.processing.ccn.parser</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.data.processing.ping.html#module-nepi.data.processing.ping"><tt class="xref">nepi.data.processing.ping</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.data.processing.ping.html#module-nepi.data.processing.ping.parser"><tt class="xref">nepi.data.processing.ping.parser</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.execution.html#module-nepi.execution"><tt class="xref">nepi.execution</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.execution.html#module-nepi.execution.attribute"><tt class="xref">nepi.execution.attribute</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.execution.html#module-nepi.execution.ec"><tt class="xref">nepi.execution.ec</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.execution.html#module-nepi.execution.resource"><tt class="xref">nepi.execution.resource</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.execution.html#module-nepi.execution.runner"><tt class="xref">nepi.execution.runner</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.execution.html#module-nepi.execution.scheduler"><tt class="xref">nepi.execution.scheduler</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.execution.html#module-nepi.execution.tags"><tt class="xref">nepi.execution.tags</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.execution.html#module-nepi.execution.trace"><tt class="xref">nepi.execution.trace</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.html#module-nepi.resources"><tt class="xref">nepi.resources</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.all.html#module-nepi.resources.all"><tt class="xref">nepi.resources.all</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.all.html#module-nepi.resources.all.collector"><tt class="xref">nepi.resources.all.collector</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.html#module-nepi.resources.linux"><tt class="xref">nepi.resources.linux</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.html#module-nepi.resources.linux.application"><tt class="xref">nepi.resources.linux.application</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn"><tt class="xref">nepi.resources.linux.ccn</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccnapplication"><tt class="xref">nepi.resources.linux.ccn.ccnapplication</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccncat"><tt class="xref">nepi.resources.linux.ccn.ccncat</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccncontent"><tt class="xref">nepi.resources.linux.ccn.ccncontent</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccnd"><tt class="xref">nepi.resources.linux.ccn.ccnd</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccnpeek"><tt class="xref">nepi.resources.linux.ccn.ccnpeek</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccnping"><tt class="xref">nepi.resources.linux.ccn.ccnping</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccnpingserver"><tt class="xref">nepi.resources.linux.ccn.ccnpingserver</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccnpoke"><tt class="xref">nepi.resources.linux.ccn.ccnpoke</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.ccnr"><tt class="xref">nepi.resources.linux.ccn.ccnr</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.ccn.html#module-nepi.resources.linux.ccn.fibentry"><tt class="xref">nepi.resources.linux.ccn.fibentry</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.html#module-nepi.resources.linux.channel"><tt class="xref">nepi.resources.linux.channel</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.html#module-nepi.resources.linux.debfuncs"><tt class="xref">nepi.resources.linux.debfuncs</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.html#module-nepi.resources.linux.gretunnel"><tt class="xref">nepi.resources.linux.gretunnel</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.html#module-nepi.resources.linux.interface"><tt class="xref">nepi.resources.linux.interface</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.html#module-nepi.resources.linux.mtr"><tt class="xref">nepi.resources.linux.mtr</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.netns.html#module-nepi.resources.linux.netns"><tt class="xref">nepi.resources.linux.netns</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.netns.html#module-nepi.resources.linux.netns.netnsclient"><tt class="xref">nepi.resources.linux.netns.netnsclient</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.netns.html#module-nepi.resources.linux.netns.netnsemulation"><tt class="xref">nepi.resources.linux.netns.netnsemulation</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.html#module-nepi.resources.linux.node"><tt class="xref">nepi.resources.linux.node</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.html#module-nepi.resources.linux.nping"><tt class="xref">nepi.resources.linux.nping</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.ns3.html#module-nepi.resources.linux.ns3"><tt class="xref">nepi.resources.linux.ns3</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn"><tt class="xref">nepi.resources.linux.ns3.ccn</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3ccncatdceapplication"><tt class="xref">nepi.resources.linux.ns3.ccn.ns3ccncatdceapplication</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3ccndceapplication"><tt class="xref">nepi.resources.linux.ns3.ccn.ns3ccndceapplication</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3ccnddceapplication"><tt class="xref">nepi.resources.linux.ns3.ccn.ns3ccnddceapplication</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3ccnpeekdceapplication"><tt class="xref">nepi.resources.linux.ns3.ccn.ns3ccnpeekdceapplication</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3ccnpokedceapplication"><tt class="xref">nepi.resources.linux.ns3.ccn.ns3ccnpokedceapplication</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3ccnrdceapplication"><tt class="xref">nepi.resources.linux.ns3.ccn.ns3ccnrdceapplication</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.ns3.ccn.html#module-nepi.resources.linux.ns3.ccn.ns3fibentrydceapplication"><tt class="xref">nepi.resources.linux.ns3.ccn.ns3fibentrydceapplication</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.ns3.html#module-nepi.resources.linux.ns3.fdudptunnel"><tt class="xref">nepi.resources.linux.ns3.fdudptunnel</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.ns3.html#module-nepi.resources.linux.ns3.ns3client"><tt class="xref">nepi.resources.linux.ns3.ns3client</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.ns3.html#module-nepi.resources.linux.ns3.ns3dceapplication"><tt class="xref">nepi.resources.linux.ns3.ns3dceapplication</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.ns3.html#module-nepi.resources.linux.ns3.ns3pingdceapplication"><tt class="xref">nepi.resources.linux.ns3.ns3pingdceapplication</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.ns3.html#module-nepi.resources.linux.ns3.ns3simulation"><tt class="xref">nepi.resources.linux.ns3.ns3simulation</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.ns3.html#module-nepi.resources.linux.ns3.tuntapfdlink"><tt class="xref">nepi.resources.linux.ns3.tuntapfdlink</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.html#module-nepi.resources.linux.ping"><tt class="xref">nepi.resources.linux.ping</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.html#module-nepi.resources.linux.route"><tt class="xref">nepi.resources.linux.route</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.html#module-nepi.resources.linux.rpmfuncs"><tt class="xref">nepi.resources.linux.rpmfuncs</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.html#module-nepi.resources.linux.tap"><tt class="xref">nepi.resources.linux.tap</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.html#module-nepi.resources.linux.tcpdump"><tt class="xref">nepi.resources.linux.tcpdump</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.html#module-nepi.resources.linux.traceroute"><tt class="xref">nepi.resources.linux.traceroute</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.html#module-nepi.resources.linux.tun"><tt class="xref">nepi.resources.linux.tun</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.html#module-nepi.resources.linux.tunnel"><tt class="xref">nepi.resources.linux.tunnel</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.html#module-nepi.resources.linux.udptest"><tt class="xref">nepi.resources.linux.udptest</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.linux.html#module-nepi.resources.linux.udptunnel"><tt class="xref">nepi.resources.linux.udptunnel</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.netns.html#module-nepi.resources.netns"><tt class="xref">nepi.resources.netns</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.netns.html#module-nepi.resources.netns.netnsapplication"><tt class="xref">nepi.resources.netns.netnsapplication</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.netns.html#module-nepi.resources.netns.netnsbase"><tt class="xref">nepi.resources.netns.netnsbase</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.netns.html#module-nepi.resources.netns.netnsclient"><tt class="xref">nepi.resources.netns.netnsclient</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.netns.html#module-nepi.resources.netns.netnsemulation"><tt class="xref">nepi.resources.netns.netnsemulation</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.netns.html#module-nepi.resources.netns.netnsinterface"><tt class="xref">nepi.resources.netns.netnsinterface</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.netns.html#module-nepi.resources.netns.netnsipv4address"><tt class="xref">nepi.resources.netns.netnsipv4address</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.netns.html#module-nepi.resources.netns.netnsnode"><tt class="xref">nepi.resources.netns.netnsnode</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.netns.html#module-nepi.resources.netns.netnsnodeinterface"><tt class="xref">nepi.resources.netns.netnsnodeinterface</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.netns.html#module-nepi.resources.netns.netnsroute"><tt class="xref">nepi.resources.netns.netnsroute</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.netns.html#module-nepi.resources.netns.netnsserver"><tt class="xref">nepi.resources.netns.netnsserver</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.netns.html#module-nepi.resources.netns.netnsswitch"><tt class="xref">nepi.resources.netns.netnsswitch</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.netns.html#module-nepi.resources.netns.netnswrapper"><tt class="xref">nepi.resources.netns.netnswrapper</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.netns.html#module-nepi.resources.netns.netnswrapper_debug"><tt class="xref">nepi.resources.netns.netnswrapper_debug</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3"><tt class="xref">nepi.resources.ns3</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes"><tt class="xref">nepi.resources.ns3.classes</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.aarf_wifi_manager"><tt class="xref">nepi.resources.ns3.classes.aarf_wifi_manager</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.aarfcd_wifi_manager"><tt class="xref">nepi.resources.ns3.classes.aarfcd_wifi_manager</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.adhoc_wifi_mac"><tt class="xref">nepi.resources.ns3.classes.adhoc_wifi_mac</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.aloha_noack_net_device"><tt class="xref">nepi.resources.ns3.classes.aloha_noack_net_device</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.amrr_wifi_manager"><tt class="xref">nepi.resources.ns3.classes.amrr_wifi_manager</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.ap_wifi_mac"><tt class="xref">nepi.resources.ns3.classes.ap_wifi_mac</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.arf_wifi_manager"><tt class="xref">nepi.resources.ns3.classes.arf_wifi_manager</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.arp_l3protocol"><tt class="xref">nepi.resources.ns3.classes.arp_l3protocol</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.base_station_net_device"><tt class="xref">nepi.resources.ns3.classes.base_station_net_device</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.binary_error_model"><tt class="xref">nepi.resources.ns3.classes.binary_error_model</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.binary_error_sixlow_model"><tt class="xref">nepi.resources.ns3.classes.binary_error_sixlow_model</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.bridge_channel"><tt class="xref">nepi.resources.ns3.classes.bridge_channel</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.bridge_net_device"><tt class="xref">nepi.resources.ns3.classes.bridge_net_device</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.bulk_send_application"><tt class="xref">nepi.resources.ns3.classes.bulk_send_application</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.burst_error_model"><tt class="xref">nepi.resources.ns3.classes.burst_error_model</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.cara_wifi_manager"><tt class="xref">nepi.resources.ns3.classes.cara_wifi_manager</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.constant_acceleration_mobility_model"><tt class="xref">nepi.resources.ns3.classes.constant_acceleration_mobility_model</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.constant_position_mobility_model"><tt class="xref">nepi.resources.ns3.classes.constant_position_mobility_model</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.constant_rate_wifi_manager"><tt class="xref">nepi.resources.ns3.classes.constant_rate_wifi_manager</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.constant_speed_propagation_delay_model"><tt class="xref">nepi.resources.ns3.classes.constant_speed_propagation_delay_model</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.constant_velocity_mobility_model"><tt class="xref">nepi.resources.ns3.classes.constant_velocity_mobility_model</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.cost231propagation_loss_model"><tt class="xref">nepi.resources.ns3.classes.cost231propagation_loss_model</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.csma_channel"><tt class="xref">nepi.resources.ns3.classes.csma_channel</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.csma_net_device"><tt class="xref">nepi.resources.ns3.classes.csma_net_device</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.drop_tail_queue"><tt class="xref">nepi.resources.ns3.classes.drop_tail_queue</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.dsrdsr_routing"><tt class="xref">nepi.resources.ns3.classes.dsrdsr_routing</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.emu_net_device"><tt class="xref">nepi.resources.ns3.classes.emu_net_device</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.error_channel"><tt class="xref">nepi.resources.ns3.classes.error_channel</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.error_channel_sixlow"><tt class="xref">nepi.resources.ns3.classes.error_channel_sixlow</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.error_net_device"><tt class="xref">nepi.resources.ns3.classes.error_net_device</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.fd_net_device"><tt class="xref">nepi.resources.ns3.classes.fd_net_device</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.fixed_rss_loss_model"><tt class="xref">nepi.resources.ns3.classes.fixed_rss_loss_model</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.friis_propagation_loss_model"><tt class="xref">nepi.resources.ns3.classes.friis_propagation_loss_model</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.gauss_markov_mobility_model"><tt class="xref">nepi.resources.ns3.classes.gauss_markov_mobility_model</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.hierarchical_mobility_model"><tt class="xref">nepi.resources.ns3.classes.hierarchical_mobility_model</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.hybrid_buildings_propagation_loss_model"><tt class="xref">nepi.resources.ns3.classes.hybrid_buildings_propagation_loss_model</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.icmpv4l4protocol"><tt class="xref">nepi.resources.ns3.classes.icmpv4l4protocol</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.icmpv6l4protocol"><tt class="xref">nepi.resources.ns3.classes.icmpv6l4protocol</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.ideal_wifi_manager"><tt class="xref">nepi.resources.ns3.classes.ideal_wifi_manager</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.ipv4l3protocol"><tt class="xref">nepi.resources.ns3.classes.ipv4l3protocol</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.itu_r1411los_propagation_loss_model"><tt class="xref">nepi.resources.ns3.classes.itu_r1411los_propagation_loss_model</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.itu_r1411nlos_over_rooftop_propagation_loss_model"><tt class="xref">nepi.resources.ns3.classes.itu_r1411nlos_over_rooftop_propagation_loss_model</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.jakes_propagation_loss_model"><tt class="xref">nepi.resources.ns3.classes.jakes_propagation_loss_model</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.kun2600mhz_propagation_loss_model"><tt class="xref">nepi.resources.ns3.classes.kun2600mhz_propagation_loss_model</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.list_error_model"><tt class="xref">nepi.resources.ns3.classes.list_error_model</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.log_distance_propagation_loss_model"><tt class="xref">nepi.resources.ns3.classes.log_distance_propagation_loss_model</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.loopback_net_device"><tt class="xref">nepi.resources.ns3.classes.loopback_net_device</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.lr_wpan_net_device"><tt class="xref">nepi.resources.ns3.classes.lr_wpan_net_device</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.lte_enb_net_device"><tt class="xref">nepi.resources.ns3.classes.lte_enb_net_device</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.lte_simple_net_device"><tt class="xref">nepi.resources.ns3.classes.lte_simple_net_device</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.lte_ue_net_device"><tt class="xref">nepi.resources.ns3.classes.lte_ue_net_device</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.matrix_propagation_loss_model"><tt class="xref">nepi.resources.ns3.classes.matrix_propagation_loss_model</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.mesh_point_device"><tt class="xref">nepi.resources.ns3.classes.mesh_point_device</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.mesh_wifi_interface_mac"><tt class="xref">nepi.resources.ns3.classes.mesh_wifi_interface_mac</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.minstrel_wifi_manager"><tt class="xref">nepi.resources.ns3.classes.minstrel_wifi_manager</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.multi_model_spectrum_channel"><tt class="xref">nepi.resources.ns3.classes.multi_model_spectrum_channel</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.nakagami_propagation_loss_model"><tt class="xref">nepi.resources.ns3.classes.nakagami_propagation_loss_model</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.nist_error_rate_model"><tt class="xref">nepi.resources.ns3.classes.nist_error_rate_model</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.node"><tt class="xref">nepi.resources.ns3.classes.node</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.non_communicating_net_device"><tt class="xref">nepi.resources.ns3.classes.non_communicating_net_device</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.ocb_wifi_mac"><tt class="xref">nepi.resources.ns3.classes.ocb_wifi_mac</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.oh_buildings_propagation_loss_model"><tt class="xref">nepi.resources.ns3.classes.oh_buildings_propagation_loss_model</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.okumura_hata_propagation_loss_model"><tt class="xref">nepi.resources.ns3.classes.okumura_hata_propagation_loss_model</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.on_off_application"><tt class="xref">nepi.resources.ns3.classes.on_off_application</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.onoe_wifi_manager"><tt class="xref">nepi.resources.ns3.classes.onoe_wifi_manager</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.packet_sink"><tt class="xref">nepi.resources.ns3.classes.packet_sink</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.ping6"><tt class="xref">nepi.resources.ns3.classes.ping6</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.point_to_point_channel"><tt class="xref">nepi.resources.ns3.classes.point_to_point_channel</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.point_to_point_net_device"><tt class="xref">nepi.resources.ns3.classes.point_to_point_net_device</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.point_to_point_remote_channel"><tt class="xref">nepi.resources.ns3.classes.point_to_point_remote_channel</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.radvd"><tt class="xref">nepi.resources.ns3.classes.radvd</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.random_direction2d_mobility_model"><tt class="xref">nepi.resources.ns3.classes.random_direction2d_mobility_model</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.random_propagation_delay_model"><tt class="xref">nepi.resources.ns3.classes.random_propagation_delay_model</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.random_propagation_loss_model"><tt class="xref">nepi.resources.ns3.classes.random_propagation_loss_model</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.random_walk2d_mobility_model"><tt class="xref">nepi.resources.ns3.classes.random_walk2d_mobility_model</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.random_waypoint_mobility_model"><tt class="xref">nepi.resources.ns3.classes.random_waypoint_mobility_model</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.range_propagation_loss_model"><tt class="xref">nepi.resources.ns3.classes.range_propagation_loss_model</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.rate_error_model"><tt class="xref">nepi.resources.ns3.classes.rate_error_model</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.receive_list_error_model"><tt class="xref">nepi.resources.ns3.classes.receive_list_error_model</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.red_queue"><tt class="xref">nepi.resources.ns3.classes.red_queue</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.rraa_wifi_manager"><tt class="xref">nepi.resources.ns3.classes.rraa_wifi_manager</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.simple_channel"><tt class="xref">nepi.resources.ns3.classes.simple_channel</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.simple_net_device"><tt class="xref">nepi.resources.ns3.classes.simple_net_device</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.single_model_spectrum_channel"><tt class="xref">nepi.resources.ns3.classes.single_model_spectrum_channel</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.six_low_pan_net_device"><tt class="xref">nepi.resources.ns3.classes.six_low_pan_net_device</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.sta_wifi_mac"><tt class="xref">nepi.resources.ns3.classes.sta_wifi_mac</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.steady_state_random_waypoint_mobility_model"><tt class="xref">nepi.resources.ns3.classes.steady_state_random_waypoint_mobility_model</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.subscriber_station_net_device"><tt class="xref">nepi.resources.ns3.classes.subscriber_station_net_device</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.tap_bridge"><tt class="xref">nepi.resources.ns3.classes.tap_bridge</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.tcp_l4protocol"><tt class="xref">nepi.resources.ns3.classes.tcp_l4protocol</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.three_log_distance_propagation_loss_model"><tt class="xref">nepi.resources.ns3.classes.three_log_distance_propagation_loss_model</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.two_ray_ground_propagation_loss_model"><tt class="xref">nepi.resources.ns3.classes.two_ray_ground_propagation_loss_model</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.uan_channel"><tt class="xref">nepi.resources.ns3.classes.uan_channel</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.udp_client"><tt class="xref">nepi.resources.ns3.classes.udp_client</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.udp_echo_client"><tt class="xref">nepi.resources.ns3.classes.udp_echo_client</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.udp_echo_server"><tt class="xref">nepi.resources.ns3.classes.udp_echo_server</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.udp_l4protocol"><tt class="xref">nepi.resources.ns3.classes.udp_l4protocol</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.udp_server"><tt class="xref">nepi.resources.ns3.classes.udp_server</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.udp_trace_client"><tt class="xref">nepi.resources.ns3.classes.udp_trace_client</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.v4ping"><tt class="xref">nepi.resources.ns3.classes.v4ping</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.virtual_net_device"><tt class="xref">nepi.resources.ns3.classes.virtual_net_device</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.waypoint_mobility_model"><tt class="xref">nepi.resources.ns3.classes.waypoint_mobility_model</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.wifi_net_device"><tt class="xref">nepi.resources.ns3.classes.wifi_net_device</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.yans_error_rate_model"><tt class="xref">nepi.resources.ns3.classes.yans_error_rate_model</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.yans_wifi_channel"><tt class="xref">nepi.resources.ns3.classes.yans_wifi_channel</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.classes.html#module-nepi.resources.ns3.classes.yans_wifi_phy"><tt class="xref">nepi.resources.ns3.classes.yans_wifi_phy</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3application"><tt class="xref">nepi.resources.ns3.ns3application</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3arpl3protocol"><tt class="xref">nepi.resources.ns3.ns3arpl3protocol</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3base"><tt class="xref">nepi.resources.ns3.ns3base</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3ccndceapplication"><tt class="xref">nepi.resources.ns3.ns3ccndceapplication</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3channel"><tt class="xref">nepi.resources.ns3.ns3channel</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3client"><tt class="xref">nepi.resources.ns3.ns3client</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3dceapplication"><tt class="xref">nepi.resources.ns3.ns3dceapplication</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3dcehelper"><tt class="xref">nepi.resources.ns3.ns3dcehelper</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3errormodel"><tt class="xref">nepi.resources.ns3.ns3errormodel</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3errorratemodel"><tt class="xref">nepi.resources.ns3.ns3errorratemodel</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3fdnetdevice"><tt class="xref">nepi.resources.ns3.ns3fdnetdevice</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3icmpv4l4protocol"><tt class="xref">nepi.resources.ns3.ns3icmpv4l4protocol</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3ipv4l3protocol"><tt class="xref">nepi.resources.ns3.ns3ipv4l3protocol</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3mobilitymodel"><tt class="xref">nepi.resources.ns3.ns3mobilitymodel</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3netdevice"><tt class="xref">nepi.resources.ns3.ns3netdevice</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3node"><tt class="xref">nepi.resources.ns3.ns3node</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3pipechanel"><tt class="xref">nepi.resources.ns3.ns3pipechanel</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3propagationdelaymodel"><tt class="xref">nepi.resources.ns3.ns3propagationdelaymodel</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3propagationlossmodel"><tt class="xref">nepi.resources.ns3.ns3propagationlossmodel</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3queue"><tt class="xref">nepi.resources.ns3.ns3queue</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3route"><tt class="xref">nepi.resources.ns3.ns3route</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3server"><tt class="xref">nepi.resources.ns3.ns3server</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3simulation"><tt class="xref">nepi.resources.ns3.ns3simulation</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3wifichannel"><tt class="xref">nepi.resources.ns3.ns3wifichannel</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3wifimac"><tt class="xref">nepi.resources.ns3.ns3wifimac</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3wifinetdevice"><tt class="xref">nepi.resources.ns3.ns3wifinetdevice</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3wifiphy"><tt class="xref">nepi.resources.ns3.ns3wifiphy</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3wifiremotestationmanager"><tt class="xref">nepi.resources.ns3.ns3wifiremotestationmanager</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3wrapper"><tt class="xref">nepi.resources.ns3.ns3wrapper</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.ns3wrapper_debug"><tt class="xref">nepi.resources.ns3.ns3wrapper_debug</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.ns3.html#module-nepi.resources.ns3.resource_manager_generator"><tt class="xref">nepi.resources.ns3.resource_manager_generator</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.omf.html#module-nepi.resources.omf"><tt class="xref">nepi.resources.omf</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.omf.html#module-nepi.resources.omf.application"><tt class="xref">nepi.resources.omf.application</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.omf.html#module-nepi.resources.omf.channel"><tt class="xref">nepi.resources.omf.channel</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.omf.html#module-nepi.resources.omf.interface"><tt class="xref">nepi.resources.omf.interface</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.omf.html#module-nepi.resources.omf.messages_5_4"><tt class="xref">nepi.resources.omf.messages_5_4</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.omf.html#module-nepi.resources.omf.messages_6"><tt class="xref">nepi.resources.omf.messages_6</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.omf.html#module-nepi.resources.omf.node"><tt class="xref">nepi.resources.omf.node</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.omf.html#module-nepi.resources.omf.omf5_api"><tt class="xref">nepi.resources.omf.omf5_api</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.omf.html#module-nepi.resources.omf.omf6_api"><tt class="xref">nepi.resources.omf.omf6_api</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.omf.html#module-nepi.resources.omf.omf6_parser"><tt class="xref">nepi.resources.omf.omf6_parser</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.omf.html#module-nepi.resources.omf.omf_api_factory"><tt class="xref">nepi.resources.omf.omf_api_factory</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.omf.html#module-nepi.resources.omf.omf_client"><tt class="xref">nepi.resources.omf.omf_client</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.omf.html#module-nepi.resources.omf.omf_resource"><tt class="xref">nepi.resources.omf.omf_resource</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.omf.html#module-nepi.resources.omf.wilabt_node"><tt class="xref">nepi.resources.omf.wilabt_node</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.planetlab.html#module-nepi.resources.planetlab"><tt class="xref">nepi.resources.planetlab</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.planetlab.html#module-nepi.resources.planetlab.node"><tt class="xref">nepi.resources.planetlab.node</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.planetlab.ns3.html#module-nepi.resources.planetlab.ns3"><tt class="xref">nepi.resources.planetlab.ns3</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.planetlab.ns3.html#module-nepi.resources.planetlab.ns3.fdudptunnel"><tt class="xref">nepi.resources.planetlab.ns3.fdudptunnel</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.planetlab.ns3.html#module-nepi.resources.planetlab.ns3.tuntapfdlink"><tt class="xref">nepi.resources.planetlab.ns3.tuntapfdlink</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.planetlab.openvswitch.html#module-nepi.resources.planetlab.openvswitch"><tt class="xref">nepi.resources.planetlab.openvswitch</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.planetlab.openvswitch.html#module-nepi.resources.planetlab.openvswitch.ovs"><tt class="xref">nepi.resources.planetlab.openvswitch.ovs</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.planetlab.openvswitch.html#module-nepi.resources.planetlab.openvswitch.ovsport"><tt class="xref">nepi.resources.planetlab.openvswitch.ovsport</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.planetlab.html#module-nepi.resources.planetlab.plcapi"><tt class="xref">nepi.resources.planetlab.plcapi</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.planetlab.html#module-nepi.resources.planetlab.sfa_node"><tt class="xref">nepi.resources.planetlab.sfa_node</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.planetlab.html#module-nepi.resources.planetlab.tap"><tt class="xref">nepi.resources.planetlab.tap</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.planetlab.html#module-nepi.resources.planetlab.tun"><tt class="xref">nepi.resources.planetlab.tun</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.resources.planetlab.html#module-nepi.resources.planetlab.vroute"><tt class="xref">nepi.resources.planetlab.vroute</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.util.html#module-nepi.util"><tt class="xref">nepi.util</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.util.html#module-nepi.util.environ"><tt class="xref">nepi.util.environ</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.util.html#module-nepi.util.execfuncs"><tt class="xref">nepi.util.execfuncs</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.util.html#module-nepi.util.guid"><tt class="xref">nepi.util.guid</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.util.html#module-nepi.util.logger"><tt class="xref">nepi.util.logger</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.util.html#module-nepi.util.manifoldapi"><tt class="xref">nepi.util.manifoldapi</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.util.html#module-nepi.util.netgraph"><tt class="xref">nepi.util.netgraph</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.util.html#module-nepi.util.parallel"><tt class="xref">nepi.util.parallel</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.util.parsers.html#module-nepi.util.parsers"><tt class="xref">nepi.util.parsers</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.util.parsers.html#module-nepi.util.parsers.xml_parser"><tt class="xref">nepi.util.parsers.xml_parser</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.util.html#module-nepi.util.plotter"><tt class="xref">nepi.util.plotter</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.util.html#module-nepi.util.rmatcher"><tt class="xref">nepi.util.rmatcher</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.util.html#module-nepi.util.serializer"><tt class="xref">nepi.util.serializer</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.util.html#module-nepi.util.sfaapi"><tt class="xref">nepi.util.sfaapi</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.util.html#module-nepi.util.sfarspec_proc"><tt class="xref">nepi.util.sfarspec_proc</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.util.html#module-nepi.util.sshfuncs"><tt class="xref">nepi.util.sshfuncs</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.util.html#module-nepi.util.statfuncs"><tt class="xref">nepi.util.statfuncs</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="_layout/nepi.util.html#module-nepi.util.timefuncs"><tt class="xref">nepi.util.timefuncs</tt></a></td><td>
+       <em></em></td></tr>
+   </table>
+
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="#" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/search.html b/doc/sphinx/_build/html/search.html
new file mode 100644 (file)
index 0000000..fff7c62
--- /dev/null
@@ -0,0 +1,105 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>Search &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    './',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="_static/jquery.js"></script>
+    <script type="text/javascript" src="_static/underscore.js"></script>
+    <script type="text/javascript" src="_static/doctools.js"></script>
+    <script type="text/javascript" src="_static/searchtools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="index.html" />
+  <script type="text/javascript">
+    jQuery(function() { Search.loadIndex("searchindex.js"); });
+  </script>
+  
+  <script type="text/javascript" id="searchindexloader"></script>
+   
+
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1 id="search-documentation">Search</h1>
+  <div id="fallback" class="admonition warning">
+  <script type="text/javascript">$('#fallback').hide();</script>
+  <p>
+    Please activate JavaScript to enable the search
+    functionality.
+  </p>
+  </div>
+  <p>
+    From here you can search these documents. Enter your search
+    words into the box below and click "search". Note that the search
+    function will automatically search for all of the words. Pages
+    containing fewer words won't appear in the result list.
+  </p>
+  <form action="" method="get">
+    <input type="text" name="q" value="" />
+    <input type="submit" value="search" />
+    <span id="search-progress" style="padding-left: 10px"></span>
+  </form>
+  
+  <div id="search-results">
+  
+  </div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="index.html">NEPI 3.0 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/doc/sphinx/_build/html/searchindex.js b/doc/sphinx/_build/html/searchindex.js
new file mode 100644 (file)
index 0000000..163da03
--- /dev/null
@@ -0,0 +1 @@
+Search.setIndex({envversion:42,terms:{get_slice_resourc:16,get_object:[20,6],wait_start:10,prefix:[16,1],wait_local_port:8,nthread:10,concret:10,ns3ccnpeekdceappl:[8,12,1,21],linuxccnpok:0,ns3basestationnetdevic:11,everi:16,do_releas:[8,1,19,9,2,10,13,4],ns3subscriberstationnetdevic:11,manifoldapi:[12,17],ns3fdnetdevic:[12,21],cmd:[16,1],upload:[1,4],netns_vers:2,sliceid:4,verif:[4,9],enable_trac:10,ns3randompropagationdelaymodel:11,histor:3,consequ:10,second:[10,16,4],aggreg:[3,16],linuxtcpdump:1,udp_l4protocol:[12,21,6],even:1,ns3pingdceappl:[12,1,21],messages_6:[12,21],omf6_api:[12,21],introspect:6,adhoc:16,ns3apwifimac:11,"new":[10,16,4],net:[1,4],topolog:[3,16],ovsswitch:19,linuxp:1,controlmast:16,omfappl:4,ns3fixedrsslossmodel:11,path:[0,8,1,2,10,16,3,4,22],taskstatu:10,ns3udpl4protocol:11,okumura_hata_propagation_loss_model:[12,21,6],unreserve_host:9,datetim:16,endpoint_mkdir:[8,1],realeas:10,sdate:16,countn:3,unix:4,linuxnod:[1,9],plot:[10,16],describ:10,would:1,omf_resourc:[12,21],call:[10,16,4,9],ns3dcehelp:[12,21],type:[19,10,13,16,4,23],until:[8,1,9,2,10,16,4],heappop:10,ns3constantvelocitymobilitymodel:11,relat:[10,1,6],notic:[1,4],warn:16,parse_fil:[3,22],get_platform:10,register_resourc:10,hold:[16,1],yans_wifi_phi:[12,21,6],uploadin:1,must:[10,16,1],join:16,err:[16,1],pid:[16,1,6],work:[16,1],spec:16,server_kei:16,get_provision_tim:10,upload_start_command:[8,0,1,9,2],root:[10,16,4],overrid:10,set_stop:10,unregister_condit:10,indic:16,rgister:10,ns3binaryerrorsixlowmodel:11,want:[1,4],prefixlen:16,ns3loopbacknetdevic:11,end:[16,1,4],fail_sfaapi:[4,9],how:1,sever:10,env:[16,1,4],peer_map:9,udp_serv:[12,21,6],src_dir:[8,1,2],config:16,connect_timeout:[16,1,4],ns3mobilitymodel:[12,21],confid:10,ns3tapbridg:11,ladder:16,after:[10,16,19,4,9],openvswitch:[12,21,9],lab:9,befor:[10,16,1,19],mesh:16,arch:9,parallel:[12,17],slice_id:16,clean_hom:1,ns3server:[12,21],credenti:[10,16,4],content_histori:3,receiv:[10,4],environ:[12,1,17,4],order:[10,16,4],netn:[12,1,21],sta_wifi_mac:[12,21,6],ocb_wifi_mac:[12,21,6],uuid:[20,6],reserve_resourc:16,filter_existing_fil:1,select_target_zero:16,persist:[10,16,1,4],cred:4,them:10,thei:[16,1,4],bootstrapf:9,safe:[10,16],ostyp:1,stop_with_condit:10,maxqueu:16,interrupt:10,wait_releas:10,min_run:10,pformat:16,each:[10,3,4,9,16],debug:[16,1,20,6],linuxtun:1,mean:[10,1,4],onoe_wifi_manag:[12,21,6],myslic:16,range_propagation_loss_model:[12,21,6],pl_user:9,point_to_point_net_devic:[12,21,6],csma_net_devic:[12,21,6],upload_sourc:[7,8,1,9,2],collector:[12,21],network:[10,16],dst:1,linuxns3cli:8,content:17,nito:4,linear:16,use_rpm:1,free:10,standard:16,netnswrappermessag:20,sigkil:16,fcdistro:9,store_path:13,linuxccncat:0,experimentid:4,filter:[10,16,9],unabl:1,lte_ue_net_devic:[12,21,6],onto:16,rang:10,netns_src:2,edge_net_annot:16,clsinit_copi:10,independ:10,restrict:10,hook:4,instruct:1,get_o:1,messag:[10,3,4],ns3tworaygroundpropagationlossmodel:11,sleekxmpp:4,consol:1,log_funct:4,tool:[16,1],wlab17:4,alreadi:[10,16,1],pl_host:9,set_ec_failur:10,target:[16,4],keyword:9,provid:[10,3,1],tree:16,"final":10,assign_control:19,provis:[10,16,4,9],ns3errormodel:[12,21],ccn_client_helper_uuid:6,runner:[12,17],execute_command:1,ns3lteenbnetdevic:11,wait_pid:1,log_distance_propagation_loss_model:[12,21,6],recreat:10,linuxappl:[0,8,1,19,2,9],ns3simul:[12,1,21],fname:3,lte_simple_net_devic:[12,21,6],ns3wrapper:[12,21],port_numb:19,usernam:[16,9],ns3channel:[12,21],register_typ:10,mesh_point_devic:[12,21,6],planetlabovsport:19,don:4,random_propagation_loss_model:[12,21,6],doe:[10,16,19,9],dump_factori:[20,6],get_help:10,declar:10,release_tim:10,dot:16,frcp_configur:4,servers_on:19,random:16,dirpath:[10,16],get_resourc:10,hybrid_buildings_propagation_loss_model:[12,21,6],find_typ:10,fail_node_not_al:[4,9],involv:10,absolut:[10,16],udp_trace_cli:[12,21,6],explain:[],configur:[10,0,4,8],stanza:4,than:10,modenapl:16,busi:1,folder:[10,16,1],timefunc:[12,17],create_ns3_rm:6,resourcemang:10,stop:[6,8,1,19,2,10,4],sfaapi:[12,17,4,9],udptunnel:[12,21],report:10,ideal_wifi_manag:[12,21,6],symmetr:10,ns3_set:6,omf5_api:[12,21],ns3constantpositionmobilitymodel:11,method:[6,1,9,10,20,16,4],check_releas:4,human:10,multi_model_spectrum_channel:[12,21,6],result:[10,16,1],ns3aarfcdwifimanag:11,respons:[10,1],fail:10,fd_net_devic:[12,21,6],dsrdsr_rout:[12,21,6],subject:10,discoveri:10,endpoint_nod:8,figur:[10,16],ns3applic:[12,21],dce_application_lock:6,udp_echo_cli:[12,21,6],res_id:4,remote_span:16,attribut:[12,17],accord:16,omf:[10,12,21],ns3_src_locat:8,ns3basemobilitymodel:[11,6],get_p2p_info:16,ovsport:[12,21,9],omf6_pars:[12,21],oml:16,extens:[10,5,9],advertis:16,ns3_build_loc:8,howev:[10,16],lte_enb_net_devic:[12,21,6],login:[16,9],strict_host_check:[16,1,4],ns3bridgechannel:11,slice_tag_id:9,nicta:4,guid:[0,6,7,8,12,1,19,9,2,10,13,11,14,17,4,20],assum:[10,16],ns3listerrormodel:11,xmldecod:23,been:[10,16,4],enrol:4,gre_en:1,terminate_connect:[8,1,19],unsubscrib:4,ns3basenetdevic:[11,6],basic:10,endpoint1:[8,1],endpoint2:[8,1],csma_channel:[12,21,6],run_serv:[20,6],hpcbench:1,xml_parser:[16,12],ani:[10,1,4,9],ns3basearpl3protocol:[11,6],blacklist_resourc:16,child:[10,4],get_opt:[20,6],dce_manager_lock:6,ident:16,servic:[16,9],properti:[16,4,9],sourceforg:1,sfarspecprocess:16,check_readi:4,spawn:[16,1],applic:[10,12,21],"0x7f028ff15bb0":16,set_discov:10,ityp:4,kwarg:[6,8,2,10,20,16],make_dict_rec:16,conn:[20,6],sfa_nod:[12,21],ccnr:[12,1,21],perform:10,make:[10,16],ccnd:[3,12,1,21],complex:9,configure_ip:4,ns3friispropagationlossmodel:11,complet:[10,9],parse_sfa_rspec:16,do_deploi:[0,6,8,1,19,9,2,10,13,4,20],nid:[3,16],rais:10,enable_dc:8,ns3_wrapper:6,ns3dceapplic:[12,1,21],netnswrapp:[12,21],redefin:10,scenario:10,inherit:10,client:[6,1,9,20,16,4],get_slice_vnet_sys_tag:9,thi:[5,6,1,9,10,20,16,4],install_depend:1,tcp_l4protocol:[12,21,6],protocol:4,linuxns3dceappl:8,ns3baseipv4l3protocol:[11,6],initiate_connect:[8,1],yet:[16,4],expos:10,character:10,save:[10,16,1],adress:4,noop_funct:4,mayb:16,preserv:1,ns3threelogdistancepropagationlossmodel:11,ns3ccncatdceappl:[8,12,1,21],background:[16,1],dce_vers:8,measur:[10,1],daemon:1,specif:[10,1,4],manual:1,fail_discoveri:[4,9],ns3okumurahatapropagationlossmodel:11,dce_application_uuid:6,fedora_12:1,fedora_14:1,negat:9,interv:10,recv_msg:[20,6],intern:16,clean_experi:1,planetlabtun:9,set_provis:10,subclass:10,get_trac:10,ns3basefdnetdevic:[11,6],condit:10,localhost:1,start_multical:9,core:[],plu:16,ssh_config:16,ple:[16,9],plc:9,unregister_connect:10,peer:9,get_nod:9,guidgener:16,obj:16,tdiffsec:16,make_kei:16,simul:[8,5,6,10,2],timestamp2:16,timestamp1:16,produc:10,ns3basedceappl:[8,6],shell_escap:16,newuuid:[20,6],"float":10,encod:16,www:9,node_ip_annot:16,separet:1,often:4,ns3sixlowpannetdevic:11,wai:[16,1,4,9],support:[10,16,1,9],transform:10,avail:[10,1,19],ap_wifi_mac:[12,21,6],gil:10,tcpdump:[12,21],fork:1,matrix_propagation_loss_model:[12,21,6],medium:1,minstrel_wifi_manag:[12,21,6],form:10,forc:[10,16,1],run_hom:[8,1],raise_on_error:1,heap:10,"true":[10,16,1,4],flavour:9,attr:[0,6,8,1,10,20,4],set_with_condit:10,mtr:[12,21],maximum:10,mtu:1,ecxmlpars:23,tsformat:16,ns3nisterrorratemodel:11,fixed_rss_loss_model:[12,21,6],featur:16,netnsipv4rout:20,configure_ifac:4,get_resource_urn:16,diagnost:16,workerthread:16,exist:[1,19,10,9,16,4],check:[1,19,10,9,16,4],from_typ:23,verify_connect:[8,1,19],steady_state_random_waypoint_mobility_model:[12,21,6],ns3baseicmpv4l4protocol:[11,6],when:[10,16,1,4],annotate_cn_nod:[3,22],test:[16,9],ns3node:[12,21],node:[10,3,12,21],traceattr:10,consid:10,to_typ:23,emu_get:20,longer:10,emu_net_devic:[12,21,6],create_hom:[16,1],exp_hom:1,time:[10,16,4,9,6],resource_urn:16,uan_channel:[12,21,6],annotate_node_ip:16,simple_net_devic:[12,21,6],concept:10,skip:10,consum:3,focus:4,create_and_enroll_top:4,fail_not_enough_nod:[4,9],remote_statu:16,netnsswitch:[12,21],decid:10,depend:[1,4,9],graph:[10,3,22,16],readabl:10,node_count:16,sourc:[0,13,5,7,6,1,19,9,2,10,16,23,11,8,3,14,4,22,20],string:[10,16,1,9],ns3receivelisterrormodel:11,wait_run:1,pl_pass:9,add_set_hook:[1,4],level:[10,16,20,4,6],get_rtyp:10,connection_app_hom:[1,19,9],upload_fil:1,filter_resourc:10,channeltofreq:4,receive_list_error_model:[12,21,6],ns3constantaccelerationmobilitymodel:11,arf_wifi_manag:[12,21,6],ns3ccnddceapplic:[8,12,1,21],port:[8,1,4,19,16],del_edge_annot:16,establish_connect:[8,1],repli:[16,20,6],current:[10,16,4,19],stformat:16,ovs_statu:19,deriv:10,udp_echo_serv:[12,21,6],old_valu:4,gener:[10,8,1,4,9],cara_wifi_manag:[12,21,6],satisfi:10,address:[10,8,4,16],use_deb:1,wait:[8,1,19,2,10,9],box:[16,4],check_mailbox:4,sfi_sm:16,plotter:[12,17],netgraph:[10,12,17],queue:[10,16,6],trial:1,yans_error_rate_model:[12,21,6],environn:4,linuxnetnscli:2,generate_topolog:16,prefer:10,backtick:16,instal:[1,9],mobil:6,ipv4l3protocol:[12,21,6],live:[5,1],criteria:10,msg:[10,8,1,16],scope:[10,1],ppid:[16,1],ns3steadystaterandomwaypointmobilitymodel:11,send_repli:[20,6],ip2:16,plexu:4,ip1:16,ip6:1,ip4:1,exp_id:[10,4],ccncat:[12,1,21],three_log_distance_propagation_loss_model:[12,21,6],uniqu:[10,16,4],cat:1,can:[10,16,1,4],deploy_with_condit:10,process_content_histori:3,purpos:10,get_resources_info:16,stream:10,ns3randomwalk2dmobilitymodel:11,eval_failur:10,topic:4,critic:10,abort:10,occur:[10,16,1],alwai:1,dump_head:[20,6],unimo:16,multipl:[10,16],annotate_edg:16,check_statu:[1,19],ns3radvd:11,ping:[12,15,18],purg:4,create_port:19,map:[16,9],stdin_funct:4,mac:1,nitlab:4,two_ray_ground_propagation_loss_model:[12,21,6],date:[10,16,4],data:[12,17],ns3arfwifimanag:11,vif_name_fil:9,stdin:[16,1,4],assign_p2p_ip:16,inform:[6,9,10,16,3,4],"switch":[10,20,19],block:[0,6,8,1,10,20,16,4],callabl:16,replace_path:[8,1,2],tty:[16,1,4],ns3wifiremotestationmanag:[12,21],still:[16,1],entiti:[10,13],jid:4,group:[10,16],polici:10,ns3wrappermessag:6,ns3propagationlossmodel:[12,21],platform:[10,16],mail:4,plcapi:[12,21],non:1,ns3randomdirection2dmobilitymodel:11,initi:[10,8,4],remove_resourc:10,select_base_class:6,verifi:8,now:4,list_error_model:[12,21,6],ns3ccnpokedceappl:[8,12,1,21],name:[0,6,8,1,9,2,10,20,16,3,4],separ:10,initiate_udp_connect:[1,19],x11:1,netnsclient:[12,1,21],ns3bulksendappl:11,compil:1,ns3rateerrormodel:11,udp_connect:1,replac:[8,1,2],continu:[10,16,1],newval:1,happen:[16,1],error_channel:[12,21,6],ns3constantspeedpropagationdelaymodel:11,subnet:16,ccn_produc:3,type_nam:[20,6],resource_hrn:16,cipher_kei:[8,1,19],oldval:1,factori:[8,16,6],resource_typ:10,ns3amrrwifimanag:11,urlpattern:[16,9],ns3errorchannelsixlow:11,get_start_tim:10,"byte":10,care:[10,16,1],ns3udptracecli:11,frequenc:4,synchron:1,turn:19,log_messag:[10,8,1,16],first:[10,16,1],oper:[10,20,6],do_fail:10,directli:[10,1,4],upload_command:1,onc:16,arrai:9,ns3cost231propagationlossmodel:11,parser:[12,15,18],error_channel_sixlow:[12,21,6],enable_dump:[20,6],custom:[4,9],open:16,size:10,given:[10,16,9],local_port:8,cumul:10,copi:[10,16,1],specifi:[10,16,9],open_socket:6,blacklist:[16,9],reserved_tim:10,ns3baseccndceappl:[14,6],add_edge_callback:10,ns3ccnrdceapplic:[8,12,1,21],tuntapfdlink:[12,1,21],sasl_mech:4,lkill:16,get_node_info:9,classmethod:[10,16,4,9],python_passfd_src:2,ressourc:10,were:10,tophat:16,ns3idealwifimanag:11,dump_to_script:[20,6],argument:[10,16,4,9],parallelrun:16,inform_failur:10,do_discov:[10,1,4,9],destroi:16,note:[1,9],ideal:16,omfnod:4,take:[10,16,1],advis:16,burst_error_model:[12,21,6],dump_get:[20,6],noth:[16,4],channel:[12,21],del_node_annot:16,begin:10,sure:16,trace:[12,17],normal:[10,1],track:[10,16],set_ec:10,ns3carawifimanag:11,set_glob:10,date2:16,pair:16,remove_packag:1,wilabtsfanod:4,ns3ping6:11,omf5:4,fdnetdevic:[7,8,6],later:[1,4],runtim:1,put_nowait:16,ns3basewifinetdevic:[11,6],start_with_condit:10,topologytyp:16,show:[10,16],get_failed_tim:10,netnsnod:[12,21],itu_r1411nlos_over_rooftop_propagation_loss_model:[12,21,6],xml:[10,16,23],onli:[1,19,10,9,16,4],explicitli:[10,1],state:[0,6,8,1,10,20,4],dict:[16,4],rspec_str:16,get:[6,8,1,9,2,10,19,16,4,20],repo:2,ssl:4,create_funct:4,ssh:[16,19,1,4,9],is_sourc:16,requir:[10,16,1],yield:10,upload_stdin:1,ns3lrwpannetdevic:11,make_control_path:16,where:[16,1,19],format_arg:[20,6],rexec:16,from_xml:23,msg_type:[8,6,20,2],fail_plapi:9,concern:4,date1:16,upload_cod:1,ns3baseappl:[11,6],parent:[10,16,4],ns3icmpv4l4protocol:[12,21],enumer:10,enough:10,ns3fibentrydceappl:[8,12,1,21],between:10,"import":[10,1],cmdlinearg:4,create_socket:20,amtogatewai:4,get_glob:10,ns3droptailqueu:11,tun:[12,21],remote_socket:[8,2],mani:[10,1],with_lock:1,mesh_wifi_interface_mac:[12,21,6],format_environ:1,ns3constantratewifimanag:11,colon:1,deploi:[10,1,4,19],binary_error_model:[12,21,6],get_ready_tim:10,ns3onoewifimanag:11,mark:[10,16],breath:16,omfresourc:4,state_time_attr:10,plapi:9,repons:13,newexp_funct:4,reschedul:10,do_provis:[6,19,1,13,10,9,4,20],ns3minstrelwifimanag:11,linuxns3dcefibentri:14,single_model_spectrum_channel:[12,21,6],prefixt:16,local_endpoint:19,linuxudptunnel:[8,1],gretunnel:[12,21],ns3multimodelspectrumchannel:11,experimentrunn:[10,5],set_hook:10,"case":[16,4],sfi_us:16,ovswitch:19,linuxrout:1,linuxns3dceccnpok:14,exec_run_hom:9,cast:23,invok:[10,8,6,20,2],invoc:[16,1,4],arp_l3protocol:[12,21,6],ccnapplic:[12,1,21],virtual_net_devic:[12,21,6],add_slice_nod:9,stdout:[16,1],metric:10,destin:[16,1,4],lr_wpan_net_devic:[12,21,6],ns3yanswifiphi:11,initialize_work:16,rmatcher:[12,17],dce_src_loc:8,same:[1,13,10,9,16,4],binari:1,ns3rraawifimanag:11,finish:[16,1,4],evaluate_convergence_callback:10,dump_stop:6,escape_quot:4,driver:5,check_sliver_ov:19,capabl:10,ns3bursterrormodel:11,finish_multical:9,ready_tim:10,ns3csmachannel:11,execute_deploy_command:1,load_content_histori:3,ccn:[12,15,18],disassoci:10,rpmfunc:[12,21],linuxccnd:0,manifold:16,execut:[12,17],allowed_typ:6,failed_tim:10,kill:[16,1,4],linuxccnr:0,get_slic:9,linuxccnp:0,flavor:1,struct:9,get_resources_hrn:16,except:1,param:[10,16,9],get_slice_tag:9,forward_x11:[16,1,4],newexp:4,ns3errornetdevic:11,drop_tail_queu:[12,21,6],read:[10,1],tid:[10,6],dbase:16,xmpp_root:4,get_frequ:4,delayed_except:16,integ:[10,1],server:[16,1,4,19],red_queu:[12,21,6],either:[10,16,1,4],appid:4,output:[16,1],manag:[10,5,16],is_valid_valu:10,format_kwarg:[20,6],ns3netdevic:[12,21],constant_speed_propagation_delay_model:[12,21,6],adequ:10,ns3wifiphi:[12,21],planetlabovsswitch:19,slice:[16,4,9],confirm:4,linuxns3simul:8,set_target:16,level_nam:4,exit:[10,1,4],nodefamili:9,linuxchannel:1,tapnod:8,do_stop:[0,6,8,1,9,2,10,20,4],add_resource_to_slice_batch:16,is_target:16,timeout:16,share_dir:1,logs_dir:[3,22],"throw":1,src:[1,4,2],select_random_sourc:16,central:16,netnsipv4address:[12,21],register_connect:10,establish_udp_connect:[1,19],shra:4,omfchannel:4,unregist:4,remove_packages_command:1,constant_rate_wifi_manag:[12,21,6],stare:16,log:[10,3,4,16],area:9,alias_funct:4,overwrit:1,start:[6,8,1,19,2,10,16,4],interfac:[10,12,21],rmdir:1,iff_tap:1,tupl:16,recv_fd:6,friis_propagation_loss_model:[12,21,6],netnsinterfac:[12,21],possibl:[10,1,4,19],"default":[10,16,4,9],uid:4,creat:[6,8,1,9,2,10,19,16,4,20],certain:10,file:[8,1,9,10,16,3,4,22],planetlabvrout:9,orient:[],field:[16,9],valid:[10,16],nakagami_propagation_loss_model:[12,21,6],you:[16,1,4],architectur:4,registri:9,python_unshare_src:2,ns3baseerrorratemodel:[11,6],dump_invok:[20,6],remote_kil:16,linuxinterfac:1,directori:[10,16,1,13],release_funct:4,wifi:4,descript:10,set_stat:10,escap:[8,1,16,2],bulk_send_appl:[12,21,6],represent:[10,16],all:[10,12,21],remove_resource_from_slic:16,do_connect:10,ns3itur1411lospropagationlossmodel:11,check_error:1,code:[10,5,1,16,8],follow:[10,1,9],scp:16,edg:16,get_node_flavour:9,template_attribut:6,those:[10,1],yans_wifi_channel:[12,21,6],ccnping:[12,1,21],global:[10,9],delete_slice_nod:9,noread:10,fals:[6,1,10,20,16,3,4],sshfunc:[12,17],vif_typ:1,util:[10,12,17,4],clientxmpp:4,load_ns3_modul:6,failur:10,jakes_propagation_loss_model:[12,21,6],nepi_hom:1,list:[7,8,1,9,10,16,4],ec_failur:10,emul:[5,20,2],stderr:[16,1],node1:8,node2:8,ns3wifinetdevic:[12,21],dump_shutdown:[20,6],omf_api_factori:[12,21],sync:16,design:10,pass:[10,16],fail_node_not_avail:[4,9],socket_nam:[8,6,20,2],brief:1,make_server_key_arg:16,configure_funct:4,delet:[16,1,4,19],ns3pipechanel:[12,21],version:[0,4,16,14],"public":16,is_finish:6,full:[10,4],exit_funct:4,send_stdin:4,ns3udpechoserv:11,bin_dir:1,dump_set:[20,6],modifi:10,valu:[6,1,10,20,16,4,23],optionn:9,search:[5,16],ecstat:10,ns3ccndceapplic:[8,12,1,21],unenroll_top:4,ns3pointtopointnetdevic:11,action:10,messagehandl:4,clone_command:2,six_low_pan_net_devic:[12,21,6],rraa_wifi_manag:[12,21,6],compute_mean:16,filenam:[3,1,22,8],establish:8,regist:[10,4],two:[10,1,6],taken:10,more:16,desir:[16,1,4,19],oh_buildings_propagation_loss_model:[12,21,6],ns3wrapperdebug:6,flag:[10,16],particular:16,known:10,set_valu:10,frcp_inform:4,none:[6,8,1,9,2,10,16,4],endpoint:[7,8,1,19],sincron:9,remote_spawn:16,dev:16,histori:3,remain:1,openssh:16,get_slice_id:9,share:[1,4,9],templat:10,ecplott:16,minimum:10,max_run:10,ns3pointtopointchannel:11,interconnect:[7,8,10,6],gwuser:16,procstatu:16,anoth:[10,1],ns3packetsink:11,random_waypoint_mobility_model:[12,21,6],ns3gaussmarkovmobilitymodel:11,ns3randompropagationlossmodel:11,isn:16,resourc:[12,17],cost231propagation_loss_model:[12,21,6],format_valu:[20,6],ns3udpechocli:11,associ:[10,13],rspawn:16,"short":1,connection_run_hom:[1,19,9],caus:16,callback:10,help:10,xmpp:4,vif_type_flag:1,through:[10,4],ns3csmanetdevic:11,paramet:[19,1,13,10,9,16,4],itu_r1411los_propagation_loss_model:[12,21,6],get_valu:10,pend:10,getpid:1,bypass:16,netnsnodeinterfac:[12,21],omf_client:[12,21],"return":[7,8,1,9,10,19,16,3,4],timestamp:[10,4],planetlabsfanod:9,resource_manager_gener:[12,21],framework:16,ns3adhocwifimac:11,detach:1,set_sourc:16,gethostbynam:16,dceapplic:6,ns3ohbuildingspropagationlossmodel:11,sfaapifactori:16,sock_nam:1,wait_deploi:10,fulli:9,lib_dir:1,load_configur:1,ns3basechannel:[11,6],realli:1,connect:[6,1,19,10,20,16,4],handle_messag:[20,6],event:4,provision_tim:10,item:4,enroll_host:4,publish:4,lstatu:16,print:19,foreground:1,qualifi:9,proxi:9,random_propagation_delay_model:[12,21,6],ns3onoffappl:11,reason:10,base:[0,6,7,8,1,19,9,2,10,23,13,16,11,14,4,20],clazznam:[20,6],put:[16,4],bash:1,planetlabns3fdudptunnel:7,thread:[10,16,4,9,6],launch:1,retriv:1,edge_annot:16,reserve_host:9,assign:[10,16,19],wait_finish:10,number:[10,8,4,16],xmppp:4,done:[10,16],do_start:[0,6,8,1,9,2,10,20,4],jabber:4,baseomfcli:4,differ:[10,16,1,4],script:1,interact:[10,1],linuxns3dceccnr:14,construct:[10,16,20,6],gauss_markov_mobility_model:[12,21,6],linuxdcep:8,linuxns3dceccncat:14,linuxns3dceccnd:14,store:[10,16,1],option:[16,1,9],relationship:10,get_slice_nod:9,part:[10,1],pars:[3,16],remot:[8,1,16,2],remov:[10,16,1],local_p:9,random_walk2d_mobility_model:[12,21,6],bridg:19,str:[10,16,4,9,23],expid:4,comput:[10,3,16],set_releas:10,omfwifiinterfac:4,packag:17,netnsserv:[12,21],"null":16,ns_log:6,annotate_nod:16,lib:1,self:[10,1],also:[16,1],without:[16,4],build:[16,1,4],vif_nam:9,distribut:10,get_resource_typ:10,planetlab:[10,12,21],previou:16,reach:10,ns3rout:[12,21],stdin_hook:4,node_id:[9,6],app_hom:[8,1],ns3noncommunicatingnetdevic:11,parse_ping_log:3,loopback_net_devic:[12,21,6],exp:1,execfunc:[12,17],linuxnp:1,netnswrapperdebug:20,debfunc:[12,21],heapq:10,ns3wifimac:[12,21],session:[16,4],networkx:16,ns3basewifichannel:[11,6],find:10,access:10,wifi_net_devic:[12,21,6],quer:16,evaluate_normal_converg:10,random_direction2d_mobility_model:[12,21,6],unus:4,express:[10,16],nativ:9,configure_on_omf5:4,configure_on_omf6:4,aarfcd_wifi_manag:[12,21,6],ns3icmpv6l4protocol:11,iff_tun:1,ns3basepropagationlossmodel:[11,6],netnsemul:[12,1,21],common:[20,4,6],set_start:10,planetlabtap:9,arp:6,linuxtunnel:1,locali:16,get_endpoint:[7,8,1],point_to_point_remote_channel:[12,21,6],see:16,linuxccnappl:0,arg:[6,8,1,13,2,10,19,16,4,20],reserv:[10,16,9],resourceact:10,ns3udpclient:11,reus:16,fibentri:[12,1,21],subscript:4,experi:[5,1,13,10,19,16,4],xmppclient:4,valid_connect:[0,8,1,19,9,2,10,13,4],numer:[10,9],to_xml:23,network_typ:9,tnow:16,ecseri:16,ns3simplenetdevic:11,install_packag:1,run_dir:10,clsinit:10,load:[10,16],run_id:10,instanti:10,schedul:[12,17],do_reserv:10,home_dir:1,linuxtracerout:1,shutdown:[10,8,6,20,2],linux:[10,12,21],backend:16,guid1:10,guid2:10,adhoc_wifi_mac:[12,21,6],devic:[7,8,1,9,6],empti:16,find_box:16,netnsappl:[12,21],ns3basewifiphi:[11,6],linuxns3ccndceappl:14,slice_id_or_nam:9,imag:[4,9],rspec:16,is_control:3,func:[10,16],blacklist_host:9,ns3jakespropagationlossmodel:11,look:[10,16],batch:16,"while":[10,1],behavior:[10,1,4],error:[10,16,1,19],python_passfd_repo:2,readi:[10,4],omf5api:4,origin:4,netnsbas:[12,21],itself:19,manifoldapifactori:16,bwlimit:[8,1,19],get_resources_by_typ:10,decor:10,fedora:1,belong:10,resolve_hostnam:16,sliver:[16,19],ns3tcpl4protocol:11,content_nam:3,rcopi:16,moment:[10,4],temporari:16,user:[10,16,1,4,9],lgetpid:16,find_hom:1,implement:[10,4],subpackag:17,openssh_has_persist:16,travers:16,task:[10,16,1],replace_arg:[20,6],older:16,wait_vif_nam:9,explan:1,ns3wrapper_debug:[12,21],app_id:4,udptest:[12,21],planetlabnod:9,close_socket:6,enrollkei:4,linuxccnpingserv:0,"0x7f0290310f90":6,input:[16,1],point_to_point_channel:[12,21,6],modul:17,bin:1,is_run:6,format:[10,16,1],submodul:[12,15,17,18],tap_bridg:[12,21,6],exp_dir:[10,1],ccn_client_lock:6,semi:1,dce_repo:8,signal:16,upload_extra_sourc:[8,2],elaps:10,collect:[10,22,13],"boolean":[10,19,4,9],frcp_creat:4,has_attribut:10,load_ns3_librari:6,plc_flavour:9,creation:[16,4],some:[16,9],back:4,failure_level:10,unspecifi:9,sampl:[10,16],ns3ltesimplenetdevic:11,ns3simplechannel:11,per:16,prop:4,retri:[16,1,4],reproduc:1,machin:10,object:[6,9,10,20,16,4,23],run:[10,16,1,4,19],has_flag:10,ping6:[12,21,6],gre_connect:[1,9],sfi_registri:16,wait_all_readi:10,from:[10,3,1,4,16],get_release_tim:10,send_msg:[8,2],constraint:16,private_kei:16,idn:16,dump_start:6,ns3kun2600mhzpropagationlossmodel:11,exitcod:1,pythonpath:1,pldistro:9,hrn:[16,4],all_tag:16,devnam:1,nowrit:10,omf6api:4,sock:6,"long":1,set_fail:10,includ:9,forward:1,compute_metric_callback:10,ns3hierarchicalmobilitymodel:11,ns3uanchannel:11,atom:10,line:[16,1],ns3:[12,1,21],info:[16,1,4],cid:4,uth:4,nid1:[16,22],planet:9,set_hook_mtu:1,similar:1,frcp_releas:4,set_state_tim:10,msg_id:4,ns3basequeu:[11,6],doesn:[16,4],repres:[10,16,1,4],lspawn:16,retract:4,filenotfound:1,failtrap:10,sfarspec_proc:[12,17],clean:[1,4],eintr_retri:16,fdnode:8,meaning:[10,4,19],rm_failur:10,linuxns3dceccnpeek:14,frcp_request:4,typeid:6,ns3wifichannel:[12,21],guids1:10,guids2:10,wait_fil:[8,1],exact_tag:16,queri:[10,16],release_api:4,node_annot:16,maxthread:16,is_rm_inst:10,set_hook_up:1,ns3binaryerrormodel:11,get_node_tag:9,send:[16,4],noop:4,sent:4,vlc:4,ns3_repo:8,tri:16,on_off_appl:[12,21,6],do_disconnect:10,myresourcemanag:10,refer:16,ns3basenod:[11,6],check_state_connect:[8,1],ecodefil:1,ns3itur1411nlosoverrooftoppropagationlossmodel:11,unblacklist_host:9,download:1,aloha_noack_net_devic:[12,21,6],pl_ptn:9,index:[10,5,4],resourcest:10,compute_delay_m:16,cell:4,experiment:10,ns3_get:6,icmpv6l4protocol:[12,21,6],get_discover_tim:10,whatev:16,"enum":10,"0x7f028fc193b0":4,vif_prefix:1,linuxns3fdudptunnel:[7,8],ubuntu:1,becom:4,sinc:[10,1,4],host:[5,1,9,10,16,4],corruptfil:1,wait_guid:10,converg:10,chang:[10,4],control:[10,19,1,4,13],set_reserv:10,app:1,bridge_net_devic:[12,21,6],gatewai:4,api:[5,4,9,16],statfunc:[12,17],hierarchical_mobility_model:[12,21,6],rclass:10,commun:4,logger_compon:16,ns3meshpointdevic:11,doubl:10,next:[10,16],ascii_helper_uuid:6,constant_velocity_mobility_model:[12,21,6],usr:1,check_deploi:4,mask4:1,enroll_top:4,mask6:1,comparison:9,subscriber_station_net_devic:[12,21,6],fedora_8:1,agent:16,ns3singlemodelspectrumchannel:11,upload_binari:1,retriev:[10,16,1,9],install_packages_command:1,tunnel:[12,21],alia:4,txqueuelen:[8,1,19],unenrol:4,annot:3,get_resource_info:16,omfapifactori:4,ns3alohanoacknetdevic:11,get_task:10,ns3errorratemodel:[12,21],tap:[12,21],process:[12,18],lock:[4,9,6],sudo:[16,1,4],trace_filepath:1,tag:[12,17],ns3arpl3protocol:[12,21],serial:[10,12,17],dce_manager_uuid:6,delai:[10,22],ccnpoke:[12,1,21],publicid:16,filepath:[10,16],ns3emunetdevic:11,plcapifactori:9,linuxccnpeek:0,instead:[10,16,1,4],linuxfibentri:0,stop_tim:10,overridden:[10,9],remote_check_pid:16,physic:10,alloc:16,non_communicating_net_devic:[12,21,6],loglevel:[20,6],ns3virtualnetdevic:11,element:[10,4],temp:[16,1],allow:[1,19,10,9,16,4],omf6pars:4,ns3basewifiremotestationmanag:[11,6],get_stop_tim:10,planelab:9,trace_en:10,add_edg:16,remote_endpoint:[8,1,19,9],device_helper_uuid:6,nist_error_rate_model:[12,21,6],ccnpingserv:[12,1,21],local_dir:10,populate_factori:10,therefor:10,python:[10,1],python_unshare_vers:2,ns3ocbwifimac:11,ns3aarfwifimanag:11,run_experi:10,rstatu:16,testbedtogatewai:4,get_connect:10,mode:1,wait_tim:10,chunk:10,udp_client:[12,21,6],special:[8,1,9,2,16,4],out:[16,1],variabl:[1,4],python_passfd_vers:2,install_rpmfusion_command:1,linuxgretunnel:1,develop:[],ns3errorchannel:11,identifi:[10,9],suitabl:[4,9],rel:[10,16],statist:10,ns3stawifimac:11,linuxtap:[1,9],ips2nid:[3,22],ns3udpserv:11,constant_position_mobility_model:[12,21,6],dictionari:[10,3,4],releas:[10,16,19,4,9],wilabt_nod:[12,21],xmlencod:23,has_chang:10,could:10,keep:[10,1],heappush:10,not_start:16,known_host:16,lexec:16,netnsrout:[12,21],python_unshare_repo:2,dump_content_histori:3,mai:9,set:[6,8,9,2,10,19,16,4,20],v4ping:[12,21,6],ccndlog:3,mkdir:[16,1],system:[4,9],wrapper:20,attach:[16,1],termin:[10,1],max_depth:16,get_interfac:9,udp:1,shell:[8,1,2],register_condit:10,netnswrapper_debug:[12,21],failurelevel:10,cpython:10,ns3base:[12,21],structur:1,check_output:1,amrr_wifi_manag:[12,21,6],sens:10,dce_help:8,enroll_funct:4,start_tim:10,kun2600mhz_propagation_loss_model:[12,21,6],session_kei:9,correspond:4,linuxnetnsemul:2,have:[10,16,1,6],close:19,need:[10,16,1,4,19],ns3basewifimac:[11,6],binary_error_sixlow_model:[12,21,6],emu_set:20,mcapi:9,rout:[12,21],error_net_devic:[12,21,6],do_configur:10,which:[10,16,1,4,9],interface_id_or_ip:9,instanci:[16,4,9],singl:[10,16,1],create_api:[4,9],unless:16,get_api:[16,4,9],deploy:[10,9],clase:10,discov:[10,4,9],cipher:[8,1,19],node_tag_id:9,sfi:[16,4,9],"class":[0,6,8,12,1,13,2,10,20,14,21],sfa:[16,4,9],build_sfa_rspec:16,ns3ipv4l3protocol:[12,21],url:[16,9],urn:16,gather:[1,4],request:[16,4],set_readi:10,pipe:[16,1,6],pidfil:[16,1],determin:16,text:[10,1],verbos:16,waypoint_mobility_model:[12,21,6],ccnpeek:[12,1,21],get_session_kei:16,redirect:[16,1],upload_librari:1,locat:16,should:[10,16,20,9,6],add_nod:16,wait_result:8,local:[10,16,1,13,9],create_bridg:19,ns3randomwaypointmobilitymodel:11,base_station_net_devic:[12,21,6],wait_remote_socket:[8,2],autom:1,ns3meshwifiinterfacemac:11,enabl:[10,20,6],ns3basepipechannel:6,lala:1,whether:[10,16,1],contain:[10,16,1,9],script_path:[20,6],view:9,node_id_or_hostnam:9,fdudptunnel:[12,1,21],planetlabtuntapfdlink:7,usr_dir:1,make_uuid:[20,6],statu:[10,16,1,19],extend:10,correctli:[4,9],ns3bridgenetdevic:11,pattern:9,inorm:22,written:4,ns3queue:[12,21],ns3v4ping:11,kei:16,update_slic:9,entir:16,disconnect:4,experimentcontrol:[5,1,19,10,13,4],add_resource_to_slic:16,rtype:[10,16,4],ccn_consum:3,messages_5_4:[12,21],plugin_config:4,tracerout:[12,21,22],etc:[10,16,1,4],instanc:[10,16,4,9],sigterm:16,rexitcod:1,complementari:[],arriv:10,respect:1,admin:9,rgetpid:16,quit:[10,16],resourcegatewai:4,compon:10,immedi:1,radvd:[12,21,6],icmpv4l4protocol:[12,21,6],presenc:4,assert:4,"0x7f028fc19a70":9,nping:[12,21],simple_channel:[12,21,6],togeth:16,present:5,replic:10,multi:1,plain:[1,9],remove_all_from_slic:16,defin:[10,4,9],sformat:16,eintr:16,get_attribut:10,ns3matrixpropagationlossmodel:11,ns3hybridbuildingspropagationlossmodel:11,site:16,request_funct:4,linuxccncont:0,clean_process:1,handl:[10,4],slicenam:[16,9],ns3dsrdsrrout:11,ns3waypointmobilitymodel:11,http:[16,1,9],hostnam:[16,4,9],rkill:16,upon:[10,9],discover_tim:10,phy:6,ns3pointtopointremotechannel:11,execute_funct:4,wthat:19,netns_repo:2,linuxudptest:1,well:[],ofr:4,command:[6,8,1,9,2,20,16,4],resourcefactori:10,usual:[10,16],less:10,vrout:[12,21],obtain:10,dump_creat:[20,6],add_node_callback:10,packet_sink:[12,21,6],annotate_cn_graph:[3,22],web:[16,9],ns3redqueu:11,point:16,init_mailbox:4,add:[9,10,16,3,4,22],is_al:1,stabsformat:16,logger:[6,12,10,20,17,4],match:[10,16,9],xmlrpc:9,dest:16,handle_omf_messag:4,ccncontent:[12,1,21],testb:[10,5,4],know:1,password:[16,4,9],recurs:16,like:[16,9],ns3nakagamipropagationlossmodel:11,necessari:[10,16,1],failuremanag:10,page:5,pygccxml_vers:8,lcopi:16,captur:16,nid2:16,rvqueue:16,"export":1,ns3rangepropagationlossmodel:11,flush:[8,6,20,2],home:[16,1],ilabt:4,librari:[16,1,4],rate_error_model:[12,21,6],node_id_or_nam:9,wilab2:4,leas:16,ipv4:6,sequenc:9,linuxtuntapfdlink:[7,8],ns3propagationdelaymodel:[12,21],dce:5,usag:1,omfclient:4,offset:[0,6,8,1,10,20,4],yyyymmddhhmmssffff:16,about:[10,9],actual:[8,1,2],socket:[8,2],wilabt:[16,4],run_and_wait:1,constant_acceleration_mobility_model:[12,21,6],automat:[10,1],guard:4,check_start:4,ns3yanswifichannel:11,imind:4,aarf_wifi_manag:[12,21,6],sfi_auth:16,ns3basepropagationdelaymodel:[11,6],"function":[10,16,1,4,9],ns3yanserrorratemodel:11,subscrib:4,lalal:1,ns3client:[12,1,21],uninstal:1,inlin:1,count:3,made:[10,1],in_foreground:1,reschedule_delai:10,resourcemanag:[5,6,1,13,10,20,4],asynchron:16,topo_typ:16,limit:16,template_trac:6,process_content_history_log:3,otherwis:10,problem:4,ns3lteuenetdevic:11,plugin_whitelist:4,evalu:10,ns3logdistancepropagationlossmodel:11,"int":[19,1,13,10,9,16,4],mask:16,dure:[10,1,19],tdiff:16,bridge_channel:[12,21,6],inf:4,ing:16,detail:[10,9],virtual:10,new_valu:4,node_hom:1,other:[10,5,1],bool:[10,16],branch:16,varieti:10,is_start:6,repeat:10,star:16,heapschedul:10,shfile:1,replace_kwarg:[20,6],ns3baseerrormodel:[11,6],linuxmtr:1,omf_5:4,debian:1,annotate_edge_net:16,reliabl:1,match_tag:16,controlpersist:16},objtypes:{"0":"py:module","1":"py:method","2":"py:function","3":"py:class","4":"py:attribute","5":"py:classmethod"},objnames:{"0":["py","module","Python module"],"1":["py","method","Python method"],"2":["py","function","Python function"],"3":["py","class","Python class"],"4":["py","attribute","Python attribute"],"5":["py","classmethod","Python class method"]},filenames:["_layout/nepi.resources.linux.ccn","_layout/nepi.resources.linux","_layout/nepi.resources.linux.netns","_layout/nepi.data.processing.ccn","_layout/nepi.resources.omf","index","_layout/nepi.resources.ns3","_layout/nepi.resources.planetlab.ns3","_layout/nepi.resources.linux.ns3","_layout/nepi.resources.planetlab","_layout/nepi.execution","_layout/nepi.resources.ns3.classes","_layout/nepi","_layout/nepi.resources.all","_layout/nepi.resources.linux.ns3.ccn","_layout/nepi.data.processing","_layout/nepi.util","_layout/modules","_layout/nepi.data","_layout/nepi.resources.planetlab.openvswitch","_layout/nepi.resources.netns","_layout/nepi.resources","_layout/nepi.data.processing.ping","_layout/nepi.util.parsers"],titles:["nepi.resources.linux.ccn package","nepi.resources.linux package","nepi.resources.linux.netns package","nepi.data.processing.ccn package","nepi.resources.omf package","NEPI modules","nepi.resources.ns3 package","nepi.resources.planetlab.ns3 package","nepi.resources.linux.ns3 package","nepi.resources.planetlab package","nepi.execution package","nepi.resources.ns3.classes package","nepi package","nepi.resources.all package","nepi.resources.linux.ns3.ccn package","nepi.data.processing package","nepi.util package","nepi","nepi.data package","nepi.resources.planetlab.openvswitch package","nepi.resources.netns package","nepi.resources package","nepi.data.processing.ping package","nepi.util.parsers package"],objects:{"":{nepi:[12,0,0,"-"]},"nepi.resources.ns3.classes.hierarchical_mobility_model":{NS3HierarchicalMobilityModel:[11,3,1,""]},"nepi.resources.linux.rpmfuncs":{install_rpmfusion_command:[1,2,1,""],remove_packages_command:[1,2,1,""],install_packages_command:[1,2,1,""]},"nepi.resources.netns.netnsswitch":{NetNSSwitch:[20,3,1,""]},"nepi.resources.linux.route":{LinuxRoute:[1,3,1,""]},"nepi.resources.ns3.classes.matrix_propagation_loss_model":{NS3MatrixPropagationLossModel:[11,3,1,""]},"nepi.util.parsers.xml_parser":{xmlencode:[23,2,1,""],to_type:[23,2,1,""],ECXMLParser:[23,3,1,""],from_type:[23,2,1,""],xmldecode:[23,2,1,""]},"nepi.resources.netns.netnswrapper.NetNSWrapper":{debuger:[20,4,1,""],invoke:[20,1,1,""],get:[20,1,1,""],get_object:[20,1,1,""],create:[20,1,1,""],replace_kwargs:[20,1,1,""],set:[20,1,1,""],make_uuid:[20,1,1,""],shutdown:[20,1,1,""],replace_args:[20,1,1,""],logger:[20,4,1,""]},"nepi.resources.netns.netnsserver.NetNSWrapperMessage":{SET:[20,4,1,""],INVOKE:[20,4,1,""],GET:[20,4,1,""],CREATE:[20,4,1,""],SHUTDOWN:[20,4,1,""],FLUSH:[20,4,1,""]},"nepi.resources.planetlab.plcapi.PLCAPI":{reserved:[9,1,1,""],get_slice_id:[9,1,1,""],delete_slice_node:[9,1,1,""],start_multicall:[9,1,1,""],get_node_tags:[9,1,1,""],api:[9,4,1,""],unblacklist_host:[9,1,1,""],get_slices:[9,1,1,""],get_slice_tags:[9,1,1,""],get_node_flavour:[9,1,1,""],mcapi:[9,4,1,""],peer_map:[9,4,1,""],test:[9,1,1,""],finish_multicall:[9,1,1,""],get_interfaces:[9,1,1,""],get_slice_nodes:[9,1,1,""],blacklist_host:[9,1,1,""],blacklisted:[9,1,1,""],unreserve_host:[9,1,1,""],get_node_info:[9,1,1,""],network_types:[9,4,1,""],get_slice_vnet_sys_tag:[9,1,1,""],release:[9,1,1,""],reserve_host:[9,1,1,""],get_nodes:[9,1,1,""],update_slice:[9,1,1,""],add_slice_nodes:[9,1,1,""]},"nepi.resources.ns3.ns3node.NS3BaseNode":{arp:[6,4,1,""],mobility:[6,4,1,""],devices:[6,4,1,""],simulation:[6,4,1,""],node_id:[6,4,1,""],ipv4:[6,4,1,""],dceapplications:[6,4,1,""]},"nepi.util":{sfaapi:[16,0,0,"-"],netgraph:[16,0,0,"-"],rmatcher:[16,0,0,"-"],plotter:[16,0,0,"-"],manifoldapi:[16,0,0,"-"],sfarspec_proc:[16,0,0,"-"],statfuncs:[16,0,0,"-"],parsers:[23,0,0,"-"],environ:[16,0,0,"-"],execfuncs:[16,0,0,"-"],timefuncs:[16,0,0,"-"],logger:[16,0,0,"-"],guid:[16,0,0,"-"],parallel:[16,0,0,"-"],serializer:[16,0,0,"-"],sshfuncs:[16,0,0,"-"]},"nepi.resources.linux.ccn.ccncontent":{LinuxCCNContent:[0,3,1,""]},"nepi.resources.ns3.classes.bridge_net_device":{NS3BridgeNetDevice:[11,3,1,""]},"nepi.resources.linux.node.ExitCode":{CORRUPTFILE:[1,4,1,""],FILENOTFOUND:[1,4,1,""],OK:[1,4,1,""],ERROR:[1,4,1,""]},"nepi.resources.ns3.classes.arf_wifi_manager":{NS3ArfWifiManager:[11,3,1,""]},"nepi.resources.linux.mtr.LinuxMtr":{upload_start_command:[1,1,1,""],do_deploy:[1,1,1,""],valid_connection:[1,1,1,""],do_start:[1,1,1,""]},"nepi.resources.ns3.classes.packet_sink":{NS3PacketSink:[11,3,1,""]},"nepi.execution.trace.TraceAttr":{PATH:[10,4,1,""],ALL:[10,4,1,""],STREAM:[10,4,1,""],SIZE:[10,4,1,""]},"nepi.resources.netns.netnsnodeinterface.NetNSNodeInterface":{node:[20,4,1,""],"switch":[20,4,1,""],emulation:[20,4,1,""]},"nepi.resources.linux.application.LinuxApplication":{upload_files:[1,1,1,""],upload_code:[1,1,1,""],do_release:[1,1,1,""],pid:[1,4,1,""],trace_filepath:[1,1,1,""],do_start:[1,1,1,""],upload_libraries:[1,1,1,""],valid_connection:[1,1,1,""],upload_binaries:[1,1,1,""],replace_paths:[1,1,1,""],state:[1,4,1,""],run_home:[1,4,1,""],build:[1,1,1,""],do_stop:[1,1,1,""],upload_sources:[1,1,1,""],ppid:[1,4,1,""],node:[1,4,1,""],app_home:[1,4,1,""],trace:[1,1,1,""],execute_command:[1,1,1,""],do_provision:[1,1,1,""],install_dependencies:[1,1,1,""],do_deploy:[1,1,1,""],log_message:[1,1,1,""],in_foreground:[1,4,1,""],execute_deploy_command:[1,1,1,""],upload_stdin:[1,1,1,""],install:[1,1,1,""],upload_start_command:[1,1,1,""]},"nepi.resources.ns3.ns3dceapplication.NS3BaseDceApplication":{do_stop:[6,1,1,""],pid:[6,4,1,""],do_start:[6,1,1,""],trace:[6,1,1,""]},"nepi.resources.linux.ccn.ccnpoke":{LinuxCCNPoke:[0,3,1,""]},"nepi.resources.netns.netnsnode":{NetNSNode:[20,3,1,""]},"nepi.resources.ns3.classes.multi_model_spectrum_channel":{NS3MultiModelSpectrumChannel:[11,3,1,""]},"nepi.resources.linux.ccn.fibentry.LinuxFIBEntry":{node:[0,4,1,""],traceroute:[0,4,1,""],valid_connection:[0,1,1,""],trace:[0,1,1,""],ping:[0,4,1,""],ccnd:[0,4,1,""],do_deploy:[0,1,1,""],do_start:[0,1,1,""],upload_start_command:[0,1,1,""],do_stop:[0,1,1,""],configure:[0,1,1,""]},"nepi.data.processing.ping.parser":{annotate_cn_graph:[22,2,1,""],parse_file:[22,2,1,""],annotate_cn_node:[22,2,1,""]},"nepi.resources.ns3.ns3route.NS3Route":{node:[6,4,1,""]},"nepi.util.logger":{Logger:[16,3,1,""]},"nepi.resources.ns3.classes.radvd":{NS3Radvd:[11,3,1,""]},"nepi.resources.linux.tcpdump.LinuxTcpdump":{do_deploy:[1,1,1,""],valid_connection:[1,1,1,""]},"nepi.resources.netns.netnsroute.NetNSIPv4Route":{node:[20,4,1,""],emulation:[20,4,1,""]},"nepi.resources.ns3.classes.cost231propagation_loss_model":{NS3Cost231PropagationLossModel:[11,3,1,""]},"nepi.util.sshfuncs":{rspawn:[16,2,1,""],STDOUT:[16,3,1,""],log:[16,2,1,""],openssh_has_persist:[16,2,1,""],resolve_hostname:[16,2,1,""],rkill:[16,2,1,""],make_server_key_args:[16,2,1,""],gethostbyname:[16,2,1,""],shell_escape:[16,2,1,""],ProcStatus:[16,3,1,""],rexec:[16,2,1,""],eintr_retry:[16,2,1,""],make_control_path:[16,2,1,""],rcopy:[16,2,1,""],rgetpid:[16,2,1,""],rstatus:[16,2,1,""]},"nepi.resources.ns3.classes.subscriber_station_net_device":{NS3SubscriberStationNetDevice:[11,3,1,""]},"nepi.resources.linux.channel":{LinuxChannel:[1,3,1,""]},"nepi.resources.planetlab.ns3.fdudptunnel.PlanetlabNs3FdUdpTunnel":{get_endpoints:[7,1,1,""]},"nepi.resources.linux.traceroute.LinuxTraceroute":{upload_start_command:[1,1,1,""],do_deploy:[1,1,1,""],valid_connection:[1,1,1,""],do_start:[1,1,1,""]},"nepi.resources.linux.ccn.ccnpeek.LinuxCCNPeek":{do_deploy:[0,1,1,""],valid_connection:[0,1,1,""]},"nepi.resources.linux.debfuncs":{remove_packages_command:[1,2,1,""],install_packages_command:[1,2,1,""]},"nepi.resources.ns3.classes.yans_wifi_phy":{NS3YansWifiPhy:[11,3,1,""]},"nepi.resources.linux.route.LinuxRoute":{node:[1,4,1,""],device:[1,4,1,""],do_deploy:[1,1,1,""],do_start:[1,1,1,""],upload_start_command:[1,1,1,""],do_stop:[1,1,1,""],upload_sources:[1,1,1,""]},"nepi.resources.netns.netnsserver":{get_options:[20,2,1,""],NetNSWrapperMessage:[20,3,1,""],run_server:[20,2,1,""],recv_msg:[20,2,1,""],create_socket:[20,2,1,""],handle_message:[20,2,1,""],send_reply:[20,2,1,""]},"nepi.resources.linux.ns3.ccn.ns3ccndceapplication":{LinuxNS3CCNDceApplication:[14,3,1,""]},"nepi.resources.ns3.ns3errorratemodel.NS3BaseErrorRateModel":{node:[6,4,1,""],phy:[6,4,1,""]},"nepi.resources.omf.omf6_api.OMF6API":{frcp_inform:[4,1,1,""],unenroll_topic:[4,1,1,""],disconnect:[4,1,1,""],create_and_enroll_topic:[4,1,1,""],frcp_configure:[4,1,1,""],check_ready:[4,1,1,""],frcp_create:[4,1,1,""],frcp_release:[4,1,1,""],check_mailbox:[4,1,1,""],frcp_request:[4,1,1,""],enroll_topic:[4,1,1,""]},"nepi.resources.planetlab":{node:[9,0,0,"-"],ns3:[7,0,0,"-"],tap:[9,0,0,"-"],vroute:[9,0,0,"-"],sfa_node:[9,0,0,"-"],openvswitch:[19,0,0,"-"],tun:[9,0,0,"-"],plcapi:[9,0,0,"-"]},"nepi.resources.omf.channel.OMFChannel":{valid_connection:[4,1,1,""],get_frequency:[4,1,1,""],do_release:[4,1,1,""],do_deploy:[4,1,1,""],ChannelToFreq:[4,4,1,""],exp_id:[4,4,1,""]},"nepi.resources.netns.netnsapplication":{NetNSApplication:[20,3,1,""]},"nepi.resources.netns.netnsipv4address":{NetNSIPv4Address:[20,3,1,""]},"nepi.execution.resource.ResourceAction":{START:[10,4,1,""],STOP:[10,4,1,""],DEPLOY:[10,4,1,""]},"nepi.resources.planetlab.ns3.fdudptunnel":{PlanetlabNs3FdUdpTunnel:[7,3,1,""]},"nepi.util.serializer":{ECSerializer:[16,3,1,""],SFormats:[16,3,1,""]},"nepi.resources.netns.netnsclient.NetNSClient":{set:[20,1,1,""],invoke:[20,1,1,""],get:[20,1,1,""],create:[20,1,1,""],shutdown:[20,1,1,""],flush:[20,1,1,""]},"nepi.util.sshfuncs.ProcStatus":{NOT_STARTED:[16,4,1,""],RUNNING:[16,4,1,""],FINISHED:[16,4,1,""]},"nepi.resources.linux.ns3.ccn.ns3ccnrdceapplication":{LinuxNS3DceCCNR:[14,3,1,""]},"nepi.resources.ns3.classes.aarf_wifi_manager":{NS3AarfWifiManager:[11,3,1,""]},"nepi.resources.ns3.ns3ccndceapplication.NS3BaseCCNDceApplication":{ccn_client_lock:[6,4,1,""],ccn_client_helper_uuid:[6,4,1,""]},"nepi.resources.ns3.classes.csma_channel":{NS3CsmaChannel:[11,3,1,""]},"nepi.resources.ns3.classes.uan_channel":{NS3UanChannel:[11,3,1,""]},"nepi.resources.linux.ccn.ccnpeek":{LinuxCCNPeek:[0,3,1,""]},"nepi.execution.runner.ExperimentRunner":{evaluate_normal_convergence:[10,1,1,""],run:[10,1,1,""],run_experiment:[10,1,1,""]},"nepi.resources.ns3.ns3icmpv4l4protocol":{NS3BaseIcmpv4L4Protocol:[6,3,1,""]},"nepi.resources.ns3.ns3channel":{NS3BaseChannel:[6,3,1,""]},"nepi.resources.ns3.ns3base":{NS3Base:[6,3,1,""]},"nepi.resources.omf.interface":{OMFWifiInterface:[4,3,1,""]},"nepi.resources.ns3.classes.okumura_hata_propagation_loss_model":{NS3OkumuraHataPropagationLossModel:[11,3,1,""]},"nepi.resources.netns.netnswrapper_debug.NetNSWrapperDebuger":{format_kwargs:[20,1,1,""],dump_factory:[20,1,1,""],dump_create:[20,1,1,""],dump_shutdown:[20,1,1,""],dump_to_script:[20,1,1,""],enabled:[20,4,1,""],dump_invoke:[20,1,1,""],format_value:[20,1,1,""],dump_header:[20,1,1,""],format_args:[20,1,1,""],script_path:[20,4,1,""],dump_set:[20,1,1,""],dump_get:[20,1,1,""]},"nepi.util.plotter.PFormats":{FIGURE:[16,4,1,""],DOT:[16,4,1,""]},"nepi.resources.ns3.classes.virtual_net_device":{NS3VirtualNetDevice:[11,3,1,""]},"nepi.resources.ns3.classes.ap_wifi_mac":{NS3ApWifiMac:[11,3,1,""]},"nepi.resources.omf.omf_client":{OMFClient:[4,3,1,""],BaseOMFClient:[4,3,1,""]},"nepi.util.statfuncs":{compute_mean:[16,2,1,""]},"nepi.util.manifoldapi.MANIFOLDAPIFactory":{make_key:[16,5,1,""],get_api:[16,5,1,""]},"nepi.execution.runner":{ExperimentRunner:[10,3,1,""]},"nepi.resources.linux.udptunnel.LinuxUdpTunnel":{initiate_connection:[1,1,1,""],verify_connection:[1,1,1,""],establish_connection:[1,1,1,""],log_message:[1,1,1,""],terminate_connection:[1,1,1,""],get_endpoints:[1,1,1,""],check_state_connection:[1,1,1,""]},"nepi.resources.ns3.classes.lte_enb_net_device":{NS3LteEnbNetDevice:[11,3,1,""]},"nepi.resources.omf.channel":{OMFChannel:[4,3,1,""]},"nepi.resources.linux.netns.netnsemulation.LinuxNetNSEmulation":{clone_command:[2,1,1,""],netns_src:[2,4,1,""],socket_name:[2,4,1,""],python_unshare_repo:[2,4,1,""],do_start:[2,1,1,""],valid_connection:[2,1,1,""],replace_paths:[2,1,1,""],python_unshare_version:[2,4,1,""],do_stop:[2,1,1,""],upload_sources:[2,1,1,""],do_release:[2,1,1,""],python_unshare_src:[2,4,1,""],wait_remote_socket:[2,1,1,""],python_passfd_version:[2,4,1,""],do_deploy:[2,1,1,""],netns_version:[2,4,1,""],remote_socket:[2,4,1,""],netns_repo:[2,4,1,""],upload_extra_sources:[2,1,1,""],python_passfd_src:[2,4,1,""],upload_start_command:[2,1,1,""],python_passfd_repo:[2,4,1,""]},"nepi.execution.resource.ResourceFactory":{create:[10,5,1,""],register_type:[10,5,1,""],resource_types:[10,5,1,""],get_resource_type:[10,5,1,""]},"nepi.util.timefuncs":{stabsformat:[16,2,1,""],compute_delay_ms:[16,2,1,""],tdiff:[16,2,1,""],tnow:[16,2,1,""],tsformat:[16,2,1,""],stformat:[16,2,1,""],tdiffsec:[16,2,1,""]},"nepi.execution.attribute.Types":{Integer:[10,4,1,""],Double:[10,4,1,""],Bool:[10,4,1,""],String:[10,4,1,""],Enumerate:[10,4,1,""]},"nepi.resources.omf.messages_5_4.MessageHandler":{enroll_function:[4,1,1,""],configure_function:[4,1,1,""],exit_function:[4,1,1,""],alias_function:[4,1,1,""],execute_function:[4,1,1,""],stdin_function:[4,1,1,""],log_function:[4,1,1,""],noop_function:[4,1,1,""],newexp_function:[4,1,1,""]},"nepi.resources.omf.messages_6":{MessageHandler:[4,3,1,""]},"nepi.resources.ns3.ns3queue.NS3BaseQueue":{device:[6,4,1,""],node:[6,4,1,""]},"nepi.resources.linux.gretunnel":{LinuxGRETunnel:[1,3,1,""]},"nepi.resources.ns3.classes.ocb_wifi_mac":{NS3OcbWifiMac:[11,3,1,""]},"nepi.execution.ec.FailureManager":{ec:[10,4,1,""],abort:[10,4,1,""],eval_failure:[10,1,1,""],set_ec_failure:[10,1,1,""],set_ec:[10,1,1,""]},"nepi.resources.omf.omf_api_factory.OMFAPIFactory":{lock:[4,4,1,""],create_api:[4,5,1,""],release_api:[4,5,1,""],get_api:[4,5,1,""]},"nepi.resources.ns3.ns3wifiremotestationmanager.NS3BaseWifiRemoteStationManager":{device:[6,4,1,""],node:[6,4,1,""]},"nepi.resources.ns3.ns3wifiphy":{NS3BaseWifiPhy:[6,3,1,""]},"nepi.resources.ns3.ns3arpl3protocol.NS3BaseArpL3Protocol":{node:[6,4,1,""]},"nepi.resources.planetlab.openvswitch.ovsport":{PlanetlabOVSPort:[19,3,1,""]},"nepi.data.processing.ccn":{parser:[3,0,0,"-"]},"nepi.resources.ns3.classes.log_distance_propagation_loss_model":{NS3LogDistancePropagationLossModel:[11,3,1,""]},"nepi.resources.ns3.ns3fdnetdevice.NS3BaseFdNetDevice":{recv_fd:[6,1,1,""]},"nepi.resources.ns3.classes.udp_trace_client":{NS3UdpTraceClient:[11,3,1,""]},"nepi.resources.ns3.ns3wifiremotestationmanager":{NS3BaseWifiRemoteStationManager:[6,3,1,""]},"nepi.resources.ns3.classes.random_direction2d_mobility_model":{NS3RandomDirection2dMobilityModel:[11,3,1,""]},"nepi.resources.ns3.ns3wifichannel.NS3BaseWifiChannel":{phys:[6,4,1,""],simulation:[6,4,1,""]},"nepi.resources.ns3.classes.constant_velocity_mobility_model":{NS3ConstantVelocityMobilityModel:[11,3,1,""]},"nepi.resources.ns3.classes.three_log_distance_propagation_loss_model":{NS3ThreeLogDistancePropagationLossModel:[11,3,1,""]},"nepi.resources.ns3.classes":{constant_rate_wifi_manager:[11,0,0,"-"],sta_wifi_mac:[11,0,0,"-"],waypoint_mobility_model:[11,0,0,"-"],ocb_wifi_mac:[11,0,0,"-"],dsrdsr_routing:[11,0,0,"-"],hybrid_buildings_propagation_loss_model:[11,0,0,"-"],packet_sink:[11,0,0,"-"],loopback_net_device:[11,0,0,"-"],itu_r1411los_propagation_loss_model:[11,0,0,"-"],nist_error_rate_model:[11,0,0,"-"],yans_wifi_channel:[11,0,0,"-"],point_to_point_channel:[11,0,0,"-"],random_direction2d_mobility_model:[11,0,0,"-"],lr_wpan_net_device:[11,0,0,"-"],udp_trace_client:[11,0,0,"-"],list_error_model:[11,0,0,"-"],bridge_net_device:[11,0,0,"-"],jakes_propagation_loss_model:[11,0,0,"-"],rraa_wifi_manager:[11,0,0,"-"],receive_list_error_model:[11,0,0,"-"],virtual_net_device:[11,0,0,"-"],minstrel_wifi_manager:[11,0,0,"-"],multi_model_spectrum_channel:[11,0,0,"-"],itu_r1411nlos_over_rooftop_propagation_loss_model:[11,0,0,"-"],lte_enb_net_device:[11,0,0,"-"],point_to_point_remote_channel:[11,0,0,"-"],binary_error_sixlow_model:[11,0,0,"-"],error_channel:[11,0,0,"-"],aloha_noack_net_device:[11,0,0,"-"],udp_l4protocol:[11,0,0,"-"],amrr_wifi_manager:[11,0,0,"-"],ideal_wifi_manager:[11,0,0,"-"],rate_error_model:[11,0,0,"-"],kun2600mhz_propagation_loss_model:[11,0,0,"-"],icmpv6l4protocol:[11,0,0,"-"],csma_net_device:[11,0,0,"-"],udp_echo_client:[11,0,0,"-"],constant_speed_propagation_delay_model:[11,0,0,"-"],drop_tail_queue:[11,0,0,"-"],random_propagation_delay_model:[11,0,0,"-"],ping6:[11,0,0,"-"],constant_position_mobility_model:[11,0,0,"-"],onoe_wifi_manager:[11,0,0,"-"],okumura_hata_propagation_loss_model:[11,0,0,"-"],bulk_send_application:[11,0,0,"-"],lte_simple_net_device:[11,0,0,"-"],yans_error_rate_model:[11,0,0,"-"],non_communicating_net_device:[11,0,0,"-"],red_queue:[11,0,0,"-"],mesh_wifi_interface_mac:[11,0,0,"-"],error_net_device:[11,0,0,"-"],aarfcd_wifi_manager:[11,0,0,"-"],v4ping:[11,0,0,"-"],binary_error_model:[11,0,0,"-"],emu_net_device:[11,0,0,"-"],hierarchical_mobility_model:[11,0,0,"-"],fd_net_device:[11,0,0,"-"],constant_acceleration_mobility_model:[11,0,0,"-"],gauss_markov_mobility_model:[11,0,0,"-"],ipv4l3protocol:[11,0,0,"-"],constant_velocity_mobility_model:[11,0,0,"-"],ap_wifi_mac:[11,0,0,"-"],simple_net_device:[11,0,0,"-"],csma_channel:[11,0,0,"-"],icmpv4l4protocol:[11,0,0,"-"],wifi_net_device:[11,0,0,"-"],oh_buildings_propagation_loss_model:[11,0,0,"-"],range_propagation_loss_model:[11,0,0,"-"],lte_ue_net_device:[11,0,0,"-"],yans_wifi_phy:[11,0,0,"-"],single_model_spectrum_channel:[11,0,0,"-"],mesh_point_device:[11,0,0,"-"],simple_channel:[11,0,0,"-"],arf_wifi_manager:[11,0,0,"-"],three_log_distance_propagation_loss_model:[11,0,0,"-"],friis_propagation_loss_model:[11,0,0,"-"],aarf_wifi_manager:[11,0,0,"-"],tap_bridge:[11,0,0,"-"],random_propagation_loss_model:[11,0,0,"-"],random_walk2d_mobility_model:[11,0,0,"-"],radvd:[11,0,0,"-"],six_low_pan_net_device:[11,0,0,"-"],on_off_application:[11,0,0,"-"],arp_l3protocol:[11,0,0,"-"],fixed_rss_loss_model:[11,0,0,"-"],adhoc_wifi_mac:[11,0,0,"-"],base_station_net_device:[11,0,0,"-"],log_distance_propagation_loss_model:[11,0,0,"-"],udp_echo_server:[11,0,0,"-"],udp_client:[11,0,0,"-"],steady_state_random_waypoint_mobility_model:[11,0,0,"-"],point_to_point_net_device:[11,0,0,"-"],tcp_l4protocol:[11,0,0,"-"],random_waypoint_mobility_model:[11,0,0,"-"],nakagami_propagation_loss_model:[11,0,0,"-"],burst_error_model:[11,0,0,"-"],subscriber_station_net_device:[11,0,0,"-"],error_channel_sixlow:[11,0,0,"-"],node:[11,0,0,"-"],cost231propagation_loss_model:[11,0,0,"-"],two_ray_ground_propagation_loss_model:[11,0,0,"-"],cara_wifi_manager:[11,0,0,"-"],matrix_propagation_loss_model:[11,0,0,"-"],udp_server:[11,0,0,"-"],bridge_channel:[11,0,0,"-"],uan_channel:[11,0,0,"-"]},"nepi.resources.planetlab.openvswitch.ovs":{PlanetlabOVSSwitch:[19,3,1,""]},"nepi.resources.netns.netnsapplication.NetNSApplication":{node:[20,4,1,""],state:[20,4,1,""],emulation:[20,4,1,""],do_start:[20,1,1,""]},"nepi.resources.ns3.ns3dceapplication":{NS3BaseDceApplication:[6,3,1,""]},"nepi.resources.linux.ccn.ccnping.LinuxCCNPing":{ccnpingserver:[0,4,1,""],valid_connection:[0,1,1,""],do_start:[0,1,1,""]},"nepi.resources.linux.netns":{netnsclient:[2,0,0,"-"],netnsemulation:[2,0,0,"-"]},"nepi.resources.ns3.classes.on_off_application":{NS3OnOffApplication:[11,3,1,""]},"nepi.resources.omf.omf5_api.OMF5API":{execute:[4,1,1,""],disconnect:[4,1,1,""],configure:[4,1,1,""],enroll_host:[4,1,1,""],exit:[4,1,1,""],send_stdin:[4,1,1,""],release:[4,1,1,""],"delete":[4,1,1,""]},"nepi.resources.ns3.classes.bridge_channel":{NS3BridgeChannel:[11,3,1,""]},"nepi.util.parallel.ParallelRun":{initialize_workers:[16,1,1,""],join:[16,1,1,""],sync:[16,1,1,""],start:[16,1,1,""],put_nowait:[16,1,1,""],put:[16,1,1,""],destroy:[16,1,1,""],empty:[16,1,1,""]},"nepi.resources.ns3.ns3icmpv4l4protocol.NS3BaseIcmpv4L4Protocol":{node:[6,4,1,""]},"nepi.resources.linux.ns3.ns3client":{LinuxNS3Client:[8,3,1,""]},"nepi.resources.ns3.classes.error_channel":{NS3ErrorChannel:[11,3,1,""]},"nepi.resources.ns3.ns3dcehelper":{NS3DceHelper:[6,3,1,""]},"nepi.resources.linux.ns3.ns3simulation":{LinuxNS3Simulation:[8,3,1,""]},"nepi.util.sfaapi":{SFAAPI:[16,3,1,""],SFAAPIFactory:[16,3,1,""]},"nepi.resources.ns3.classes.udp_server":{NS3UdpServer:[11,3,1,""]},"nepi.util.sfaapi.SFAAPIFactory":{make_key:[16,5,1,""],get_api:[16,5,1,""]},"nepi.resources.omf.omf6_parser":{OMF6Parser:[4,3,1,""]},"nepi.resources.netns.netnswrapper":{NetNSWrapper:[20,3,1,""]},"nepi.resources.ns3.classes.wifi_net_device":{NS3WifiNetDevice:[11,3,1,""]},"nepi.resources.all":{collector:[13,0,0,"-"]},"nepi.resources.ns3.classes.ideal_wifi_manager":{NS3IdealWifiManager:[11,3,1,""]},"nepi.resources.linux.netns.netnsemulation":{LinuxNetNSEmulation:[2,3,1,""]},"nepi.resources.ns3.classes.waypoint_mobility_model":{NS3WaypointMobilityModel:[11,3,1,""]},"nepi.util.sfarspec_proc":{SfaRSpecProcessing:[16,3,1,""]},"nepi.resources.omf.omf5_api":{OMF5API:[4,3,1,""]},"nepi.execution.trace":{TraceAttr:[10,3,1,""],Trace:[10,3,1,""]},"nepi.resources.ns3.classes.fixed_rss_loss_model":{NS3FixedRssLossModel:[11,3,1,""]},"nepi.resources.ns3.ns3wrapper":{NS3Wrapper:[6,3,1,""],load_ns3_module:[6,2,1,""],load_ns3_libraries:[6,2,1,""]},"nepi.resources.linux.ns3.fdudptunnel.LinuxNs3FdUdpTunnel":{establish_connection:[8,1,1,""],wait_file:[8,1,1,""],establish:[8,1,1,""],endpoint_node:[8,1,1,""],wait_local_port:[8,1,1,""],verify:[8,1,1,""],run_home:[8,1,1,""],endpoint1:[8,4,1,""],endpoint2:[8,4,1,""],pi:[8,4,1,""],check_state_connection:[8,1,1,""],app_home:[8,1,1,""],upload_sources:[8,1,1,""],verify_connection:[8,1,1,""],log_message:[8,1,1,""],wait_result:[8,1,1,""],initiate_connection:[8,1,1,""],initiate:[8,1,1,""],endpoint_mkdir:[8,1,1,""],node1:[8,4,1,""],node2:[8,4,1,""],terminate_connection:[8,1,1,""],get_endpoints:[8,1,1,""]},"nepi.resources.ns3.ns3client":{NS3Client:[6,3,1,""]},"nepi.resources.ns3.classes.gauss_markov_mobility_model":{NS3GaussMarkovMobilityModel:[11,3,1,""]},"nepi.resources.linux.ccn.ccnpingserver.LinuxCCNPingServer":{do_deploy:[0,1,1,""],valid_connection:[0,1,1,""]},"nepi.resources.ns3.classes.minstrel_wifi_manager":{NS3MinstrelWifiManager:[11,3,1,""]},"nepi.util.execfuncs":{lcopy:[16,2,1,""],lkill:[16,2,1,""],lstatus:[16,2,1,""],lspawn:[16,2,1,""],lgetpid:[16,2,1,""],lexec:[16,2,1,""]},"nepi.resources.ns3.ns3application.NS3BaseApplication":{node:[6,4,1,""],do_stop:[6,1,1,""],state:[6,4,1,""],do_start:[6,1,1,""]},"nepi.execution.resource.ResourceManager":{do_fail:[10,1,1,""],do_configure:[10,1,1,""],set:[10,1,1,""],register_connection:[10,1,1,""],trace_enabled:[10,1,1,""],get_global:[10,5,1,""],do_connect:[10,1,1,""],do_release:[10,1,1,""],discover:[10,1,1,""],ec:[10,4,1,""],deploy_with_conditions:[10,1,1,""],do_discover:[10,1,1,""],set_global:[10,5,1,""],set_state:[10,1,1,""],set_stopped:[10,1,1,""],do_start:[10,1,1,""],is_rm_instance:[10,1,1,""],guid:[10,4,1,""],set_failed:[10,1,1,""],has_flag:[10,1,1,""],do_reserve:[10,1,1,""],stop_with_conditions:[10,1,1,""],has_changed:[10,1,1,""],valid_connection:[10,1,1,""],failed_time:[10,4,1,""],get:[10,1,1,""],unregister_connection:[10,1,1,""],discover_time:[10,4,1,""],set_state_time:[10,1,1,""],start:[10,1,1,""],state:[10,4,1,""],reserved_time:[10,4,1,""],has_attribute:[10,1,1,""],set_started:[10,1,1,""],set_provisioned:[10,1,1,""],get_rtype:[10,5,1,""],enable_trace:[10,1,1,""],set_discovered:[10,1,1,""],configure:[10,1,1,""],trace:[10,1,1,""],deploy:[10,1,1,""],stop:[10,1,1,""],start_time:[10,4,1,""],do_provision:[10,1,1,""],get_attribute:[10,5,1,""],stop_time:[10,4,1,""],connections:[10,4,1,""],set_with_conditions:[10,1,1,""],reschedule_delay:[10,4,1,""],do_deploy:[10,1,1,""],get_traces:[10,5,1,""],get_platform:[10,5,1,""],do_stop:[10,1,1,""],log_message:[10,1,1,""],register_condition:[10,1,1,""],provision:[10,1,1,""],provision_time:[10,4,1,""],unregister_condition:[10,1,1,""],get_connected:[10,1,1,""],start_with_conditions:[10,1,1,""],ready_time:[10,4,1,""],conditions:[10,4,1,""],set_reserved:[10,1,1,""],set_released:[10,1,1,""],release_time:[10,4,1,""],do_disconnect:[10,1,1,""],get_help:[10,5,1,""],release:[10,1,1,""],fail:[10,1,1,""],set_ready:[10,1,1,""],get_attributes:[10,5,1,""],reserve:[10,1,1,""]},"nepi.util.rmatcher":{find_boxes:[16,2,1,""],match_tags:[16,2,1,""]},"nepi.resources.linux.ns3.ccn.ns3ccnddceapplication":{LinuxNS3DceCCND:[14,3,1,""]},"nepi.resources.ns3.ns3wrapper_debug.NS3WrapperDebuger":{format_kwargs:[6,1,1,""],dump_factory:[6,1,1,""],dump_invoke:[6,1,1,""],dump_shutdown:[6,1,1,""],dump_stop:[6,1,1,""],dump_to_script:[6,1,1,""],enabled:[6,4,1,""],dump_create:[6,1,1,""],format_value:[6,1,1,""],dump_header:[6,1,1,""],format_args:[6,1,1,""],dump_start:[6,1,1,""],script_path:[6,4,1,""],dump_set:[6,1,1,""],dump_get:[6,1,1,""]},"nepi.resources.ns3.ns3propagationdelaymodel":{NS3BasePropagationDelayModel:[6,3,1,""]},"nepi.resources.ns3.ns3mobilitymodel":{NS3BaseMobilityModel:[6,3,1,""]},"nepi.resources.ns3.classes.base_station_net_device":{NS3BaseStationNetDevice:[11,3,1,""]},"nepi.resources.ns3.ns3errorratemodel":{NS3BaseErrorRateModel:[6,3,1,""]},"nepi.resources":{all:[13,0,0,"-"],omf:[4,0,0,"-"],planetlab:[9,0,0,"-"],linux:[1,0,0,"-"],netns:[20,0,0,"-"],ns3:[6,0,0,"-"]},nepi:{util:[16,0,0,"-"],execution:[10,0,0,"-"],data:[18,0,0,"-"],resources:[21,0,0,"-"]},"nepi.resources.ns3.classes.ipv4l3protocol":{NS3Ipv4L3Protocol:[11,3,1,""]},"nepi.resources.ns3.classes.error_channel_sixlow":{NS3ErrorChannelSixlow:[11,3,1,""]},"nepi.resources.ns3.classes.steady_state_random_waypoint_mobility_model":{NS3SteadyStateRandomWaypointMobilityModel:[11,3,1,""]},"nepi.resources.linux":{node:[1,0,0,"-"],tap:[1,0,0,"-"],application:[1,0,0,"-"],mtr:[1,0,0,"-"],route:[1,0,0,"-"],ping:[1,0,0,"-"],traceroute:[1,0,0,"-"],udptunnel:[1,0,0,"-"],ccn:[0,0,0,"-"],tunnel:[1,0,0,"-"],nping:[1,0,0,"-"],rpmfuncs:[1,0,0,"-"],tun:[1,0,0,"-"],gretunnel:[1,0,0,"-"],"interface":[1,0,0,"-"],netns:[2,0,0,"-"],debfuncs:[1,0,0,"-"],ns3:[8,0,0,"-"],tcpdump:[1,0,0,"-"],udptest:[1,0,0,"-"],channel:[1,0,0,"-"]},"nepi.resources.ns3.classes.binary_error_model":{NS3BinaryErrorModel:[11,3,1,""]},"nepi.resources.planetlab.openvswitch":{ovs:[19,0,0,"-"],ovsport:[19,0,0,"-"]},"nepi.resources.omf":{node:[4,0,0,"-"],omf_client:[4,0,0,"-"],messages_6:[4,0,0,"-"],omf5_api:[4,0,0,"-"],omf_api_factory:[4,0,0,"-"],omf6_parser:[4,0,0,"-"],omf_resource:[4,0,0,"-"],application:[4,0,0,"-"],messages_5_4:[4,0,0,"-"],"interface":[4,0,0,"-"],omf6_api:[4,0,0,"-"],wilabt_node:[4,0,0,"-"],channel:[4,0,0,"-"]},"nepi.util.guid.GuidGenerator":{next:[16,1,1,""]},"nepi.resources.ns3.ns3simulation.NS3Simulation":{ns3_set:[6,1,1,""],invoke:[6,1,1,""],create:[6,1,1,""],stop:[6,1,1,""],factory:[6,1,1,""],start:[6,1,1,""],client:[6,4,1,""],shutdown:[6,1,1,""],flush:[6,1,1,""],ns3_get:[6,1,1,""]},"nepi.resources.ns3.classes.mesh_point_device":{NS3MeshPointDevice:[11,3,1,""]},"nepi.resources.linux.tcpdump":{LinuxTcpdump:[1,3,1,""]},"nepi.util.parallel":{WorkerThread:[16,3,1,""],ParallelRun:[16,3,1,""]},"nepi.util.plotter":{PFormats:[16,3,1,""],ECPlotter:[16,3,1,""]},"nepi.resources.planetlab.tap.PlanetlabTap":{node:[9,4,1,""],valid_connection:[9,1,1,""],vif_name_file:[9,4,1,""],gre_connect:[9,1,1,""],upload_start_command:[9,1,1,""],wait_vif_name:[9,1,1,""],upload_sources:[9,1,1,""]},"nepi.resources.linux.ccn.ccnpoke.LinuxCCNPoke":{do_deploy:[0,1,1,""],valid_connection:[0,1,1,""]},"nepi.execution.ec.ECState":{TERMINATED:[10,4,1,""],RUNNING:[10,4,1,""],RELEASED:[10,4,1,""],FAILED:[10,4,1,""]},"nepi.resources.ns3.classes.tap_bridge":{NS3TapBridge:[11,3,1,""]},"nepi.resources.linux.gretunnel.LinuxGRETunnel":{valid_connection:[1,1,1,""],verify_connection:[1,1,1,""],initiate_connection:[1,1,1,""],establish_connection:[1,1,1,""],log_message:[1,1,1,""],terminate_connection:[1,1,1,""],get_endpoints:[1,1,1,""],check_state_connection:[1,1,1,""]},"nepi.data":{processing:[15,0,0,"-"]},"nepi.resources.planetlab.sfa_node.PlanetlabSfaNode":{sfaapi:[9,4,1,""],do_release:[9,1,1,""],valid_connection:[9,1,1,""],do_provision:[9,1,1,""],do_discover:[9,1,1,""],fail_sfaapi:[9,1,1,""],fail_not_enough_nodes:[9,1,1,""],fail_node_not_alive:[9,1,1,""],fail_discovery:[9,1,1,""],fail_node_not_available:[9,1,1,""]},"nepi.resources.planetlab.tun":{PlanetlabTun:[9,3,1,""]},"nepi.resources.ns3.ns3server.NS3WrapperMessage":{SET:[6,4,1,""],INVOKE:[6,4,1,""],GET:[6,4,1,""],CREATE:[6,4,1,""],STOP:[6,4,1,""],FACTORY:[6,4,1,""],START:[6,4,1,""],SHUTDOWN:[6,4,1,""],FLUSH:[6,4,1,""]},"nepi.resources.ns3.ns3netdevice":{NS3BaseNetDevice:[6,3,1,""]},"nepi.resources.planetlab.vroute.PlanetlabVroute":{node:[9,4,1,""],tap:[9,4,1,""],valid_connection:[9,1,1,""],do_release:[9,1,1,""],do_deploy:[9,1,1,""],do_start:[9,1,1,""],upload_start_command:[9,1,1,""],do_stop:[9,1,1,""],upload_sources:[9,1,1,""]},"nepi.resources.ns3":{ns3wrapper_debug:[6,0,0,"-"],ns3errorratemodel:[6,0,0,"-"],ns3errormodel:[6,0,0,"-"],ns3wifiphy:[6,0,0,"-"],ns3wifimac:[6,0,0,"-"],ns3arpl3protocol:[6,0,0,"-"],ns3route:[6,0,0,"-"],ns3dceapplication:[6,0,0,"-"],resource_manager_generator:[6,0,0,"-"],ns3icmpv4l4protocol:[6,0,0,"-"],ns3propagationlossmodel:[6,0,0,"-"],ns3simulation:[6,0,0,"-"],ns3pipechanel:[6,0,0,"-"],ns3queue:[6,0,0,"-"],ns3wrapper:[6,0,0,"-"],ns3mobilitymodel:[6,0,0,"-"],ns3propagationdelaymodel:[6,0,0,"-"],ns3fdnetdevice:[6,0,0,"-"],ns3channel:[6,0,0,"-"],ns3ccndceapplication:[6,0,0,"-"],ns3wifiremotestationmanager:[6,0,0,"-"],ns3client:[6,0,0,"-"],ns3dcehelper:[6,0,0,"-"],ns3wifichannel:[6,0,0,"-"],ns3node:[6,0,0,"-"],ns3wifinetdevice:[6,0,0,"-"],ns3ipv4l3protocol:[6,0,0,"-"],ns3server:[6,0,0,"-"],ns3netdevice:[6,0,0,"-"],ns3base:[6,0,0,"-"],classes:[11,0,0,"-"],ns3application:[6,0,0,"-"]},"nepi.resources.ns3.ns3wifiphy.NS3BaseWifiPhy":{device:[6,4,1,""],node:[6,4,1,""],channel:[6,4,1,""]},"nepi.resources.linux.nping.LinuxNPing":{do_deploy:[1,1,1,""],valid_connection:[1,1,1,""]},"nepi.execution.scheduler.TaskStatus":{NEW:[10,4,1,""],DONE:[10,4,1,""],ERROR:[10,4,1,""]},"nepi.resources.linux.ns3.ns3pingdceapplication":{LinuxDcePing:[8,3,1,""]},"nepi.util.serializer.SFormats":{XML:[16,4,1,""]},"nepi.resources.ns3.ns3simulation":{NS3Simulation:[6,3,1,""]},"nepi.resources.ns3.classes.nist_error_rate_model":{NS3NistErrorRateModel:[11,3,1,""]},"nepi.resources.netns":{netnswrapper:[20,0,0,"-"],netnsbase:[20,0,0,"-"],netnsserver:[20,0,0,"-"],netnsipv4address:[20,0,0,"-"],netnswrapper_debug:[20,0,0,"-"],netnsapplication:[20,0,0,"-"],netnsnodeinterface:[20,0,0,"-"],netnsinterface:[20,0,0,"-"],netnsemulation:[20,0,0,"-"],netnsnode:[20,0,0,"-"],netnsroute:[20,0,0,"-"],netnsclient:[20,0,0,"-"],netnsswitch:[20,0,0,"-"]},"nepi.util.parsers.xml_parser.ECXMLParser":{from_xml:[23,1,1,""],to_xml:[23,1,1,""]},"nepi.resources.ns3.classes.kun2600mhz_propagation_loss_model":{NS3Kun2600MhzPropagationLossModel:[11,3,1,""]},"nepi.resources.netns.netnsswitch.NetNSSwitch":{"interface":[20,4,1,""],node:[20,4,1,""],emulation:[20,4,1,""]},"nepi.resources.ns3.classes.constant_speed_propagation_delay_model":{NS3ConstantSpeedPropagationDelayModel:[11,3,1,""]},"nepi.resources.ns3.ns3errormodel":{NS3BaseErrorModel:[6,3,1,""]},"nepi.resources.linux.node.OSType":{FEDORA_12:[1,4,1,""],FEDORA_14:[1,4,1,""],FEDORA:[1,4,1,""],FEDORA_8:[1,4,1,""],UBUNTU:[1,4,1,""],DEBIAN:[1,4,1,""]},"nepi.data.processing.ccn.parser":{annotate_cn_graph:[3,2,1,""],process_content_history_logs:[3,2,1,""],process_content_history:[3,2,1,""],ccn_consumers:[3,2,1,""],is_control:[3,2,1,""],ccn_producers:[3,2,1,""],annotate_cn_node:[3,2,1,""],parse_file:[3,2,1,""],load_content_history:[3,2,1,""],dump_content_history:[3,2,1,""]},"nepi.resources.planetlab.ns3":{fdudptunnel:[7,0,0,"-"],tuntapfdlink:[7,0,0,"-"]},"nepi.resources.ns3.ns3netdevice.NS3BaseNetDevice":{node:[6,4,1,""],queue:[6,4,1,""],ascii_helper_uuid:[6,4,1,""],channel:[6,4,1,""],device_helper_uuid:[6,4,1,""]},"nepi.resources.ns3.ns3wrapper.NS3Wrapper":{is_started:[6,4,1,""],debuger:[6,4,1,""],start:[6,1,1,""],invoke:[6,1,1,""],get:[6,1,1,""],replace_kwargs:[6,1,1,""],create:[6,1,1,""],stop:[6,1,1,""],factory:[6,1,1,""],is_running:[6,4,1,""],ns3:[6,4,1,""],get_object:[6,1,1,""],set:[6,1,1,""],make_uuid:[6,1,1,""],shutdown:[6,1,1,""],replace_args:[6,1,1,""],logger:[6,4,1,""],allowed_types:[6,4,1,""],is_finished:[6,4,1,""]},"nepi.resources.planetlab.node.PlanetlabNode":{plapi:[9,4,1,""],do_release:[9,1,1,""],valid_connection:[9,1,1,""],lock:[9,4,1,""],do_provision:[9,1,1,""],do_discover:[9,1,1,""],fail_plapi:[9,1,1,""],fail_not_enough_nodes:[9,1,1,""],fail_node_not_alive:[9,1,1,""],fail_discovery:[9,1,1,""],fail_node_not_available:[9,1,1,""]},"nepi.resources.linux.ns3.tuntapfdlink.LinuxTunTapFdLink":{node:[8,4,1,""],tap:[8,4,1,""],fdnetdevice:[8,4,1,""],fdnode:[8,4,1,""],upload_start_command:[8,1,1,""],do_deploy:[8,1,1,""],do_start:[8,1,1,""],tapnode:[8,4,1,""],upload_sources:[8,1,1,""]},"nepi.resources.ns3.classes.friis_propagation_loss_model":{NS3FriisPropagationLossModel:[11,3,1,""]},"nepi.resources.ns3.ns3base.NS3Base":{node:[6,4,1,""],set:[6,1,1,""],uuid:[6,4,1,""],trace:[6,1,1,""],get:[6,1,1,""],do_provision:[6,1,1,""],state:[6,4,1,""],simulation:[6,4,1,""],do_deploy:[6,1,1,""],connected:[6,4,1,""],do_start:[6,1,1,""],do_stop:[6,1,1,""]},"nepi.resources.linux.udptunnel":{LinuxUdpTunnel:[1,3,1,""]},"nepi.resources.ns3.classes.jakes_propagation_loss_model":{NS3JakesPropagationLossModel:[11,3,1,""]},"nepi.resources.linux.ns3.ccn.ns3fibentrydceapplication":{LinuxNS3DceFIBEntry:[14,3,1,""]},"nepi.resources.ns3.classes.sta_wifi_mac":{NS3StaWifiMac:[11,3,1,""]},"nepi.resources.linux.ns3":{tuntapfdlink:[8,0,0,"-"],fdudptunnel:[8,0,0,"-"],ns3simulation:[8,0,0,"-"],ccn:[14,0,0,"-"],ns3client:[8,0,0,"-"],ns3pingdceapplication:[8,0,0,"-"],ns3dceapplication:[8,0,0,"-"]},"nepi.resources.linux.ns3.ccn.ns3ccnpokedceapplication":{LinuxNS3DceCCNPoke:[14,3,1,""]},"nepi.resources.ns3.classes.single_model_spectrum_channel":{NS3SingleModelSpectrumChannel:[11,3,1,""]},"nepi.resources.ns3.classes.lte_ue_net_device":{NS3LteUeNetDevice:[11,3,1,""]},"nepi.resources.ns3.ns3server":{get_options:[6,2,1,""],run_server:[6,2,1,""],close_socket:[6,2,1,""],recv_msg:[6,2,1,""],open_socket:[6,2,1,""],handle_message:[6,2,1,""],send_reply:[6,2,1,""],NS3WrapperMessage:[6,3,1,""]},"nepi.execution.trace.Trace":{help:[10,4,1,""],name:[10,4,1,""]},"nepi.resources.ns3.ns3ipv4l3protocol.NS3BaseIpv4L3Protocol":{node:[6,4,1,""]},"nepi.resources.linux.node":{OSType:[1,3,1,""],LinuxNode:[1,3,1,""],ExitCode:[1,3,1,""]},"nepi.resources.omf.wilabt_node.WilabtSfaNode":{execute:[4,1,1,""],do_release:[4,1,1,""],valid_connection:[4,1,1,""],do_provision:[4,1,1,""],do_discover:[4,1,1,""],sfaapi:[4,4,1,""],fail_sfaapi:[4,1,1,""],do_deploy:[4,1,1,""],fail_not_enough_nodes:[4,1,1,""],fail_node_not_alive:[4,1,1,""],fail_discovery:[4,1,1,""],fail_node_not_available:[4,1,1,""]},"nepi.resources.linux.ns3.tuntapfdlink":{LinuxTunTapFdLink:[8,3,1,""]},"nepi.resources.ns3.ns3client.NS3Client":{set:[6,1,1,""],invoke:[6,1,1,""],get:[6,1,1,""],create:[6,1,1,""],stop:[6,1,1,""],factory:[6,1,1,""],start:[6,1,1,""],shutdown:[6,1,1,""],flush:[6,1,1,""]},"nepi.resources.omf.omf6_api":{OMF6API:[4,3,1,""]},"nepi.resources.ns3.classes.constant_rate_wifi_manager":{NS3ConstantRateWifiManager:[11,3,1,""]},"nepi.resources.ns3.classes.simple_channel":{NS3SimpleChannel:[11,3,1,""]},"nepi.resources.ns3.classes.emu_net_device":{NS3EmuNetDevice:[11,3,1,""]},"nepi.resources.netns.netnsroute":{NetNSIPv4Route:[20,3,1,""]},"nepi.resources.netns.netnsbase.NetNSBase":{set:[20,1,1,""],uuid:[20,4,1,""],trace:[20,1,1,""],get:[20,1,1,""],do_provision:[20,1,1,""],state:[20,4,1,""],do_deploy:[20,1,1,""],connected:[20,4,1,""],do_start:[20,1,1,""],do_stop:[20,1,1,""]},"nepi.resources.linux.ccn.ccnpingserver":{LinuxCCNPingServer:[0,3,1,""]},"nepi.resources.ns3.ns3dcehelper.NS3DceHelper":{dce_manager_uuid:[6,4,1,""],dce_application_uuid:[6,4,1,""],dce_manager_lock:[6,4,1,""],dce_application_lock:[6,4,1,""]},"nepi.resources.omf.messages_5_4":{MessageHandler:[4,3,1,""]},"nepi.resources.linux.node.LinuxNode":{usr_dir:[1,4,1,""],node_home:[1,4,1,""],do_release:[1,1,1,""],install_packages:[1,1,1,""],find_home:[1,1,1,""],kill:[1,1,1,""],valid_connection:[1,1,1,""],download:[1,1,1,""],wait_pid:[1,1,1,""],nepi_home:[1,4,1,""],clean_processes:[1,1,1,""],bin_dir:[1,4,1,""],format_environment:[1,1,1,""],upload_command:[1,1,1,""],mkdir:[1,1,1,""],home_dir:[1,4,1,""],filter_existing_files:[1,1,1,""],run_home:[1,4,1,""],getpid:[1,1,1,""],get_os:[1,1,1,""],src_dir:[1,4,1,""],exp_dir:[1,4,1,""],localhost:[1,4,1,""],rmdir:[1,1,1,""],status:[1,1,1,""],run:[1,1,1,""],clean_experiment:[1,1,1,""],share_dir:[1,4,1,""],do_provision:[1,1,1,""],use_rpm:[1,4,1,""],wait_run:[1,1,1,""],do_deploy:[1,1,1,""],exp_home:[1,4,1,""],log_message:[1,1,1,""],use_deb:[1,4,1,""],copy:[1,1,1,""],is_alive:[1,1,1,""],clean_home:[1,1,1,""],execute:[1,1,1,""],install_packages_command:[1,1,1,""],lib_dir:[1,4,1,""],upload:[1,1,1,""],check_errors:[1,1,1,""],check_output:[1,1,1,""],remove_packages:[1,1,1,""],exitcode:[1,1,1,""],os:[1,4,1,""],run_and_wait:[1,1,1,""]},"nepi.resources.ns3.classes.yans_wifi_channel":{NS3YansWifiChannel:[11,3,1,""]},"nepi.resources.ns3.classes.binary_error_sixlow_model":{NS3BinaryErrorSixlowModel:[11,3,1,""]},"nepi.resources.omf.omf_resource":{ResourceGateway:[4,3,1,""],OMFResource:[4,3,1,""]},"nepi.resources.netns.netnsbase":{NetNSBase:[20,3,1,""]},"nepi.resources.planetlab.vroute":{PlanetlabVroute:[9,3,1,""]},"nepi.resources.ns3.classes.csma_net_device":{NS3CsmaNetDevice:[11,3,1,""]},"nepi.resources.ns3.ns3wrapper_debug":{NS3WrapperDebuger:[6,3,1,""]},"nepi.resources.linux.ns3.fdudptunnel":{LinuxNs3FdUdpTunnel:[8,3,1,""]},"nepi.resources.ns3.classes.red_queue":{NS3RedQueue:[11,3,1,""]},"nepi.resources.linux.tap":{LinuxTap:[1,3,1,""]},"nepi.resources.ns3.classes.list_error_model":{NS3ListErrorModel:[11,3,1,""]},"nepi.resources.ns3.classes.udp_client":{NS3UdpClient:[11,3,1,""]},"nepi.resources.omf.node":{OMFNode:[4,3,1,""]},"nepi.resources.linux.ccn.ccnd.LinuxCCND":{valid_connection:[0,1,1,""],state:[0,4,1,""],do_deploy:[0,1,1,""],version:[0,4,1,""],do_start:[0,1,1,""],do_stop:[0,1,1,""],upload_start_command:[0,1,1,""],path:[0,4,1,""]},"nepi.resources.linux.interface":{LinuxInterface:[1,3,1,""]},"nepi.resources.ns3.classes.non_communicating_net_device":{NS3NonCommunicatingNetDevice:[11,3,1,""]},"nepi.resources.ns3.classes.itu_r1411los_propagation_loss_model":{NS3ItuR1411LosPropagationLossModel:[11,3,1,""]},"nepi.resources.linux.ccn.ccnping":{LinuxCCNPing:[0,3,1,""]},"nepi.resources.ns3.classes.lr_wpan_net_device":{NS3LrWpanNetDevice:[11,3,1,""]},"nepi.resources.ns3.classes.icmpv6l4protocol":{NS3Icmpv6L4Protocol:[11,3,1,""]},"nepi.resources.ns3.classes.tcp_l4protocol":{NS3TcpL4Protocol:[11,3,1,""]},"nepi.resources.linux.netns.netnsclient":{LinuxNetNSClient:[2,3,1,""]},"nepi.resources.ns3.ns3ipv4l3protocol":{NS3BaseIpv4L3Protocol:[6,3,1,""]},"nepi.resources.ns3.classes.onoe_wifi_manager":{NS3OnoeWifiManager:[11,3,1,""]},"nepi.resources.ns3.classes.two_ray_ground_propagation_loss_model":{NS3TwoRayGroundPropagationLossModel:[11,3,1,""]},"nepi.resources.linux.netns.netnsclient.LinuxNetNSClient":{set:[2,1,1,""],send_msg:[2,1,1,""],invoke:[2,1,1,""],get:[2,1,1,""],create:[2,1,1,""],emulation:[2,4,1,""],shutdown:[2,1,1,""],flush:[2,1,1,""]},"nepi.resources.linux.ns3.ns3simulation.LinuxNS3Simulation":{ns3_build_location:[8,4,1,""],socket_name:[8,4,1,""],do_release:[8,1,1,""],do_start:[8,1,1,""],ns3_src_location:[8,4,1,""],valid_connection:[8,1,1,""],replace_paths:[8,1,1,""],dce_src_location:[8,4,1,""],enable_dce:[8,4,1,""],state:[8,4,1,""],ns3_repo:[8,4,1,""],do_stop:[8,1,1,""],upload_sources:[8,1,1,""],pygccxml_version:[8,4,1,""],configure:[8,1,1,""],trace:[8,1,1,""],wait_remote_socket:[8,1,1,""],do_deploy:[8,1,1,""],remote_socket:[8,4,1,""],dce_helper:[8,4,1,""],dce_version:[8,4,1,""],dce_repo:[8,4,1,""],upload_extra_sources:[8,1,1,""],upload_start_command:[8,1,1,""]},"nepi.resources.ns3.classes.point_to_point_net_device":{NS3PointToPointNetDevice:[11,3,1,""]},"nepi.resources.planetlab.openvswitch.ovsport.PlanetlabOVSPort":{node:[19,4,1,""],ovsswitch:[19,4,1,""],establish_udp_connection:[19,1,1,""],valid_connection:[19,1,1,""],initiate_udp_connection:[19,1,1,""],do_release:[19,1,1,""],do_deploy:[19,1,1,""],port_number:[19,4,1,""],check_status:[19,1,1,""],do_provision:[19,1,1,""],terminate_connection:[19,1,1,""],create_port:[19,1,1,""],verify_connection:[19,1,1,""]},"nepi.resources.linux.udptest":{LinuxUdpTest:[1,3,1,""]},"nepi.resources.linux.ns3.ccn.ns3ccncatdceapplication":{LinuxNS3DceCCNCat:[14,3,1,""]},"nepi.resources.ns3.ns3wifinetdevice":{NS3BaseWifiNetDevice:[6,3,1,""]},"nepi.resources.ns3.ns3route":{NS3Route:[6,3,1,""]},"nepi.resources.ns3.classes.bulk_send_application":{NS3BulkSendApplication:[11,3,1,""]},"nepi.execution":{resource:[10,0,0,"-"],trace:[10,0,0,"-"],tags:[10,0,0,"-"],runner:[10,0,0,"-"],attribute:[10,0,0,"-"],ec:[10,0,0,"-"],scheduler:[10,0,0,"-"]},"nepi.resources.netns.netnsipv4address.NetNSIPv4Address":{"interface":[20,4,1,""],node:[20,4,1,""],emulation:[20,4,1,""]},"nepi.resources.planetlab.ns3.tuntapfdlink.PlanetlabTunTapFdLink":{upload_sources:[7,1,1,""],tap:[7,4,1,""],fdnetdevice:[7,4,1,""]},"nepi.resources.ns3.ns3node":{NS3BaseNode:[6,3,1,""]},"nepi.util.environ":{backticks:[16,2,1,""],execute:[16,2,1,""]},"nepi.util.guid":{GuidGenerator:[16,3,1,""]},"nepi.util.parsers":{xml_parser:[23,0,0,"-"]},"nepi.execution.attribute.Flags":{NoWrite:[10,4,1,""],Reserved:[10,4,1,""],NoRead:[10,4,1,""],Global:[10,4,1,""],Construct:[10,4,1,""],Filter:[10,4,1,""],Design:[10,4,1,""],Credential:[10,4,1,""]},"nepi.resources.omf.omf_api_factory":{OMFAPIFactory:[4,3,1,""]},"nepi.resources.ns3.ns3errormodel.NS3BaseErrorModel":{device:[6,4,1,""]},"nepi.resources.omf.application.OMFApplication":{node:[4,4,1,""],check_deploy:[4,1,1,""],valid_connection:[4,1,1,""],add_set_hook:[4,1,1,""],do_release:[4,1,1,""],do_deploy:[4,1,1,""],check_start:[4,1,1,""],stdin_hook:[4,1,1,""],do_start:[4,1,1,""],check_release:[4,1,1,""],trace:[4,1,1,""],do_stop:[4,1,1,""],exp_id:[4,4,1,""]},"nepi.resources.linux.ccn.ccncat":{LinuxCCNCat:[0,3,1,""]},"nepi.util.sfarspec_proc.SfaRSpecProcessing":{parse_sfa_rspec:[16,1,1,""],build_sfa_rspec:[16,1,1,""],make_dict_rec:[16,1,1,""]},"nepi.resources.netns.netnsnodeinterface":{NetNSNodeInterface:[20,3,1,""]},"nepi.resources.ns3.classes.udp_echo_client":{NS3UdpEchoClient:[11,3,1,""]},"nepi.resources.planetlab.openvswitch.ovs.PlanetlabOVSSwitch":{node:[19,4,1,""],do_provision:[19,1,1,""],check_sliver_ovs:[19,1,1,""],servers_on:[19,1,1,""],do_release:[19,1,1,""],create_bridge:[19,1,1,""],do_deploy:[19,1,1,""],valid_connection:[19,1,1,""],assign_controller:[19,1,1,""],ovs_status:[19,1,1,""]},"nepi.resources.linux.tunnel":{LinuxTunnel:[1,3,1,""]},"nepi.resources.ns3.classes.point_to_point_channel":{NS3PointToPointChannel:[11,3,1,""]},"nepi.resources.ns3.ns3wifimac.NS3BaseWifiMac":{node:[6,4,1,""],device:[6,4,1,""]},"nepi.resources.ns3.classes.fd_net_device":{NS3FdNetDevice:[11,3,1,""]},"nepi.execution.resource.ResourceState":{PROVISIONED:[10,4,1,""],RESERVED:[10,4,1,""],FAILED:[10,4,1,""],STARTED:[10,4,1,""],DISCOVERED:[10,4,1,""],RELEASED:[10,4,1,""],STOPPED:[10,4,1,""],READY:[10,4,1,""],NEW:[10,4,1,""]},"nepi.resources.omf.omf_resource.ResourceGateway":{TestbedtoGateway:[4,4,1,""],AMtoGateway:[4,4,1,""]},"nepi.resources.ns3.classes.simple_net_device":{NS3SimpleNetDevice:[11,3,1,""]},"nepi.resources.planetlab.tap":{PlanetlabTap:[9,3,1,""]},"nepi.resources.linux.application":{LinuxApplication:[1,3,1,""]},"nepi.util.manifoldapi.MANIFOLDAPI":{get_session_key:[16,1,1,""],get_resource_urn:[16,1,1,""],get_slice_resources:[16,1,1,""],get_resource_info:[16,1,1,""],add_resource_to_slice:[16,1,1,""],api:[16,4,1,""],remove_resource_from_slice:[16,1,1,""]},"nepi.data.processing":{ccn:[3,0,0,"-"],ping:[22,0,0,"-"]},"nepi.resources.ns3.classes.arp_l3protocol":{NS3ArpL3Protocol:[11,3,1,""]},"nepi.resources.ns3.ns3propagationdelaymodel.NS3BasePropagationDelayModel":{channel:[6,4,1,""],simulation:[6,4,1,""]},"nepi.resources.ns3.ns3ccndceapplication":{NS3BaseCCNDceApplication:[6,3,1,""]},"nepi.util.parallel.WorkerThread":{attach:[16,1,1,""],run:[16,1,1,""],QUIT:[16,3,1,""],quit:[16,1,1,""]},"nepi.resources.linux.ccn.ccncat.LinuxCCNCat":{do_deploy:[0,1,1,""],valid_connection:[0,1,1,""]},"nepi.resources.ns3.classes.constant_position_mobility_model":{NS3ConstantPositionMobilityModel:[11,3,1,""]},"nepi.resources.omf.messages_6.MessageHandler":{create_function:[4,1,1,""],request_function:[4,1,1,""],configure_function:[4,1,1,""],release_function:[4,1,1,""]},"nepi.resources.ns3.classes.receive_list_error_model":{NS3ReceiveListErrorModel:[11,3,1,""]},"nepi.execution.ec.ExperimentController":{get_task:[10,1,1,""],load:[10,5,1,""],stop:[10,1,1,""],set:[10,1,1,""],nthreads:[10,4,1,""],run_id:[10,4,1,""],trace_enabled:[10,1,1,""],serialize:[10,1,1,""],discover:[10,1,1,""],failure_level:[10,4,1,""],inform_failure:[10,1,1,""],abort:[10,4,1,""],shutdown:[10,1,1,""],set_global:[10,1,1,""],get_provision_time:[10,1,1,""],register_connection:[10,1,1,""],get_failed_time:[10,1,1,""],get_ready_time:[10,1,1,""],schedule:[10,1,1,""],get_global:[10,1,1,""],start:[10,1,1,""],state:[10,1,1,""],get_discover_time:[10,1,1,""],deploy:[10,1,1,""],persist:[10,4,1,""],local_dir:[10,4,1,""],logger:[10,4,1,""],wait:[10,1,1,""],resources:[10,4,1,""],enable_trace:[10,1,1,""],ecstate:[10,4,1,""],trace:[10,1,1,""],get:[10,1,1,""],remove_resource:[10,1,1,""],get_stop_time:[10,1,1,""],get_release_time:[10,1,1,""],get_attribute:[10,1,1,""],wait_started:[10,1,1,""],register_condition:[10,1,1,""],get_traces:[10,1,1,""],exp_id:[10,4,1,""],set_with_conditions:[10,1,1,""],provision:[10,1,1,""],fm:[10,4,1,""],get_resource:[10,1,1,""],run_dir:[10,4,1,""],filter_resources:[10,1,1,""],wait_released:[10,1,1,""],save:[10,1,1,""],wait_deployed:[10,1,1,""],netgraph:[10,4,1,""],get_resources_by_type:[10,1,1,""],plot:[10,1,1,""],register_resource:[10,1,1,""],exp_dir:[10,4,1,""],get_start_time:[10,1,1,""],release:[10,1,1,""],wait_finished:[10,1,1,""],get_attributes:[10,1,1,""]},"nepi.resources.linux.ping":{LinuxPing:[1,3,1,""]},"nepi.resources.ns3.classes.random_walk2d_mobility_model":{NS3RandomWalk2dMobilityModel:[11,3,1,""]},"nepi.execution.scheduler":{Task:[10,3,1,""],HeapScheduler:[10,3,1,""],TaskStatus:[10,3,1,""]},"nepi.resources.omf.wilabt_node":{WilabtSfaNode:[4,3,1,""]},"nepi.resources.linux.traceroute":{LinuxTraceroute:[1,3,1,""]},"nepi.resources.ns3.ns3propagationlossmodel.NS3BasePropagationLossModel":{channel:[6,4,1,""],simulation:[6,4,1,""]},"nepi.resources.linux.ns3.ns3client.LinuxNS3Client":{set:[8,1,1,""],send_msg:[8,1,1,""],invoke:[8,1,1,""],get:[8,1,1,""],create:[8,1,1,""],stop:[8,1,1,""],factory:[8,1,1,""],simulation:[8,4,1,""],start:[8,1,1,""],shutdown:[8,1,1,""],flush:[8,1,1,""]},"nepi.util.manifoldapi":{MANIFOLDAPIFactory:[16,3,1,""],MANIFOLDAPI:[16,3,1,""]},"nepi.resources.linux.channel.LinuxChannel":{log_message:[1,1,1,""],valid_connection:[1,1,1,""]},"nepi.resources.linux.ccn":{ccnpoke:[0,0,0,"-"],ccnapplication:[0,0,0,"-"],fibentry:[0,0,0,"-"],ccnr:[0,0,0,"-"],ccnpingserver:[0,0,0,"-"],ccncontent:[0,0,0,"-"],ccnd:[0,0,0,"-"],ccnpeek:[0,0,0,"-"],ccncat:[0,0,0,"-"],ccnping:[0,0,0,"-"]},"nepi.resources.ns3.classes.random_propagation_loss_model":{NS3RandomPropagationLossModel:[11,3,1,""]},"nepi.resources.omf.interface.OMFWifiInterface":{node:[4,4,1,""],valid_connection:[4,1,1,""],check_deploy:[4,1,1,""],do_release:[4,1,1,""],configure_iface:[4,1,1,""],do_deploy:[4,1,1,""],configure_ip:[4,1,1,""],configure_on_omf5:[4,1,1,""],configure_on_omf6:[4,1,1,""],check_release:[4,1,1,""],exp_id:[4,4,1,""],channel:[4,4,1,""]},"nepi.resources.ns3.ns3fdnetdevice":{NS3BaseFdNetDevice:[6,3,1,""]},"nepi.resources.ns3.classes.mesh_wifi_interface_mac":{NS3MeshWifiInterfaceMac:[11,3,1,""]},"nepi.resources.ns3.classes.oh_buildings_propagation_loss_model":{NS3OhBuildingsPropagationLossModel:[11,3,1,""]},"nepi.resources.omf.node.OMFNode":{exp_id:[4,4,1,""],do_deploy:[4,1,1,""],do_release:[4,1,1,""],valid_connection:[4,1,1,""]},"nepi.resources.ns3.classes.adhoc_wifi_mac":{NS3AdhocWifiMac:[11,3,1,""]},"nepi.resources.netns.netnswrapper_debug":{NetNSWrapperDebuger:[20,3,1,""]},"nepi.util.netgraph":{NetGraph:[16,3,1,""],TopologyType:[16,3,1,""]},"nepi.execution.ec":{ECState:[10,3,1,""],FailureLevel:[10,3,1,""],FailureManager:[10,3,1,""],ExperimentController:[10,3,1,""]},"nepi.resources.ns3.ns3channel.NS3BaseChannel":{devices:[6,4,1,""],simulation:[6,4,1,""]},"nepi.resources.ns3.classes.aarfcd_wifi_manager":{NS3AarfcdWifiManager:[11,3,1,""]},"nepi.resources.ns3.classes.icmpv4l4protocol":{NS3Icmpv4L4Protocol:[11,3,1,""]},"nepi.resources.omf.omf6_parser.OMF6Parser":{check_mailbox:[4,1,1,""],handle:[4,1,1,""],init_mailbox:[4,1,1,""]},"nepi.resources.linux.ns3.ns3dceapplication":{LinuxNS3DceApplication:[8,3,1,""]},"nepi.resources.ns3.ns3wifimac":{NS3BaseWifiMac:[6,3,1,""]},"nepi.resources.linux.ccn.ccnr":{LinuxCCNR:[0,3,1,""]},"nepi.resources.netns.netnsnode.NetNSNode":{emulation:[20,4,1,""]},"nepi.resources.linux.ccn.ccnd":{LinuxCCND:[0,3,1,""]},"nepi.resources.linux.interface.LinuxInterface":{add_set_hooks:[1,1,1,""],node:[1,4,1,""],do_release:[1,1,1,""],valid_connection:[1,1,1,""],do_provision:[1,1,1,""],do_discover:[1,1,1,""],do_deploy:[1,1,1,""],set_hook_mtu:[1,1,1,""],log_message:[1,1,1,""],set_hook_up:[1,1,1,""],channel:[1,4,1,""],load_configuration:[1,1,1,""]},"nepi.resources.netns.netnsclient":{NetNSClient:[20,3,1,""]},"nepi.resources.ns3.classes.rraa_wifi_manager":{NS3RraaWifiManager:[11,3,1,""]},"nepi.resources.ns3.classes.burst_error_model":{NS3BurstErrorModel:[11,3,1,""]},"nepi.resources.planetlab.node":{PlanetlabNode:[9,3,1,""]},"nepi.resources.ns3.classes.amrr_wifi_manager":{NS3AmrrWifiManager:[11,3,1,""]},"nepi.resources.ns3.classes.rate_error_model":{NS3RateErrorModel:[11,3,1,""]},"nepi.resources.ns3.ns3application":{NS3BaseApplication:[6,3,1,""]},"nepi.util.serializer.ECSerializer":{load:[16,1,1,""],save:[16,1,1,""],serialize:[16,1,1,""]},"nepi.resources.linux.ns3.ccn.ns3ccnddceapplication.LinuxNS3DceCCND":{version:[14,4,1,""]},"nepi.resources.linux.ccn.ccncontent.LinuxCCNContent":{node:[0,4,1,""],valid_connection:[0,1,1,""],ccnr:[0,4,1,""],ccnd:[0,4,1,""],do_deploy:[0,1,1,""],do_start:[0,1,1,""],upload_start_command:[0,1,1,""]},"nepi.resources.ns3.classes.cara_wifi_manager":{NS3CaraWifiManager:[11,3,1,""]},"nepi.resources.ns3.classes.constant_acceleration_mobility_model":{NS3ConstantAccelerationMobilityModel:[11,3,1,""]},"nepi.resources.ns3.classes.yans_error_rate_model":{NS3YansErrorRateModel:[11,3,1,""]},"nepi.resources.linux.ccn.ccnr.LinuxCCNR":{node:[0,4,1,""],valid_connection:[0,1,1,""],ccnd:[0,4,1,""],do_deploy:[0,1,1,""],do_start:[0,1,1,""],upload_start_command:[0,1,1,""]},"nepi.resources.linux.tunnel.LinuxTunnel":{app_home:[1,1,1,""],do_provision:[1,1,1,""],valid_connection:[1,1,1,""],verify_connection:[1,1,1,""],do_stop:[1,1,1,""],initiate_connection:[1,1,1,""],establish_connection:[1,1,1,""],do_deploy:[1,1,1,""],state:[1,4,1,""],run_home:[1,1,1,""],endpoint_mkdir:[1,1,1,""],do_start:[1,1,1,""],log_message:[1,1,1,""],endpoint1:[1,4,1,""],endpoint2:[1,4,1,""],terminate_connection:[1,1,1,""],get_endpoints:[1,1,1,""],check_state_connection:[1,1,1,""]},"nepi.resources.planetlab.plcapi":{PLCAPI:[9,3,1,""],PLCAPIFactory:[9,3,1,""]},"nepi.resources.netns.netnsinterface":{NetNSInterface:[20,3,1,""]},"nepi.util.plotter.ECPlotter":{plot:[16,1,1,""]},"nepi.resources.planetlab.plcapi.PLCAPIFactory":{create_api:[9,5,1,""],get_api:[9,5,1,""]},"nepi.resources.ns3.classes.random_propagation_delay_model":{NS3RandomPropagationDelayModel:[11,3,1,""]},"nepi.resources.ns3.classes.error_net_device":{NS3ErrorNetDevice:[11,3,1,""]},"nepi.util.netgraph.NetGraph":{topo_type:[16,4,1,""],add_node:[16,1,1,""],del_node_annotation:[16,1,1,""],targets:[16,1,1,""],node_annotation:[16,1,1,""],generate_topology:[16,1,1,""],annotate_edge:[16,1,1,""],set_target:[16,1,1,""],node_ip_annotations:[16,1,1,""],is_source:[16,1,1,""],select_target_zero:[16,1,1,""],nodes:[16,1,1,""],is_target:[16,1,1,""],set_source:[16,1,1,""],get_p2p_info:[16,1,1,""],select_random_source:[16,1,1,""],edge_net_annotation:[16,1,1,""],edges:[16,1,1,""],add_edge:[16,1,1,""],assign_p2p_ips:[16,1,1,""],topology:[16,4,1,""],annotate_node:[16,1,1,""],annotate_edge_net:[16,1,1,""],sources:[16,1,1,""],node_annotations:[16,1,1,""],del_edge_annotation:[16,1,1,""],order:[16,4,1,""],edge_annotation:[16,1,1,""],edge_annotations:[16,1,1,""],annotate_node_ip:[16,1,1,""]},"nepi.resources.netns.netnsemulation":{NetNSEmulation:[20,3,1,""]},"nepi.resources.ns3.ns3pipechanel.NS3BasePipeChannel":{node:[6,4,1,""],devices:[6,4,1,""]},"nepi.resources.ns3.classes.random_waypoint_mobility_model":{NS3RandomWaypointMobilityModel:[11,3,1,""]},"nepi.resources.omf.omf_client.OMFClient":{check_mailbox:[4,1,1,""],get:[4,1,1,""],unregister:[4,1,1,""],create:[4,1,1,""],register:[4,1,1,""],publish:[4,1,1,""],subscriptions:[4,1,1,""],purge:[4,1,1,""],subscribe:[4,1,1,""],retract:[4,1,1,""],unsubscribe:[4,1,1,""],ready:[4,4,1,""],nodes:[4,1,1,""],handle_omf_message:[4,1,1,""],start:[4,1,1,""],"delete":[4,1,1,""]},"nepi.util.netgraph.TopologyType":{STAR:[16,4,1,""],LINEAR:[16,4,1,""],LADDER:[16,4,1,""],TREE:[16,4,1,""],ADHOC:[16,4,1,""],MESH:[16,4,1,""]},"nepi.resources.ns3.classes.range_propagation_loss_model":{NS3RangePropagationLossModel:[11,3,1,""]},"nepi.resources.planetlab.sfa_node":{PlanetlabSfaNode:[9,3,1,""]},"nepi.resources.ns3.ns3arpl3protocol":{NS3BaseArpL3Protocol:[6,3,1,""]},"nepi.execution.scheduler.HeapScheduler":{next:[10,1,1,""],pending:[10,4,1,""],remove:[10,1,1,""],schedule:[10,1,1,""]},"nepi.resources.linux.ccn.ccnapplication.LinuxCCNApplication":{node:[0,4,1,""],ccnd:[0,4,1,""],do_deploy:[0,1,1,""],valid_connection:[0,1,1,""]},"nepi.resources.ns3.ns3wifichannel":{NS3BaseWifiChannel:[6,3,1,""]},"nepi.resources.linux.nping":{LinuxNPing:[1,3,1,""]},"nepi.resources.linux.ccn.fibentry":{LinuxFIBEntry:[0,3,1,""]},"nepi.execution.attribute.Attribute":{has_changed:[10,4,1,""],has_flag:[10,1,1,""],name:[10,4,1,""],"default":[10,4,1,""],get_value:[10,1,1,""],value:[10,4,1,""],is_valid_value:[10,1,1,""],range:[10,4,1,""],flags:[10,4,1,""],allowed:[10,4,1,""],set_value:[10,1,1,""],type:[10,4,1,""],help:[10,4,1,""]},"nepi.resources.linux.udptest.LinuxUdpTest":{upload_start_command:[1,1,1,""],do_deploy:[1,1,1,""],valid_connection:[1,1,1,""],do_start:[1,1,1,""]},"nepi.resources.linux.ccn.ccnapplication":{LinuxCCNApplication:[0,3,1,""]},"nepi.resources.ns3.classes.point_to_point_remote_channel":{NS3PointToPointRemoteChannel:[11,3,1,""]},"nepi.resources.linux.ns3.ccn.ns3ccnpeekdceapplication":{LinuxNS3DceCCNPeek:[14,3,1,""]},"nepi.resources.planetlab.ns3.tuntapfdlink":{PlanetlabTunTapFdLink:[7,3,1,""]},"nepi.resources.ns3.resource_manager_generator":{create_ns3_rms:[6,2,1,""],template_traces:[6,2,1,""],select_base_class:[6,2,1,""],template_attributes:[6,2,1,""]},"nepi.util.sfaapi.SFAAPI":{blacklist_resource:[16,1,1,""],reserved:[16,1,1,""],blacklisted:[16,1,1,""],get_resources_hrn:[16,1,1,""],reserve_resource:[16,1,1,""],remove_all_from_slice:[16,1,1,""],get_slice_resources:[16,1,1,""],remove_resource_from_slice:[16,1,1,""],add_resource_to_slice:[16,1,1,""],add_resource_to_slice_batch:[16,1,1,""],release:[16,1,1,""],get_resources_info:[16,1,1,""]},"nepi.resources.ns3.classes.udp_l4protocol":{NS3UdpL4Protocol:[11,3,1,""]},"nepi.resources.netns.netnsemulation.NetNSEmulation":{emu_set:[20,1,1,""],invoke:[20,1,1,""],create:[20,1,1,""],client:[20,4,1,""],shutdown:[20,1,1,""],flush:[20,1,1,""],emu_get:[20,1,1,""]},"nepi.resources.ns3.classes.aloha_noack_net_device":{NS3AlohaNoackNetDevice:[11,3,1,""]},"nepi.resources.linux.mtr":{LinuxMtr:[1,3,1,""]},"nepi.resources.ns3.classes.ping6":{NS3Ping6:[11,3,1,""]},"nepi.execution.ec.FailureLevel":{RM_FAILURE:[10,4,1,""],OK:[10,4,1,""],EC_FAILURE:[10,4,1,""]},"nepi.resources.linux.tun":{LinuxTun:[1,3,1,""]},"nepi.resources.ns3.classes.hybrid_buildings_propagation_loss_model":{NS3HybridBuildingsPropagationLossModel:[11,3,1,""]},"nepi.resources.ns3.classes.drop_tail_queue":{NS3DropTailQueue:[11,3,1,""]},"nepi.resources.ns3.ns3propagationlossmodel":{NS3BasePropagationLossModel:[6,3,1,""]},"nepi.resources.ns3.classes.nakagami_propagation_loss_model":{NS3NakagamiPropagationLossModel:[11,3,1,""]},"nepi.execution.resource":{ResourceManager:[10,3,1,""],populate_factory:[10,2,1,""],ResourceAction:[10,3,1,""],find_types:[10,2,1,""],ResourceState:[10,3,1,""],clsinit:[10,2,1,""],ResourceFactory:[10,3,1,""],clsinit_copy:[10,2,1,""],failtrap:[10,2,1,""]},"nepi.execution.attribute":{Attribute:[10,3,1,""],Flags:[10,3,1,""],Types:[10,3,1,""]},"nepi.resources.all.collector.Collector":{do_provision:[13,1,1,""],store_path:[13,4,1,""],do_deploy:[13,1,1,""],do_release:[13,1,1,""],valid_connection:[13,1,1,""]},"nepi.resources.ns3.classes.loopback_net_device":{NS3LoopbackNetDevice:[11,3,1,""]},"nepi.resources.ns3.classes.itu_r1411nlos_over_rooftop_propagation_loss_model":{NS3ItuR1411NlosOverRooftopPropagationLossModel:[11,3,1,""]},"nepi.resources.ns3.ns3pipechanel":{NS3BasePipeChannel:[6,3,1,""]},"nepi.resources.ns3.classes.v4ping":{NS3V4Ping:[11,3,1,""]},"nepi.resources.ns3.classes.lte_simple_net_device":{NS3LteSimpleNetDevice:[11,3,1,""]},"nepi.resources.ns3.classes.dsrdsr_routing":{NS3dsrDsrRouting:[11,3,1,""]},"nepi.resources.ns3.classes.udp_echo_server":{NS3UdpEchoServer:[11,3,1,""]},"nepi.resources.ns3.classes.six_low_pan_net_device":{NS3SixLowPanNetDevice:[11,3,1,""]},"nepi.resources.linux.tap.LinuxTap":{vif_type:[1,4,1,""],IFF_TAP:[1,4,1,""],udp_connect:[1,1,1,""],do_release:[1,1,1,""],wait_file:[1,1,1,""],vif_type_flag:[1,4,1,""],do_start:[1,1,1,""],check_status:[1,1,1,""],establish_udp_connection:[1,1,1,""],valid_connection:[1,1,1,""],initiate_udp_connection:[1,1,1,""],state:[1,4,1,""],do_stop:[1,1,1,""],upload_sources:[1,1,1,""],node:[1,4,1,""],verify_connection:[1,1,1,""],gre_enabled:[1,4,1,""],vif_prefix:[1,4,1,""],gre_connect:[1,1,1,""],do_deploy:[1,1,1,""],sock_name:[1,4,1,""],IFF_TUN:[1,4,1,""],upload_start_command:[1,1,1,""],terminate_connection:[1,1,1,""]},"nepi.resources.linux.ns3.ccn":{ns3ccncatdceapplication:[14,0,0,"-"],ns3fibentrydceapplication:[14,0,0,"-"],ns3ccnpeekdceapplication:[14,0,0,"-"],ns3ccnrdceapplication:[14,0,0,"-"],ns3ccnddceapplication:[14,0,0,"-"],ns3ccndceapplication:[14,0,0,"-"],ns3ccnpokedceapplication:[14,0,0,"-"]},"nepi.resources.ns3.classes.node":{NS3Node:[11,3,1,""]},"nepi.resources.all.collector":{Collector:[13,3,1,""]},"nepi.data.processing.ping":{parser:[22,0,0,"-"]},"nepi.util.logger.Logger":{info:[16,1,1,""],log:[16,1,1,""],warning:[16,1,1,""],error:[16,1,1,""],debug:[16,1,1,""],log_message:[16,1,1,""],logger:[16,4,1,""]},"nepi.resources.linux.ping.LinuxPing":{upload_start_command:[1,1,1,""],do_deploy:[1,1,1,""],valid_connection:[1,1,1,""],do_start:[1,1,1,""]},"nepi.resources.omf.application":{OMFApplication:[4,3,1,""]},"nepi.resources.ns3.ns3queue":{NS3BaseQueue:[6,3,1,""]}},titleterms:{netn:[20,2],all:13,execut:10,ns3wrapper_debug:6,vrout:9,sta_wifi_mac:11,netnswrapper_debug:20,rpmfunc:1,waypoint_mobility_model:11,netnsnod:20,ns3wifiremotestationmanag:6,ccnpeek:0,ocb_wifi_mac:11,omf_api_factori:4,hybrid_buildings_propagation_loss_model:11,netnsswitch:20,packet_sink:11,icmpv6l4protocol:11,itu_r1411los_propagation_loss_model:11,udp_trace_cli:11,ns3propagationlossmodel:6,ns3ccnrdceapplic:14,platform:5,nist_error_rate_model:11,binary_error_sixlow_model:11,ccnpingserv:0,yans_wifi_channel:11,logger:16,point_to_point_channel:11,ns3ccnpeekdceappl:14,ccnping:0,random_direction2d_mobility_model:11,applic:[1,4],omf_client:4,lr_wpan_net_devic:11,ns3fibentrydceappl:14,timefunc:16,rout:1,sshfunc:16,resource_manager_gener:6,ccncontent:0,udptunnel:1,util:[16,23],tap_bridg:11,ns3ccncatdceappl:14,aarfcd_wifi_manag:11,ideal_wifi_manag:11,list_error_model:11,manifoldapi:16,ns3wrapper:6,omf5_api:4,jakes_propagation_loss_model:11,ns3fdnetdevic:6,on_off_appl:11,ns3wifimac:6,red_queu:11,ns3base:6,adhoc_wifi_mac:11,channel:[1,4],ns3ccnddceapplic:14,netnsclient:[20,2],ns3wifinetdevic:6,receive_list_error_model:11,fdudptunnel:[7,8],onoe_wifi_manag:11,ns3netdevic:6,itu_r1411nlos_over_rooftop_propagation_loss_model:11,range_propagation_loss_model:11,point_to_point_remote_channel:11,point_to_point_net_devic:11,csma_net_devic:11,ns3wifiphi:6,arf_wifi_manag:11,fd_net_devic:11,error_channel:11,collector:13,nepi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23],udp_l4protocol:11,ns3pingdceappl:8,ns3node:6,messages_6:4,rate_error_model:11,omf6_api:4,ns3icmpv4l4protocol:6,debfunc:1,content:[0,1,2,3,4,6,7,8,9,10,11,12,13,14,15,16,18,19,20,21,22,23],ns3pipechanel:6,fibentri:0,ns3applic:6,amrr_wifi_manag:11,attribut:10,core:5,ns3propagationdelaymodel:6,cara_wifi_manag:11,omf:4,udp_echo_serv:11,random_propagation_delay_model:11,ping6:11,ovsport:19,omf6_pars:4,constant_position_mobility_model:11,tun:[1,9],ns3client:[8,6],wilabt_nod:4,miscellan:5,okumura_hata_propagation_loss_model:11,ns3rout:6,ns3ccndceapplic:[14,6],messages_5_4:4,netnsipv4address:20,ccnpoke:0,lte_enb_net_devic:11,lte_ue_net_devic:11,netnsrout:20,yans_error_rate_model:11,tunnel:1,six_low_pan_net_devic:11,mesh_wifi_interface_mac:11,rraa_wifi_manag:11,schedul:10,modul:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,19,20,21,22,23],bridge_net_devic:11,submodul:[0,6,7,8,1,19,9,2,10,16,23,13,11,3,14,4,22,20],wifi_net_devic:11,statfunc:16,drop_tail_queu:11,linux:[8,0,14,1,2],v4ping:11,tap:[1,9],constant_rate_wifi_manag:11,guid:16,binary_error_model:11,hierarchical_mobility_model:11,ns3queue:6,omf_resourc:4,parallel:16,constant_acceleration_mobility_model:11,gauss_markov_mobility_model:11,ipv4l3protocol:11,process:[3,15,22],netnsappl:20,interfac:[1,4],multi_model_spectrum_channel:11,aarf_wifi_manag:11,ap_wifi_mac:11,ns3dcehelp:6,tcpdump:1,radvd:11,csma_channel:11,icmpv4l4protocol:11,constant_speed_propagation_delay_model:11,minstrel_wifi_manag:11,oh_buildings_propagation_loss_model:11,subscriber_station_net_devic:11,xml_parser:23,nping:1,simple_channel:11,gretunnel:1,ccncat:0,ns3:[7,8,14,11,6],yans_wifi_phi:11,three_log_distance_propagation_loss_model:11,friis_propagation_loss_model:11,base_station_net_devic:11,tuntapfdlink:[7,8],plcapi:9,netnsinterfac:20,netnsemul:[20,2],ns3ipv4l3protocol:6,random_walk2d_mobility_model:11,netnsnodeinterfac:20,bulk_send_appl:11,mtr:1,udp_echo_cli:11,single_model_spectrum_channel:11,plotter:16,ns3ccnpokedceappl:14,arp_l3protocol:11,ccnapplic:0,virtual_net_devic:11,fixed_rss_loss_model:11,ns3errorratemodel:6,netgraph:16,ns3errormodel:6,kun2600mhz_propagation_loss_model:11,runner:10,parser:[3,22,23],indic:5,packag:[0,1,2,3,4,6,7,8,9,10,11,12,13,14,15,16,18,19,20,21,22,23],netnsbas:20,tag:10,tabl:5,ns3arpl3protocol:6,netnsserv:20,serial:16,log_distance_propagation_loss_model:11,tracerout:1,udp_client:11,sfaapi:16,sfa_nod:9,ccnr:0,dsrdsr_rout:11,ns3simul:[8,6],ping:[1,22],error_net_devic:11,random_waypoint_mobility_model:11,ccnd:0,udp_serv:11,nakagami_propagation_loss_model:11,burst_error_model:11,document:[],ns3mobilitymodel:6,error_channel_sixlow:11,node:[11,1,4,9],constant_velocity_mobility_model:11,sfarspec_proc:16,resourc:[0,6,7,8,1,19,9,2,10,13,21,11,14,4,20],trace:10,planetlab:[7,19,9],ns3channel:6,openvswitch:19,tcp_l4protocol:11,cost231propagation_loss_model:11,"class":11,aloha_noack_net_devic:11,mesh_point_devic:11,two_ray_ground_propagation_loss_model:11,rmatcher:16,ns3dceapplic:[8,6],data:[3,15,18,22],netnswrapp:20,matrix_propagation_loss_model:11,steady_state_random_waypoint_mobility_model:11,subpackag:[18,6,8,12,1,9,15,16,21],ns3wifichannel:6,non_communicating_net_devic:11,random_propagation_loss_model:11,ns3server:6,emu_net_devic:11,bridge_channel:11,lte_simple_net_devic:11,loopback_net_devic:11,ccn:[0,14,3],environ:16,execfunc:16,uan_channel:11,udptest:1,simple_net_devic:11}})
\ No newline at end of file
diff --git a/doc/sphinx/_layout/modules.rst b/doc/sphinx/_layout/modules.rst
new file mode 100644 (file)
index 0000000..6486b2c
--- /dev/null
@@ -0,0 +1,7 @@
+nepi
+====
+
+.. toctree::
+   :maxdepth: 4
+
+   nepi
diff --git a/doc/sphinx/_layout/nepi.data.processing.ccn.rst b/doc/sphinx/_layout/nepi.data.processing.ccn.rst
new file mode 100644 (file)
index 0000000..4b3bb6b
--- /dev/null
@@ -0,0 +1,22 @@
+nepi.data.processing.ccn package
+================================
+
+Submodules
+----------
+
+nepi.data.processing.ccn.parser module
+--------------------------------------
+
+.. automodule:: nepi.data.processing.ccn.parser
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: nepi.data.processing.ccn
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_layout/nepi.data.processing.ping.rst b/doc/sphinx/_layout/nepi.data.processing.ping.rst
new file mode 100644 (file)
index 0000000..56d3574
--- /dev/null
@@ -0,0 +1,22 @@
+nepi.data.processing.ping package
+=================================
+
+Submodules
+----------
+
+nepi.data.processing.ping.parser module
+---------------------------------------
+
+.. automodule:: nepi.data.processing.ping.parser
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: nepi.data.processing.ping
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_layout/nepi.data.processing.rst b/doc/sphinx/_layout/nepi.data.processing.rst
new file mode 100644 (file)
index 0000000..6f22a0f
--- /dev/null
@@ -0,0 +1,18 @@
+nepi.data.processing package
+============================
+
+Subpackages
+-----------
+
+.. toctree::
+
+    nepi.data.processing.ccn
+    nepi.data.processing.ping
+
+Module contents
+---------------
+
+.. automodule:: nepi.data.processing
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_layout/nepi.data.rst b/doc/sphinx/_layout/nepi.data.rst
new file mode 100644 (file)
index 0000000..2841cdc
--- /dev/null
@@ -0,0 +1,17 @@
+nepi.data package
+=================
+
+Subpackages
+-----------
+
+.. toctree::
+
+    nepi.data.processing
+
+Module contents
+---------------
+
+.. automodule:: nepi.data
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_layout/nepi.execution.rst b/doc/sphinx/_layout/nepi.execution.rst
new file mode 100644 (file)
index 0000000..c8f46ae
--- /dev/null
@@ -0,0 +1,70 @@
+nepi.execution package
+======================
+
+Submodules
+----------
+
+nepi.execution.attribute module
+-------------------------------
+
+.. automodule:: nepi.execution.attribute
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.execution.ec module
+------------------------
+
+.. automodule:: nepi.execution.ec
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.execution.resource module
+------------------------------
+
+.. automodule:: nepi.execution.resource
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.execution.runner module
+----------------------------
+
+.. automodule:: nepi.execution.runner
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.execution.scheduler module
+-------------------------------
+
+.. automodule:: nepi.execution.scheduler
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.execution.tags module
+--------------------------
+
+.. automodule:: nepi.execution.tags
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.execution.trace module
+---------------------------
+
+.. automodule:: nepi.execution.trace
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: nepi.execution
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_layout/nepi.resources.all.rst b/doc/sphinx/_layout/nepi.resources.all.rst
new file mode 100644 (file)
index 0000000..5945900
--- /dev/null
@@ -0,0 +1,22 @@
+nepi.resources.all package
+==========================
+
+Submodules
+----------
+
+nepi.resources.all.collector module
+-----------------------------------
+
+.. automodule:: nepi.resources.all.collector
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: nepi.resources.all
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_layout/nepi.resources.linux.ccn.rst b/doc/sphinx/_layout/nepi.resources.linux.ccn.rst
new file mode 100644 (file)
index 0000000..871cb33
--- /dev/null
@@ -0,0 +1,94 @@
+nepi.resources.linux.ccn package
+================================
+
+Submodules
+----------
+
+nepi.resources.linux.ccn.ccnapplication module
+----------------------------------------------
+
+.. automodule:: nepi.resources.linux.ccn.ccnapplication
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ccn.ccncat module
+--------------------------------------
+
+.. automodule:: nepi.resources.linux.ccn.ccncat
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ccn.ccncontent module
+------------------------------------------
+
+.. automodule:: nepi.resources.linux.ccn.ccncontent
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ccn.ccnd module
+------------------------------------
+
+.. automodule:: nepi.resources.linux.ccn.ccnd
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ccn.ccnpeek module
+---------------------------------------
+
+.. automodule:: nepi.resources.linux.ccn.ccnpeek
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ccn.ccnping module
+---------------------------------------
+
+.. automodule:: nepi.resources.linux.ccn.ccnping
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ccn.ccnpingserver module
+---------------------------------------------
+
+.. automodule:: nepi.resources.linux.ccn.ccnpingserver
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ccn.ccnpoke module
+---------------------------------------
+
+.. automodule:: nepi.resources.linux.ccn.ccnpoke
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ccn.ccnr module
+------------------------------------
+
+.. automodule:: nepi.resources.linux.ccn.ccnr
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ccn.fibentry module
+----------------------------------------
+
+.. automodule:: nepi.resources.linux.ccn.fibentry
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: nepi.resources.linux.ccn
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_layout/nepi.resources.linux.netns.rst b/doc/sphinx/_layout/nepi.resources.linux.netns.rst
new file mode 100644 (file)
index 0000000..a20d910
--- /dev/null
@@ -0,0 +1,30 @@
+nepi.resources.linux.netns package
+==================================
+
+Submodules
+----------
+
+nepi.resources.linux.netns.netnsclient module
+---------------------------------------------
+
+.. automodule:: nepi.resources.linux.netns.netnsclient
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.netns.netnsemulation module
+------------------------------------------------
+
+.. automodule:: nepi.resources.linux.netns.netnsemulation
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: nepi.resources.linux.netns
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_layout/nepi.resources.linux.ns3.ccn.rst b/doc/sphinx/_layout/nepi.resources.linux.ns3.ccn.rst
new file mode 100644 (file)
index 0000000..a6e0868
--- /dev/null
@@ -0,0 +1,70 @@
+nepi.resources.linux.ns3.ccn package
+====================================
+
+Submodules
+----------
+
+nepi.resources.linux.ns3.ccn.ns3ccncatdceapplication module
+-----------------------------------------------------------
+
+.. automodule:: nepi.resources.linux.ns3.ccn.ns3ccncatdceapplication
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ns3.ccn.ns3ccndceapplication module
+--------------------------------------------------------
+
+.. automodule:: nepi.resources.linux.ns3.ccn.ns3ccndceapplication
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ns3.ccn.ns3ccnddceapplication module
+---------------------------------------------------------
+
+.. automodule:: nepi.resources.linux.ns3.ccn.ns3ccnddceapplication
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ns3.ccn.ns3ccnpeekdceapplication module
+------------------------------------------------------------
+
+.. automodule:: nepi.resources.linux.ns3.ccn.ns3ccnpeekdceapplication
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ns3.ccn.ns3ccnpokedceapplication module
+------------------------------------------------------------
+
+.. automodule:: nepi.resources.linux.ns3.ccn.ns3ccnpokedceapplication
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ns3.ccn.ns3ccnrdceapplication module
+---------------------------------------------------------
+
+.. automodule:: nepi.resources.linux.ns3.ccn.ns3ccnrdceapplication
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ns3.ccn.ns3fibentrydceapplication module
+-------------------------------------------------------------
+
+.. automodule:: nepi.resources.linux.ns3.ccn.ns3fibentrydceapplication
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: nepi.resources.linux.ns3.ccn
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_layout/nepi.resources.linux.ns3.rst b/doc/sphinx/_layout/nepi.resources.linux.ns3.rst
new file mode 100644 (file)
index 0000000..341946e
--- /dev/null
@@ -0,0 +1,69 @@
+nepi.resources.linux.ns3 package
+================================
+
+Subpackages
+-----------
+
+.. toctree::
+
+    nepi.resources.linux.ns3.ccn
+
+Submodules
+----------
+
+nepi.resources.linux.ns3.fdudptunnel module
+-------------------------------------------
+
+.. automodule:: nepi.resources.linux.ns3.fdudptunnel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ns3.ns3client module
+-----------------------------------------
+
+.. automodule:: nepi.resources.linux.ns3.ns3client
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ns3.ns3dceapplication module
+-------------------------------------------------
+
+.. automodule:: nepi.resources.linux.ns3.ns3dceapplication
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ns3.ns3pingdceapplication module
+-----------------------------------------------------
+
+.. automodule:: nepi.resources.linux.ns3.ns3pingdceapplication
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ns3.ns3simulation module
+---------------------------------------------
+
+.. automodule:: nepi.resources.linux.ns3.ns3simulation
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ns3.tuntapfdlink module
+--------------------------------------------
+
+.. automodule:: nepi.resources.linux.ns3.tuntapfdlink
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: nepi.resources.linux.ns3
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_layout/nepi.resources.linux.rst b/doc/sphinx/_layout/nepi.resources.linux.rst
new file mode 100644 (file)
index 0000000..40e4309
--- /dev/null
@@ -0,0 +1,167 @@
+nepi.resources.linux package
+============================
+
+Subpackages
+-----------
+
+.. toctree::
+
+    nepi.resources.linux.ccn
+    nepi.resources.linux.netns
+    nepi.resources.linux.ns3
+
+Submodules
+----------
+
+nepi.resources.linux.application module
+---------------------------------------
+
+.. automodule:: nepi.resources.linux.application
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.channel module
+-----------------------------------
+
+.. automodule:: nepi.resources.linux.channel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.debfuncs module
+------------------------------------
+
+.. automodule:: nepi.resources.linux.debfuncs
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.gretunnel module
+-------------------------------------
+
+.. automodule:: nepi.resources.linux.gretunnel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.interface module
+-------------------------------------
+
+.. automodule:: nepi.resources.linux.interface
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.mtr module
+-------------------------------
+
+.. automodule:: nepi.resources.linux.mtr
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.node module
+--------------------------------
+
+.. automodule:: nepi.resources.linux.node
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.nping module
+---------------------------------
+
+.. automodule:: nepi.resources.linux.nping
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.ping module
+--------------------------------
+
+.. automodule:: nepi.resources.linux.ping
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.route module
+---------------------------------
+
+.. automodule:: nepi.resources.linux.route
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.rpmfuncs module
+------------------------------------
+
+.. automodule:: nepi.resources.linux.rpmfuncs
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.tap module
+-------------------------------
+
+.. automodule:: nepi.resources.linux.tap
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.tcpdump module
+-----------------------------------
+
+.. automodule:: nepi.resources.linux.tcpdump
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.traceroute module
+--------------------------------------
+
+.. automodule:: nepi.resources.linux.traceroute
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.tun module
+-------------------------------
+
+.. automodule:: nepi.resources.linux.tun
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.tunnel module
+----------------------------------
+
+.. automodule:: nepi.resources.linux.tunnel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.udptest module
+-----------------------------------
+
+.. automodule:: nepi.resources.linux.udptest
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.linux.udptunnel module
+-------------------------------------
+
+.. automodule:: nepi.resources.linux.udptunnel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: nepi.resources.linux
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_layout/nepi.resources.netns.rst b/doc/sphinx/_layout/nepi.resources.netns.rst
new file mode 100644 (file)
index 0000000..eacf7f3
--- /dev/null
@@ -0,0 +1,118 @@
+nepi.resources.netns package
+============================
+
+Submodules
+----------
+
+nepi.resources.netns.netnsapplication module
+--------------------------------------------
+
+.. automodule:: nepi.resources.netns.netnsapplication
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.netns.netnsbase module
+-------------------------------------
+
+.. automodule:: nepi.resources.netns.netnsbase
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.netns.netnsclient module
+---------------------------------------
+
+.. automodule:: nepi.resources.netns.netnsclient
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.netns.netnsemulation module
+------------------------------------------
+
+.. automodule:: nepi.resources.netns.netnsemulation
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.netns.netnsinterface module
+------------------------------------------
+
+.. automodule:: nepi.resources.netns.netnsinterface
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.netns.netnsipv4address module
+--------------------------------------------
+
+.. automodule:: nepi.resources.netns.netnsipv4address
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.netns.netnsnode module
+-------------------------------------
+
+.. automodule:: nepi.resources.netns.netnsnode
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.netns.netnsnodeinterface module
+----------------------------------------------
+
+.. automodule:: nepi.resources.netns.netnsnodeinterface
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.netns.netnsroute module
+--------------------------------------
+
+.. automodule:: nepi.resources.netns.netnsroute
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.netns.netnsserver module
+---------------------------------------
+
+.. automodule:: nepi.resources.netns.netnsserver
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.netns.netnsswitch module
+---------------------------------------
+
+.. automodule:: nepi.resources.netns.netnsswitch
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.netns.netnswrapper module
+----------------------------------------
+
+.. automodule:: nepi.resources.netns.netnswrapper
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.netns.netnswrapper_debug module
+----------------------------------------------
+
+.. automodule:: nepi.resources.netns.netnswrapper_debug
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: nepi.resources.netns
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_layout/nepi.resources.ns3.classes.rst b/doc/sphinx/_layout/nepi.resources.ns3.classes.rst
new file mode 100644 (file)
index 0000000..e489b71
--- /dev/null
@@ -0,0 +1,862 @@
+nepi.resources.ns3.classes package
+==================================
+
+Submodules
+----------
+
+nepi.resources.ns3.classes.aarf_wifi_manager module
+---------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.aarf_wifi_manager
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.aarfcd_wifi_manager module
+-----------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.aarfcd_wifi_manager
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.adhoc_wifi_mac module
+------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.adhoc_wifi_mac
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.aloha_noack_net_device module
+--------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.aloha_noack_net_device
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.amrr_wifi_manager module
+---------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.amrr_wifi_manager
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.ap_wifi_mac module
+---------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.ap_wifi_mac
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.arf_wifi_manager module
+--------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.arf_wifi_manager
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.arp_l3protocol module
+------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.arp_l3protocol
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.base_station_net_device module
+---------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.base_station_net_device
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.binary_error_model module
+----------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.binary_error_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.binary_error_sixlow_model module
+-----------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.binary_error_sixlow_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.bridge_channel module
+------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.bridge_channel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.bridge_net_device module
+---------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.bridge_net_device
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.bulk_send_application module
+-------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.bulk_send_application
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.burst_error_model module
+---------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.burst_error_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.cara_wifi_manager module
+---------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.cara_wifi_manager
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.constant_acceleration_mobility_model module
+----------------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.constant_acceleration_mobility_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.constant_position_mobility_model module
+------------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.constant_position_mobility_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.constant_rate_wifi_manager module
+------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.constant_rate_wifi_manager
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.constant_speed_propagation_delay_model module
+------------------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.constant_speed_propagation_delay_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.constant_velocity_mobility_model module
+------------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.constant_velocity_mobility_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.cost231propagation_loss_model module
+---------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.cost231propagation_loss_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.csma_channel module
+----------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.csma_channel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.csma_net_device module
+-------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.csma_net_device
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.drop_tail_queue module
+-------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.drop_tail_queue
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.dsrdsr_routing module
+------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.dsrdsr_routing
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.emu_net_device module
+------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.emu_net_device
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.error_channel module
+-----------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.error_channel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.error_channel_sixlow module
+------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.error_channel_sixlow
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.error_net_device module
+--------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.error_net_device
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.fd_net_device module
+-----------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.fd_net_device
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.fixed_rss_loss_model module
+------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.fixed_rss_loss_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.friis_propagation_loss_model module
+--------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.friis_propagation_loss_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.gauss_markov_mobility_model module
+-------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.gauss_markov_mobility_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.hierarchical_mobility_model module
+-------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.hierarchical_mobility_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.hybrid_buildings_propagation_loss_model module
+-------------------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.hybrid_buildings_propagation_loss_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.icmpv4l4protocol module
+--------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.icmpv4l4protocol
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.icmpv6l4protocol module
+--------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.icmpv6l4protocol
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.ideal_wifi_manager module
+----------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.ideal_wifi_manager
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.ipv4l3protocol module
+------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.ipv4l3protocol
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.itu_r1411los_propagation_loss_model module
+---------------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.itu_r1411los_propagation_loss_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.itu_r1411nlos_over_rooftop_propagation_loss_model module
+-----------------------------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.itu_r1411nlos_over_rooftop_propagation_loss_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.jakes_propagation_loss_model module
+--------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.jakes_propagation_loss_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.kun2600mhz_propagation_loss_model module
+-------------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.kun2600mhz_propagation_loss_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.list_error_model module
+--------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.list_error_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.log_distance_propagation_loss_model module
+---------------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.log_distance_propagation_loss_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.loopback_net_device module
+-----------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.loopback_net_device
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.lr_wpan_net_device module
+----------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.lr_wpan_net_device
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.lte_enb_net_device module
+----------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.lte_enb_net_device
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.lte_simple_net_device module
+-------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.lte_simple_net_device
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.lte_ue_net_device module
+---------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.lte_ue_net_device
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.matrix_propagation_loss_model module
+---------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.matrix_propagation_loss_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.mesh_point_device module
+---------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.mesh_point_device
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.mesh_wifi_interface_mac module
+---------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.mesh_wifi_interface_mac
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.minstrel_wifi_manager module
+-------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.minstrel_wifi_manager
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.multi_model_spectrum_channel module
+--------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.multi_model_spectrum_channel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.nakagami_propagation_loss_model module
+-----------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.nakagami_propagation_loss_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.nist_error_rate_model module
+-------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.nist_error_rate_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.node module
+--------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.node
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.non_communicating_net_device module
+--------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.non_communicating_net_device
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.ocb_wifi_mac module
+----------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.ocb_wifi_mac
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.oh_buildings_propagation_loss_model module
+---------------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.oh_buildings_propagation_loss_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.okumura_hata_propagation_loss_model module
+---------------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.okumura_hata_propagation_loss_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.on_off_application module
+----------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.on_off_application
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.onoe_wifi_manager module
+---------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.onoe_wifi_manager
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.packet_sink module
+---------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.packet_sink
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.ping6 module
+---------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.ping6
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.point_to_point_channel module
+--------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.point_to_point_channel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.point_to_point_net_device module
+-----------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.point_to_point_net_device
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.point_to_point_remote_channel module
+---------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.point_to_point_remote_channel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.radvd module
+---------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.radvd
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.random_direction2d_mobility_model module
+-------------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.random_direction2d_mobility_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.random_propagation_delay_model module
+----------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.random_propagation_delay_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.random_propagation_loss_model module
+---------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.random_propagation_loss_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.random_walk2d_mobility_model module
+--------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.random_walk2d_mobility_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.random_waypoint_mobility_model module
+----------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.random_waypoint_mobility_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.range_propagation_loss_model module
+--------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.range_propagation_loss_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.rate_error_model module
+--------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.rate_error_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.receive_list_error_model module
+----------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.receive_list_error_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.red_queue module
+-------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.red_queue
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.rraa_wifi_manager module
+---------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.rraa_wifi_manager
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.simple_channel module
+------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.simple_channel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.simple_net_device module
+---------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.simple_net_device
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.single_model_spectrum_channel module
+---------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.single_model_spectrum_channel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.six_low_pan_net_device module
+--------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.six_low_pan_net_device
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.sta_wifi_mac module
+----------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.sta_wifi_mac
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.steady_state_random_waypoint_mobility_model module
+-----------------------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.steady_state_random_waypoint_mobility_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.subscriber_station_net_device module
+---------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.subscriber_station_net_device
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.tap_bridge module
+--------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.tap_bridge
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.tcp_l4protocol module
+------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.tcp_l4protocol
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.three_log_distance_propagation_loss_model module
+---------------------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.three_log_distance_propagation_loss_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.two_ray_ground_propagation_loss_model module
+-----------------------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.two_ray_ground_propagation_loss_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.uan_channel module
+---------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.uan_channel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.udp_client module
+--------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.udp_client
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.udp_echo_client module
+-------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.udp_echo_client
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.udp_echo_server module
+-------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.udp_echo_server
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.udp_l4protocol module
+------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.udp_l4protocol
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.udp_server module
+--------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.udp_server
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.udp_trace_client module
+--------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.udp_trace_client
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.v4ping module
+----------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.v4ping
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.virtual_net_device module
+----------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.virtual_net_device
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.waypoint_mobility_model module
+---------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.waypoint_mobility_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.wifi_net_device module
+-------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.wifi_net_device
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.yans_error_rate_model module
+-------------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.yans_error_rate_model
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.yans_wifi_channel module
+---------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.yans_wifi_channel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.classes.yans_wifi_phy module
+-----------------------------------------------
+
+.. automodule:: nepi.resources.ns3.classes.yans_wifi_phy
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: nepi.resources.ns3.classes
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_layout/nepi.resources.ns3.rst b/doc/sphinx/_layout/nepi.resources.ns3.rst
new file mode 100644 (file)
index 0000000..94356ab
--- /dev/null
@@ -0,0 +1,269 @@
+nepi.resources.ns3 package
+==========================
+
+Subpackages
+-----------
+
+.. toctree::
+
+    nepi.resources.ns3.classes
+
+Submodules
+----------
+
+nepi.resources.ns3.ns3application module
+----------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3application
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3arpl3protocol module
+------------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3arpl3protocol
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3base module
+---------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3base
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3ccndceapplication module
+----------------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3ccndceapplication
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3channel module
+------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3channel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3client module
+-----------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3client
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3dceapplication module
+-------------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3dceapplication
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3dcehelper module
+--------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3dcehelper
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3errormodel module
+---------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3errormodel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3errorratemodel module
+-------------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3errorratemodel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3fdnetdevice module
+----------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3fdnetdevice
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3icmpv4l4protocol module
+---------------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3icmpv4l4protocol
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3ipv4l3protocol module
+-------------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3ipv4l3protocol
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3mobilitymodel module
+------------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3mobilitymodel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3netdevice module
+--------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3netdevice
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3node module
+---------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3node
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3pipechanel module
+---------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3pipechanel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3propagationdelaymodel module
+--------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3propagationdelaymodel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3propagationlossmodel module
+-------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3propagationlossmodel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3queue module
+----------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3queue
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3route module
+----------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3route
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3server module
+-----------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3server
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3simulation module
+---------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3simulation
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3wifichannel module
+----------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3wifichannel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3wifimac module
+------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3wifimac
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3wifinetdevice module
+------------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3wifinetdevice
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3wifiphy module
+------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3wifiphy
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3wifiremotestationmanager module
+-----------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3wifiremotestationmanager
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3wrapper module
+------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3wrapper
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.ns3wrapper_debug module
+------------------------------------------
+
+.. automodule:: nepi.resources.ns3.ns3wrapper_debug
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.ns3.resource_manager_generator module
+----------------------------------------------------
+
+.. automodule:: nepi.resources.ns3.resource_manager_generator
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: nepi.resources.ns3
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_layout/nepi.resources.omf.rst b/doc/sphinx/_layout/nepi.resources.omf.rst
new file mode 100644 (file)
index 0000000..7dd222e
--- /dev/null
@@ -0,0 +1,118 @@
+nepi.resources.omf package
+==========================
+
+Submodules
+----------
+
+nepi.resources.omf.application module
+-------------------------------------
+
+.. automodule:: nepi.resources.omf.application
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.omf.channel module
+---------------------------------
+
+.. automodule:: nepi.resources.omf.channel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.omf.interface module
+-----------------------------------
+
+.. automodule:: nepi.resources.omf.interface
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.omf.messages_5_4 module
+--------------------------------------
+
+.. automodule:: nepi.resources.omf.messages_5_4
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.omf.messages_6 module
+------------------------------------
+
+.. automodule:: nepi.resources.omf.messages_6
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.omf.node module
+------------------------------
+
+.. automodule:: nepi.resources.omf.node
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.omf.omf5_api module
+----------------------------------
+
+.. automodule:: nepi.resources.omf.omf5_api
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.omf.omf6_api module
+----------------------------------
+
+.. automodule:: nepi.resources.omf.omf6_api
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.omf.omf6_parser module
+-------------------------------------
+
+.. automodule:: nepi.resources.omf.omf6_parser
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.omf.omf_api_factory module
+-----------------------------------------
+
+.. automodule:: nepi.resources.omf.omf_api_factory
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.omf.omf_client module
+------------------------------------
+
+.. automodule:: nepi.resources.omf.omf_client
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.omf.omf_resource module
+--------------------------------------
+
+.. automodule:: nepi.resources.omf.omf_resource
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.omf.wilabt_node module
+-------------------------------------
+
+.. automodule:: nepi.resources.omf.wilabt_node
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: nepi.resources.omf
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_layout/nepi.resources.planetlab.ns3.rst b/doc/sphinx/_layout/nepi.resources.planetlab.ns3.rst
new file mode 100644 (file)
index 0000000..a8759d4
--- /dev/null
@@ -0,0 +1,30 @@
+nepi.resources.planetlab.ns3 package
+====================================
+
+Submodules
+----------
+
+nepi.resources.planetlab.ns3.fdudptunnel module
+-----------------------------------------------
+
+.. automodule:: nepi.resources.planetlab.ns3.fdudptunnel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.planetlab.ns3.tuntapfdlink module
+------------------------------------------------
+
+.. automodule:: nepi.resources.planetlab.ns3.tuntapfdlink
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: nepi.resources.planetlab.ns3
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_layout/nepi.resources.planetlab.openvswitch.rst b/doc/sphinx/_layout/nepi.resources.planetlab.openvswitch.rst
new file mode 100644 (file)
index 0000000..edbb21a
--- /dev/null
@@ -0,0 +1,30 @@
+nepi.resources.planetlab.openvswitch package
+============================================
+
+Submodules
+----------
+
+nepi.resources.planetlab.openvswitch.ovs module
+-----------------------------------------------
+
+.. automodule:: nepi.resources.planetlab.openvswitch.ovs
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.planetlab.openvswitch.ovsport module
+---------------------------------------------------
+
+.. automodule:: nepi.resources.planetlab.openvswitch.ovsport
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: nepi.resources.planetlab.openvswitch
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_layout/nepi.resources.planetlab.rst b/doc/sphinx/_layout/nepi.resources.planetlab.rst
new file mode 100644 (file)
index 0000000..9fde12c
--- /dev/null
@@ -0,0 +1,70 @@
+nepi.resources.planetlab package
+================================
+
+Subpackages
+-----------
+
+.. toctree::
+
+    nepi.resources.planetlab.ns3
+    nepi.resources.planetlab.openvswitch
+
+Submodules
+----------
+
+nepi.resources.planetlab.node module
+------------------------------------
+
+.. automodule:: nepi.resources.planetlab.node
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.planetlab.plcapi module
+--------------------------------------
+
+.. automodule:: nepi.resources.planetlab.plcapi
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.planetlab.sfa_node module
+----------------------------------------
+
+.. automodule:: nepi.resources.planetlab.sfa_node
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.planetlab.tap module
+-----------------------------------
+
+.. automodule:: nepi.resources.planetlab.tap
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.planetlab.tun module
+-----------------------------------
+
+.. automodule:: nepi.resources.planetlab.tun
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.resources.planetlab.vroute module
+--------------------------------------
+
+.. automodule:: nepi.resources.planetlab.vroute
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: nepi.resources.planetlab
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_layout/nepi.resources.rst b/doc/sphinx/_layout/nepi.resources.rst
new file mode 100644 (file)
index 0000000..4c1fcfc
--- /dev/null
@@ -0,0 +1,22 @@
+nepi.resources package
+======================
+
+Subpackages
+-----------
+
+.. toctree::
+
+    nepi.resources.all
+    nepi.resources.linux
+    nepi.resources.netns
+    nepi.resources.ns3
+    nepi.resources.omf
+    nepi.resources.planetlab
+
+Module contents
+---------------
+
+.. automodule:: nepi.resources
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_layout/nepi.rst b/doc/sphinx/_layout/nepi.rst
new file mode 100644 (file)
index 0000000..aa1d5d3
--- /dev/null
@@ -0,0 +1,20 @@
+nepi package
+============
+
+Subpackages
+-----------
+
+.. toctree::
+
+    nepi.data
+    nepi.execution
+    nepi.resources
+    nepi.util
+
+Module contents
+---------------
+
+.. automodule:: nepi
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_layout/nepi.util.parsers.rst b/doc/sphinx/_layout/nepi.util.parsers.rst
new file mode 100644 (file)
index 0000000..34888c1
--- /dev/null
@@ -0,0 +1,22 @@
+nepi.util.parsers package
+=========================
+
+Submodules
+----------
+
+nepi.util.parsers.xml_parser module
+-----------------------------------
+
+.. automodule:: nepi.util.parsers.xml_parser
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: nepi.util.parsers
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/_layout/nepi.util.rst b/doc/sphinx/_layout/nepi.util.rst
new file mode 100644 (file)
index 0000000..cf0bc63
--- /dev/null
@@ -0,0 +1,141 @@
+nepi.util package
+=================
+
+Subpackages
+-----------
+
+.. toctree::
+
+    nepi.util.parsers
+
+Submodules
+----------
+
+nepi.util.environ module
+------------------------
+
+.. automodule:: nepi.util.environ
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.util.execfuncs module
+--------------------------
+
+.. automodule:: nepi.util.execfuncs
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.util.guid module
+---------------------
+
+.. automodule:: nepi.util.guid
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.util.logger module
+-----------------------
+
+.. automodule:: nepi.util.logger
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.util.manifoldapi module
+----------------------------
+
+.. automodule:: nepi.util.manifoldapi
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.util.netgraph module
+-------------------------
+
+.. automodule:: nepi.util.netgraph
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.util.parallel module
+-------------------------
+
+.. automodule:: nepi.util.parallel
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.util.plotter module
+------------------------
+
+.. automodule:: nepi.util.plotter
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.util.rmatcher module
+-------------------------
+
+.. automodule:: nepi.util.rmatcher
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.util.serializer module
+---------------------------
+
+.. automodule:: nepi.util.serializer
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.util.sfaapi module
+-----------------------
+
+.. automodule:: nepi.util.sfaapi
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.util.sfarspec_proc module
+------------------------------
+
+.. automodule:: nepi.util.sfarspec_proc
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.util.sshfuncs module
+-------------------------
+
+.. automodule:: nepi.util.sshfuncs
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.util.statfuncs module
+--------------------------
+
+.. automodule:: nepi.util.statfuncs
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+nepi.util.timefuncs module
+--------------------------
+
+.. automodule:: nepi.util.timefuncs
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Module contents
+---------------
+
+.. automodule:: nepi.util
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/sphinx/conf.py b/doc/sphinx/conf.py
new file mode 100644 (file)
index 0000000..188ce2a
--- /dev/null
@@ -0,0 +1,247 @@
+# -*- coding: utf-8 -*-
+#
+# Nepi documentation build configuration file, created by
+# sphinx-quickstart on Tue Mar 25 16:32:00 2014.
+#
+# This file is execfile()d with the current directory set to its containing dir.
+#
+# Note that not all possible configuration values are present in this
+# autogenerated file.
+#
+# All configuration values have a default; values that are commented out
+# serve to show the default.
+
+import sys, os
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+sys.path.insert(0, os.path.abspath('../../src'))
+
+# -- General configuration -----------------------------------------------------
+
+# If your documentation needs a minimal Sphinx version, state it here.
+#needs_sphinx = '1.0'
+
+# Add any Sphinx extension module names here, as strings. They can be extensions
+# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
+extensions = ['sphinx.ext.autodoc', 'sphinx.ext.doctest', 'sphinx.ext.intersphinx', 'sphinx.ext.todo', 'sphinx.ext.viewcode']
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['_templates']
+
+# The suffix of source filenames.
+source_suffix = '.rst'
+
+# The encoding of source files.
+#source_encoding = 'utf-8-sig'
+
+# The master toctree document.
+master_doc = 'index'
+
+# General information about the project.
+project = u'NEPI'
+copyright = u'2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino'
+
+# The version info for the project you're documenting, acts as replacement for
+# |version| and |release|, also used in various other places throughout the
+# built documents.
+#
+# The short X.Y version.
+version = '3'
+# The full version, including alpha/beta/rc tags.
+release = '3.0'
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+#language = None
+
+# There are two options for replacing |today|: either, you set today to some
+# non-false value, then it is used:
+#today = ''
+# Else, today_fmt is used as the format for a strftime call.
+#today_fmt = '%B %d, %Y'
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+exclude_patterns = ['_build']
+
+# The reST default role (used for this markup: `text`) to use for all documents.
+#default_role = None
+
+# If true, '()' will be appended to :func: etc. cross-reference text.
+#add_function_parentheses = True
+
+# If true, the current module name will be prepended to all description
+# unit titles (such as .. function::).
+#add_module_names = True
+
+# If true, sectionauthor and moduleauthor directives will be shown in the
+# output. They are ignored by default.
+#show_authors = False
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = 'sphinx'
+
+# A list of ignored prefixes for module index sorting.
+#modindex_common_prefix = []
+
+
+# -- Options for HTML output ---------------------------------------------------
+
+# The theme to use for HTML and HTML Help pages.  See the documentation for
+# a list of builtin themes.
+html_theme = 'sphinxdoc'
+
+# Theme options are theme-specific and customize the look and feel of a theme
+# further.  For a list of options available for each theme, see the
+# documentation.
+#html_theme_options = {}
+
+# Add any paths that contain custom themes here, relative to this directory.
+#html_theme_path = []
+
+# The name for this set of Sphinx documents.  If None, it defaults to
+# "<project> v<release> documentation".
+#html_title = None
+
+# A shorter title for the navigation bar.  Default is the same as html_title.
+#html_short_title = None
+
+# The name of an image file (relative to this directory) to place at the top
+# of the sidebar.
+#html_logo = None
+
+# The name of an image file (within the static path) to use as favicon of the
+# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
+# pixels large.
+#html_favicon = None
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = ['_static']
+
+# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
+# using the given strftime format.
+#html_last_updated_fmt = '%b %d, %Y'
+
+# If true, SmartyPants will be used to convert quotes and dashes to
+# typographically correct entities.
+#html_use_smartypants = True
+
+# Custom sidebar templates, maps document names to template names.
+#html_sidebars = {}
+
+# Additional templates that should be rendered to pages, maps page names to
+# template names.
+#html_additional_pages = {}
+
+# If false, no module index is generated.
+#html_domain_indices = True
+
+# If false, no index is generated.
+#html_use_index = True
+
+# If true, the index is split into individual pages for each letter.
+#html_split_index = False
+
+# If true, links to the reST sources are added to the pages.
+#html_show_sourcelink = True
+
+# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
+#html_show_sphinx = True
+
+# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
+#html_show_copyright = True
+
+# If true, an OpenSearch description file will be output, and all pages will
+# contain a <link> tag referring to it.  The value of this option must be the
+# base URL from which the finished HTML is served.
+#html_use_opensearch = ''
+
+# This is the file name suffix for HTML files (e.g. ".xhtml").
+#html_file_suffix = None
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = 'Nepidoc'
+
+
+# -- Options for LaTeX output --------------------------------------------------
+
+latex_elements = {
+# The paper size ('letterpaper' or 'a4paper').
+#'papersize': 'letterpaper',
+
+# The font size ('10pt', '11pt' or '12pt').
+#'pointsize': '10pt',
+
+# Additional stuff for the LaTeX preamble.
+#'preamble': '',
+}
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title, author, documentclass [howto/manual]).
+latex_documents = [
+  ('index', 'NEPI.tex', u'NEPI Documentation',
+   u'Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino', 'manual'),
+]
+
+# The name of an image file (relative to this directory) to place at the top of
+# the title page.
+#latex_logo = None
+
+# For "manual" documents, if this is true, then toplevel headings are parts,
+# not chapters.
+#latex_use_parts = False
+
+# If true, show page references after internal links.
+#latex_show_pagerefs = False
+
+# If true, show URL addresses after external links.
+#latex_show_urls = False
+
+# Documents to append as an appendix to all manuals.
+#latex_appendices = []
+
+# If false, no module index is generated.
+#latex_domain_indices = True
+
+
+# -- Options for manual page output --------------------------------------------
+
+# One entry per manual page. List of tuples
+# (source start file, name, description, authors, manual section).
+man_pages = [
+    ('index', 'NEPI', u'NEPI Documentation',
+     [u'Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino'], 1)
+]
+
+# If true, show URL addresses after external links.
+#man_show_urls = False
+
+
+# -- Options for Texinfo output ------------------------------------------------
+
+# Grouping the document tree into Texinfo files. List of tuples
+# (source start file, target name, title, author,
+#  dir menu entry, description, category)
+texinfo_documents = [
+  ('index', 'NEPI', u'NEPI Documentation',
+   u'Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino', 
+   'NEPI', 'The network experimentation programming interface',
+   'Miscellaneous'),
+]
+
+# Documents to append as an appendix to all manuals.
+#texinfo_appendices = []
+
+# If false, no module index is generated.
+#texinfo_domain_indices = True
+
+# How to display URL addresses: 'footnote', 'no', or 'inline'.
+#texinfo_show_urls = 'footnote'
+
+
+# Example configuration for intersphinx: refer to the Python standard library.
+intersphinx_mapping = {'http://docs.python.org/': None}
diff --git a/doc/sphinx/index.rst b/doc/sphinx/index.rst
new file mode 100644 (file)
index 0000000..6cc4c83
--- /dev/null
@@ -0,0 +1,91 @@
+.. Nepi documentation master file, created by
+   sphinx-quickstart on Tue Mar 26 11:36:35 2013.
+   You can adapt this file completely to your liking, but it should at least
+   contain the root `toctree` directive.
+
+NEPI modules 
+============
+
+This page documents the NEPI source code. It presents the NEPI core modules, the Platform resource modules (i.e. drivers to manage platforms), and other miscellaneous classes.
+
+Core modules
+------------
+
+  * ExperimentController API
+
+    * :mod:`ExperimentController <nepi.execution.ec>`
+
+  * ResourceManager API
+
+    * :mod:`ResourceManager <nepi.execution.resource>`
+  
+  * Attribute module
+    
+    * :mod:`Attribute <nepi.execution.attribute>`
+  
+  * Trace module
+    
+    * :mod:`Trace <nepi.execution.trace>`
+  
+  * Runner module
+
+    * :mod:`ExperimentRunner <nepi.execution.runner>`
+  
+  * Scheduler module
+
+    * :mod:`Scheduler <nepi.execution.scheduler>`
+
+
+
+Platform modules
+----------------
+
+  * Live Experiments
+
+    * Linux testbeds
+
+      * :mod:`Linux <nepi.resources.linux>`
+
+    * PlanetLab testbeds
+      * :mod:`PlanetLab <nepi.resources.planetlab>`
+
+    * OMF testbed
+
+      * :mod:`OMF <nepi.resources.omf>`
+
+  * Simulated Experiments
+
+    * ns-3 simulator
+
+      * :mod:`ns-3 <nepi.resources.ns3>`    
+
+      * :mod:`ns-3 in Linux hosts <nepi.resources.linux.ns3>`    
+  
+  * Emulated Experiments
+
+    * DCE emulation extension
+
+      * :mod:`DCE Application <nepi.resources.ns3.ns3dceapplication>`    
+
+      * :mod:`DCE Linux Application <nepi.resources.linux.ns3.ns3dceapplication>`    
+    
+    * NetNS emulator
+
+      * :mod:`NetNS <nepi.resources.netns>`    
+
+Miscellaneous modules
+---------------------
+
+      * :mod:`Util <nepi.util>`    
+
+.. toctree::
+
+
+Indices and tables
+==================
+
+* :ref:`genindex`
+* :ref:`modindex`
+* :ref:`search`
+